From 7555887a9ae707ddfae56d8b4d30ea796ef2af29 Mon Sep 17 00:00:00 2001 From: mskoddow <58812581+mskoddow@users.noreply.github.com> Date: Fri, 8 Oct 2021 07:54:33 +0200 Subject: [PATCH 1/6] Create readme.md --- Server Side/Create Admin Users/readme.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Server Side/Create Admin Users/readme.md diff --git a/Server Side/Create Admin Users/readme.md b/Server Side/Create Admin Users/readme.md new file mode 100644 index 0000000000..b40aba611b --- /dev/null +++ b/Server Side/Create Admin Users/readme.md @@ -0,0 +1,15 @@ +# Purpose +After first login to a freshly provisioned ServiceNow instance it is recommended creating personalized admin accounts. The following script will do the job for you. Just pass the most important properties to the method and a new user is being created with some preconfigured values such as roles and preferences. +# Usage +```javascript +var strUserSysID = createAdminUser( + 'john.doe', + 'John', + 'Doe', + 'john.doe@example.com' +); + +if (strUserSysID != null) { + //user has been created successfully +} +``` From 3fd74630151babf11f5eb25dc1f38fd181723ae7 Mon Sep 17 00:00:00 2001 From: mskoddow <58812581+mskoddow@users.noreply.github.com> Date: Fri, 8 Oct 2021 07:57:30 +0200 Subject: [PATCH 2/6] Create create_admin_user.js --- .../Create Admin Users/create_admin_user.js | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 Server Side/Create Admin Users/create_admin_user.js diff --git a/Server Side/Create Admin Users/create_admin_user.js b/Server Side/Create Admin Users/create_admin_user.js new file mode 100644 index 0000000000..fe5ded6aa2 --- /dev/null +++ b/Server Side/Create Admin Users/create_admin_user.js @@ -0,0 +1,161 @@ + function createAdminUser(strUserName, strFirstName, strLastName, strEmail) { + + try { + var grUser = new GlideRecord('sys_user'); + var strPreferredLanguage = 'en'; + var stTimeZone = 'Europe/Berlin'; + var strDateFormat = 'dd.MM.yyyy'; + var strStartPassword = 'Start1234!'; + var strUserSysId = null; + var arrRoles = [ + 'admin', + 'workspace_admin', + 'security_admin', + ]; + var objUserPreferences = [ + {'name' : 'glide.ui.application_picker.in_header', 'value' : 'true'}, + {'name' : 'glide.ui.update_set_picker.in_header', 'value' : 'true'}, + {'name' : 'glide.ui.related_list_timing', 'value' : 'deferred'}, + {'name' : 'glide.css.theme.ui16', 'value' : '7547a6e0673102008dd992a557415af1'}, + {'name' : 'rowcount', 'value' : '100'}, + {'name' : 'com.glideapp.dashboards.homepage_notification.dont_ask_me_again', 'value' : 'true'}, + ]; + + + //---------------------------------------------------------------------------------- + //perform some tests on method parameters + //---------------------------------------------------------------------------------- + + if (!(typeof strUserName === "string" && strUserName.trim().length > 3)) { + gs.addErrorMessage('Please pass a valid value for Parameter "strUserName"!'); + return null; + } + + if (!(typeof strFirstName === "string" && strFirstName.trim().length > 2)) { + gs.addErrorMessage('Please pass a valid value for Parameter "strFirstName"!'); + return null; + } + + if (!(typeof strLastName === "string" && strLastName.trim().length > 2)) { + gs.addErrorMessage('Please pass a valid value for Parameter "strLastName"!'); + return null; + } + + + if (!(typeof strEmail === "string" && strEmail.trim().length > 10)) { + gs.addErrorMessage('Please pass a valid value for Parameter "strEmail"!'); + return null; + } + + strUserName = strUserName.trim(); + strFirstName = strFirstName.trim(); + strLastName = strLastName.trim(); + strEmail = strEmail.trim(); + + if (grUser.get('user_name', strUserName)) { + gs.addErrorMessage('User with user name "' + strUserName + '" already exists!'); + return null; + } + + if (grUser.get('email', strEmail)) { + gs.addErrorMessage('User with email "' + strEmail + '" already exists!'); + return null; + } + + + //---------------------------------------------------------------------------------- + //test, whether all roles exists and current logged-in is allowed to + //assign a priviledged role to a new user + //---------------------------------------------------------------------------------- + + var grRole = new GlideRecord('sys_user_role'); + + arrRoles.forEach(function(strRoleName) { + if (grRole.get('name', strRoleName)) { + if (grRole.getValue('elevated_privilege') == 1 && !gs.hasRole('security_admin')) { + gs.addErrorMessage('Your are not allowed to assign role "' + strRoleName + '" to antother user!'); + return null; + } + } + else { + gs.addErrorMessage('Role "' + strRoleName + '" does not exist!'); + return null; + } + }); + + + //---------------------------------------------------------------------------------- + //create record at table + //---------------------------------------------------------------------------------- + + grUser.initialize(); + grUser.setValue('user_name', strUserName); + grUser.setValue('email', strEmail); + grUser.setValue('first_name', strFirstName); + grUser.setValue('last_name', strLastName); + grUser.setValue('preferred_language', strPreferredLanguage); + grUser.setValue('time_zone', stTimeZone); + grUser.setValue('date_format', strDateFormat); + grUser.setValue('password_needs_reset', true); + grUser.getElement('user_password').setDisplayValue(strStartPassword); + + if (grUser.insert()) { + strUserSysId = grUser.getUniqueValue(); + } + else { + gs.addErrorMessage('Could not create user with user name "' + strUserName + '"!'); + return null; + } + + + //---------------------------------------------------------------------------------- + //add roles to user + //---------------------------------------------------------------------------------- + + arrRoles.forEach(function(strRoleName) { + if (grRole.get('name', strRoleName)) { + var grUserHasRole = new GlideRecord("sys_user_has_role"); + + grUserHasRole.initialize(); + grUserHasRole.setValue('role', grRole.getUniqueValue()); + grUserHasRole.setValue('user', strUserSysId); + + if (!grUserHasRole.insert()) { + gs.addErrorMessage( + 'Could not assign role "' + strRoleName + '"' + + ' to user with user name "' + strUserName + '"!' + ); + } + } + else { + gs.addErrorMessage( + 'Role "' + strRoleName + '"' + + ' is not available and thus cannot be assigned to user with user name "' + strUserName + '"!' + ); + } + }); + + + //---------------------------------------------------------------------------------- + //add some user preferences + //---------------------------------------------------------------------------------- + + var grUserPreference = new GlideRecord('sys_user_preference'); + + for (var i = 0; i < objUserPreferences.length; i++) { + grUserPreference.initialize(); + grUserPreference.setValue('user', strUserSysId); + grUserPreference.setValue('name', objUserPreferences[i].name); + grUserPreference.setValue('value', objUserPreferences[i].value); + grUserPreference.insert(); + } + + return strUserSysId; + } + catch (e) { + gs.addErrorMessage('Unexpected error! See syslog for more information!'); + gs.error(e); + } + + return null; + } From 778c64713ea02a05b0d1cccadafd8e20e7aceae1 Mon Sep 17 00:00:00 2001 From: mskoddow <58812581+mskoddow@users.noreply.github.com> Date: Wed, 18 Oct 2023 15:00:39 +0200 Subject: [PATCH 3/6] Create isValidGlideRecord.js --- .../isValidGlideRecord/isValidGlideRecord.js | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 GlideRecord/isValidGlideRecord/isValidGlideRecord.js diff --git a/GlideRecord/isValidGlideRecord/isValidGlideRecord.js b/GlideRecord/isValidGlideRecord/isValidGlideRecord.js new file mode 100644 index 0000000000..07aae1197d --- /dev/null +++ b/GlideRecord/isValidGlideRecord/isValidGlideRecord.js @@ -0,0 +1,38 @@ +/* + * Tests whether passed value in parameter `grRecordInstance` represents a valid GlideRecord instance. + * + * @param {Object} grRecordInstance + * Reference to an instance of a GlideRecord object. + * @param {Object} [strTableName] + * If specified an additional check of the GlideRecord against the given table name is performed. + * @returns {Object} + * Name of the table for which the GlideRecord was instantiated. + * @throws TypeError + * In case value of parameter `strTableName` is not a string or parameter count is 0. + */ +function isValidGlideRecord(grRecordInstance, strTableName) { + + if (arguments.length === 0) { + throw new TypeError('At least one parameter value is expected!'); + } + + if (arguments.length > 1 && (typeof strTableName !== 'string' || strTableName.length === 0)) { + throw new TypeError('Value of parameter "strTableName" does not represent a valid string!'); + } + + var _strTableName = String(strTableName || '').trim(); + + var _isValid = + grRecordInstance && + typeof grRecordInstance === 'object' && + grRecordInstance instanceof GlideRecord && + !grRecordInstance.isNewRecord() && + grRecordInstance.isValidRecord(); + + + if (_strTableName.length > 0) { + _isValid = _isValid && grRecordInstance.getTableName() === strTableName; + } + + return _isValid; +}; From 67be1ff7fa84369ab398a03d9fcd883a19ab0089 Mon Sep 17 00:00:00 2001 From: mskoddow <58812581+mskoddow@users.noreply.github.com> Date: Wed, 18 Oct 2023 17:08:13 +0200 Subject: [PATCH 4/6] Create is_valid_GlideRecord.js Initial Commit --- .../is_valid_GlideRecord.js | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 GlideRecord/isValidGlideRecord/is_valid_GlideRecord.js diff --git a/GlideRecord/isValidGlideRecord/is_valid_GlideRecord.js b/GlideRecord/isValidGlideRecord/is_valid_GlideRecord.js new file mode 100644 index 0000000000..10ad2cf3ff --- /dev/null +++ b/GlideRecord/isValidGlideRecord/is_valid_GlideRecord.js @@ -0,0 +1,37 @@ + * Tests whether passed value in parameter `grRecordInstance` represents a valid GlideRecord instance. + * + * @param {Object} grRecordInstance + * Reference to an instance of a GlideRecord object. + * @param {Object} [strTableName] + * If specified an additional check of the GlideRecord against the given table name is performed. + * @returns {Object} + * Name of the table for which the GlideRecord was instantiated. + * @throws TypeError + * In case value of parameter `strTableName` is not a String or parameter count is 0. + */ +function isValidGlideRecord(grRecordInstance, strTableName) { + + if (arguments.length === 0) { + throw new TypeError('At least one parameter value is expected!'); + } + + if (arguments.length > 1 && (typeof strTableName !== 'string' || strTableName.length === 0)) { + throw new TypeError('Value of parameter "strTableName" does not represent a valid string!'); + } + + var _strTableName = String(strTableName || '').trim(); + + var _isValid = + grRecordInstance && + typeof grRecordInstance === 'object' && + grRecordInstance instanceof GlideRecord && + !grRecordInstance.isNewRecord() && + grRecordInstance.isValidRecord(); + + + if (_strTableName.length > 0) { + _isValid = _isValid && grRecordInstance.getTableName() === strTableName; + } + + return _isValid; +}; From 7be115ea793e1435c2a72db6afa6d32f8621d020 Mon Sep 17 00:00:00 2001 From: mskoddow <58812581+mskoddow@users.noreply.github.com> Date: Wed, 18 Oct 2023 17:09:38 +0200 Subject: [PATCH 5/6] Delete GlideRecord/isValidGlideRecord/is_valid_GlideRecord.js --- .../is_valid_GlideRecord.js | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100644 GlideRecord/isValidGlideRecord/is_valid_GlideRecord.js diff --git a/GlideRecord/isValidGlideRecord/is_valid_GlideRecord.js b/GlideRecord/isValidGlideRecord/is_valid_GlideRecord.js deleted file mode 100644 index 10ad2cf3ff..0000000000 --- a/GlideRecord/isValidGlideRecord/is_valid_GlideRecord.js +++ /dev/null @@ -1,37 +0,0 @@ - * Tests whether passed value in parameter `grRecordInstance` represents a valid GlideRecord instance. - * - * @param {Object} grRecordInstance - * Reference to an instance of a GlideRecord object. - * @param {Object} [strTableName] - * If specified an additional check of the GlideRecord against the given table name is performed. - * @returns {Object} - * Name of the table for which the GlideRecord was instantiated. - * @throws TypeError - * In case value of parameter `strTableName` is not a String or parameter count is 0. - */ -function isValidGlideRecord(grRecordInstance, strTableName) { - - if (arguments.length === 0) { - throw new TypeError('At least one parameter value is expected!'); - } - - if (arguments.length > 1 && (typeof strTableName !== 'string' || strTableName.length === 0)) { - throw new TypeError('Value of parameter "strTableName" does not represent a valid string!'); - } - - var _strTableName = String(strTableName || '').trim(); - - var _isValid = - grRecordInstance && - typeof grRecordInstance === 'object' && - grRecordInstance instanceof GlideRecord && - !grRecordInstance.isNewRecord() && - grRecordInstance.isValidRecord(); - - - if (_strTableName.length > 0) { - _isValid = _isValid && grRecordInstance.getTableName() === strTableName; - } - - return _isValid; -}; From 4add04b4496334687d55a766a18911dced69d0a5 Mon Sep 17 00:00:00 2001 From: mskoddow <58812581+mskoddow@users.noreply.github.com> Date: Wed, 18 Oct 2023 17:18:14 +0200 Subject: [PATCH 6/6] Create readme.md Initial commit --- GlideRecord/isValidGlideRecord/readme.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 GlideRecord/isValidGlideRecord/readme.md diff --git a/GlideRecord/isValidGlideRecord/readme.md b/GlideRecord/isValidGlideRecord/readme.md new file mode 100644 index 0000000000..8a5b9565a4 --- /dev/null +++ b/GlideRecord/isValidGlideRecord/readme.md @@ -0,0 +1,13 @@ +# Description + +Many developers are building functions which expect any GlideRecord reference as a function parameter but within these functions they do no check whether the passed value really represents a valid GlideRecord. However to test a function parameter for a valid GlideRecord reference is pretty tricky and extensive. Therefore I built a small helper function `isValidGlideRecord` which will do the job. As a second optional parameter you can specify a table name which will be considered for an additional validation. + +# Usage + +``` +var grIncident = new GlideRecord('incident'); + +grIncident.get('12345678901234567890123456789012'); + +gs.info(isValidGlideRecord(grIncident, 'incident')); +```