static verifyView (view) {
    view = (
      ({ // only allow these properties in views
        // eslint-disable-next-line no-shadow
        name, integrations, viewRoles, editRoles, creator
      }) => ({ name, integrations, viewRoles, editRoles, creator })
    )(view);

    if (!ArkimeUtil.isString(view.name)) {
      return { msg: 'Missing name' };
    }

    view.name = ArkimeUtil.removeSpecialChars(view.name);

    if (view.viewRoles !== undefined) {
      if (!Array.isArray(view.viewRoles)) { return { msg: 'viewRoles must be array' }; }

      for (const viewRole of view.viewRoles) {
        if (!ArkimeUtil.isString(viewRole)) {
          return { msg: 'viewRoles must contain strings' };
        }
      }
    }

    if (view.editRoles !== undefined) {
      if (!Array.isArray(view.editRoles)) { return { msg: 'editRoles must be array' }; }

      for (const editRole of view.editRoles) {
        if (!ArkimeUtil.isString(editRole)) {
          return { msg: 'editRoles must contain strings' };
        }
      }
    }

    if (view.integrations !== undefined) {
      if (!Array.isArray(view.integrations)) { return { msg: 'integrations must be array' }; }

      for (const integration of view.integrations) {
        if (!ArkimeUtil.isString(integration)) {
          return { msg: 'integrations must contain strings' };
        }
      }
    }

    return { view };
  }
Verify the view, returns error msg on failure