Skip to content

Validate user-entered JSON in settings #1506

@kylebarron

Description

@kylebarron

It's easy for users to create invalid JSON in the settings menu. For example, the remote kernels setting should be an Array of objects. If you supply just a single object, like

{
    "name": "remote_name",
    "options": {
        "baseUrl": "http://localhost:8888",
        "token": ""
    }
}

then there's an uncaught error:

Uncaught (in promise) TypeError: this.props.items.slice is not a function
    at SelectListView.computeItems (/home/kyle/github/atom_dev/Hydrogen/node_modules/atom-select-list/src/select-list-view.js:281:44)
    at SelectListView.update (/home/kyle/github/atom_dev/Hydrogen/node_modules/atom-select-list/src/select-list-view.js:174:12)
    at WSKernelPicker.<anonymous> (/home/kyle/.atom/packages/Hydrogen/lib/ws-kernel-picker.js:97:40)
    at Generator.next (<anonymous>)
    at step (/home/kyle/github/atom_dev/Hydrogen/lib/ws-kernel-picker.js:9:273)
    at /home/kyle/github/atom_dev/Hydrogen/lib/ws-kernel-picker.js:9:443
    at new Promise (<anonymous>)
    at WSKernelPicker.<anonymous> (/home/kyle/github/atom_dev/Hydrogen/lib/ws-kernel-picker.js:9:99)
    at Object.connectToWSKernel (/home/kyle/github/atom_dev/Hydrogen/lib/main.js:580:25)
    at HTMLElement.hydrogenConnectToRemoteKernel (/home/kyle/github/atom_dev/Hydrogen/lib/main.js:117:57)
    at CommandRegistry.handleCommandEvent (/usr/share/atom/resources/app/static/<embedded>:11:349858)
    at Object.didConfirmSelection (/usr/share/atom/resources/app/static/<embedded>:11:692740)
    at SelectListView.confirmSelection (/usr/share/atom/resources/app/static/<embedded>:11:858030)
    at HTMLDivElement.core:confirm (/usr/share/atom/resources/app/static/<embedded>:11:852909)
    at CommandRegistry.handleCommandEvent (/usr/share/atom/resources/app/static/<embedded>:11:349858)
    at KeymapManager.t.exports.KeymapManager.dispatchCommandEvent (/usr/share/atom/resources/app/static/<embedded>:11:1230399)
    at KeymapManager.t.exports.KeymapManager.handleKeyboardEvent (/usr/share/atom/resources/app/static/<embedded>:11:1226533)
    at WindowEventHandler.handleDocumentKeyEvent (/usr/share/atom/resources/app/static/<embedded>:11:285037)

it seems that it would be helpful to head off errors like this by validating the schema of input when it changes.

Try Joi

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions