@teclib/angular-glpi
Version:
Node Module for using AngularJS with GLPI API REST
491 lines (489 loc) • 16.3 kB
JavaScript
(function () {
'use strict';
angular.module('ngGLPi', [])
.service('GLPi', function ($q, $http) {
var maxRange = 1000;
var validateItemType = false;
var sessionToken = false;
var appToken = false;
var apiUrl = false;
var endpoints = {
Initsession: "initSession ",
Killsession: "killSession ",
GetMyProfiles: "getMyProfiles ",
GetActiveProfile: "getActiveProfile ",
ChangeActiveProfile: "changeActiveProfile ",
GetMyEntities: "getMyEntities ",
GetActiveEntities: "getActiveEntities ",
ChangeActiveEntities: "changeActiveEntities ",
GetFullSession: "getFullSession ",
GetMultipleItems: "getMultipleItems ",
ListSearchOptions: "listSearchOptions ",
SearchItems: "search"
};
var errorMsg = {
invalid_url: [
'ERROR_INVALID_URL', ''],
invalid_itemtype: [
'ERROR_ITEM_NOT_FOUND', ''],
invalid_range: [
'ERROR_INVALID_RANGE', ''],
invalid_authorization: [
'ERROR_INVALID_AUTHORIZATION', ''],
};
String.prototype.toConcatSlash = function () {
var lastChar = this.substr(-1);
if (lastChar !== '/') {
return this + '/';
}
return this;
};
function validURL(url) { //ToDo validate a GLPi API REST URL
var pattern = new RegExp('^(https?:\\/\\/)?' + // protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.?)+[a-z]{2,}|' + // domain name
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
'(\\#[-a-z\\d_]*)?$', 'i'); // fragment locator
return pattern.test(url);
}
function validItemType(itemtype) {
var itemtypes = [
'Alert',
'AuthLDAP',
'Computer',
'Config',
'ConsumableItem',
'Contact',
'Contract',
'CronTask',
'CronTaskLog',
'DBConnection',
'DisplayPreference',
'Document',
'AuthLdapReplicate',
'Event',
'KnowbaseItem',
'Link',
'Log',
'MailCollector',
'Monitor',
'NetworkEquipment',
'Notification',
'NotificationEvent',
'NotificationMailSetting',
'AuthMail',
'NotificationTemplate',
'NotImportedEmail',
'Peripheral',
'Phone',
'Plugin',
'Printer',
'Profile',
'Project',
'QueuedMail',
'Reminder',
'Bookmark',
'RSSFeed',
'Rule',
'RuleCollection',
'SLA',
'SlaLevel_Ticket',
'Software',
'SoftwareLicense',
'Supplier',
'TicketFollowup',
'TicketSatisfaction',
'CartridgeItem',
'Transfer',
'User',
'CommonDBConnexity',
'CommonDropdown',
'CommonITILObject',
'CommonITILTask',
'AutoUpdateSystem',
'Blacklist',
'CartridgeItemType',
'Item_DeviceSoundCard',
'Item_Problem',
'Item_Project',
'Item_Ticket',
'ITILCategory',
'KnowbaseItem_Profile',
'KnowbaseItem_User',
'KnowbaseItemCategory',
'KnowbaseItemTranslation',
'Link_Itemtype',
'Change',
'Location',
'Manufacturer',
'MonitorModel',
'MonitorType',
'Netpoint',
'Network',
'NetworkAlias',
'NetworkEquipmentFirmware',
'NetworkEquipmentModel',
'NetworkEquipmentType',
'Change_Group',
'NetworkInterface',
'NetworkName',
'NetworkPort',
'NetworkPort_NetworkPort',
'NetworkPort_Vlan',
'NetworkPortAggregate',
'NetworkPortAlias',
'NetworkPortDialup',
'NetworkPortEthernet',
'NetworkPortInstantiation',
'Change_Item',
'NetworkPortLocal',
'NetworkPortMigration',
'NetworkPortWifi',
'Notepad',
'NotificationTarget',
'NotificationTargetCartridgeItem',
'NotificationTargetChange',
'NotificationTargetCommonITILObject',
'NotificationTargetConsumableItem',
'NotificationTargetContract',
'Change_Problem',
'NotificationTargetCrontask',
'NotificationTargetDBConnection',
'NotificationTargetFieldUnicity',
'NotificationTargetInfocom',
'NotificationTargetMailCollector',
'NotificationTargetPlanningRecall',
'NotificationTargetProblem',
'NotificationTargetProject',
'NotificationTargetProjectTask',
'NotificationTargetReservation',
'Change_Project',
'NotificationTargetSoftwareLicense',
'NotificationTargetTicket',
'NotificationTargetUser',
'NotificationTemplateTranslation',
'OperatingSystem',
'OperatingSystemServicePack',
'OperatingSystemVersion',
'PeripheralModel',
'PeripheralType',
'PhoneModel',
'Change_Supplier',
'PhonePowerSupply',
'PhoneType',
'PlanningRecall',
'PrinterModel',
'PrinterType',
'Problem',
'Problem_Supplier',
'Problem_Ticket',
'Problem_User',
'ProblemCost',
'Change_Ticket',
'ProblemTask',
'Profile_Reminder',
'Profile_RSSFeed',
'Profile_User',
'ProfileRight',
'ProjectCost',
'ProjectState',
'ProjectTask',
'ProjectTask_Ticket',
'ProjectTaskTeam',
'Change_User',
'ProjectTaskType',
'ProjectTeam',
'ProjectType',
'RegisteredID',
'Reminder_User',
'RequestType',
'Reservation',
'ReservationItem',
'RSSFeed_User',
'RuleAction',
'ChangeCost',
'RuleCriteria',
'RuleDictionnaryComputerModel',
'RuleDictionnaryComputerModelCollection',
'RuleDictionnaryComputerType',
'RuleDictionnaryComputerTypeCollection',
'RuleDictionnaryDropdown',
'RuleDictionnaryDropdownCollection',
'RuleDictionnaryManufacturer',
'RuleDictionnaryManufacturerCollection',
'RuleDictionnaryMonitorModel',
'BlacklistedMailContent',
'ChangeTask',
'RuleDictionnaryMonitorModelCollection',
'RuleDictionnaryMonitorType',
'RuleDictionnaryMonitorTypeCollection',
'RuleDictionnaryNetworkEquipmentModel',
'RuleDictionnaryNetworkEquipmentModelCollection',
'RuleDictionnaryNetworkEquipmentType',
'RuleDictionnaryNetworkEquipmentTypeCollection',
'RuleDictionnaryOperatingSystem',
'RuleDictionnaryOperatingSystemCollection',
'RuleDictionnaryOperatingSystemServicePack',
'ChangeValidation',
'RuleDictionnaryOperatingSystemServicePackCollection',
'RuleDictionnaryOperatingSystemVersion',
'RuleDictionnaryOperatingSystemVersionCollection',
'RuleDictionnaryPeripheralModel',
'RuleDictionnaryPeripheralModelCollection',
'RuleDictionnaryPeripheralType',
'RuleDictionnaryPeripheralTypeCollection',
'RuleDictionnaryPhoneModel',
'RuleDictionnaryPhoneModelCollection',
'RuleDictionnaryPhoneType',
'CommonDBChild',
'RuleDictionnaryPhoneTypeCollection',
'RuleDictionnaryPrinter',
'RuleDictionnaryPrinterCollection',
'RuleDictionnaryPrinterModel',
'RuleDictionnaryPrinterModelCollection',
'RuleDictionnaryPrinterType',
'RuleDictionnaryPrinterTypeCollection',
'RuleDictionnarySoftware',
'RuleDictionnarySoftwareCollection',
'RuleImportComputer',
'CommonDBRelation',
'RuleImportComputerCollection',
'RuleImportEntity',
'RuleImportEntityCollection',
'RuleMailCollector',
'RuleMailCollectorCollection',
'RuleRight',
'RuleRightCollection',
'RuleRightParameter',
'RuleSoftwareCategory',
'RuleSoftwareCategoryCollection',
'CommonDevice',
'RuleTicket',
'RuleTicketCollection',
'SlaLevel',
'SlaLevelAction',
'SlaLevelCriteria',
'SoftwareCategory',
'SoftwareLicenseType',
'SoftwareVersion',
'SolutionTemplate',
'SolutionType',
'CommonImplicitTreeDropdown',
'SsoVariable',
'State',
'Supplier_Ticket',
'SupplierType',
'TaskCategory',
'Ticket',
'Ticket_Ticket',
'Ticket_User',
'TicketCost',
'TicketRecurrent',
'CommonITILActor',
'TicketTask',
'TicketTemplate',
'TicketTemplateHiddenField',
'TicketTemplateMandatoryField',
'TicketTemplatePredefinedField',
'TicketValidation',
'UserCategory',
'UserEmail',
'UserTitle',
'VirtualMachineState',
'CommonITILCost',
'VirtualMachineSystem',
'VirtualMachineType',
'Vlan',
'WifiNetwork',
'CommonITILValidation',
'CommonTreeDropdown',
'Bookmark_User',
'Computer_Item',
'Computer_SoftwareLicense',
'Computer_SoftwareVersion',
'ComputerDisk',
'ComputerModel',
'ComputerType',
'ComputerVirtualMachine',
'Consumable',
'ConsumableItemType',
'Contact_Supplier',
'Budget',
'ContactType',
'Contract_Item',
'Contract_Supplier',
'ContractCost',
'ContractType',
'DeviceCase',
'DeviceCaseType',
'DeviceControl',
'DeviceDrive',
'DeviceGraphicCard',
'Calendar',
'DeviceHardDrive',
'DeviceMemory',
'DeviceMemoryType',
'DeviceMotherboard',
'DeviceNetworkCard',
'DevicePci',
'DevicePowerSupply',
'DeviceProcessor',
'DeviceSoundCard',
'Document_Item',
'Calendar_Holiday',
'DocumentCategory',
'DocumentType',
'Domain',
'DropdownTranslation',
'Entity',
'Entity_KnowbaseItem',
'Entity_Reminder',
'Entity_RSSFeed',
'Fieldblacklist',
'FieldUnicity',
'CalendarSegment',
'Filesystem',
'FQDN',
'FQDNLabel',
'Group',
'Group_KnowbaseItem',
'Group_Problem',
'Group_Reminder',
'Group_RSSFeed',
'Group_Ticket',
'Group_User',
'Cartridge',
'Holiday',
'Infocom',
'InterfaceType',
'IPAddress',
'IPAddress_IPNetwork',
'IPNetmask',
'IPNetwork',
'IPNetwork_Vlan',
'Item_DeviceCase',
'Item_DeviceControl',
'CartridgeItem_PrinterModel',
'Item_DeviceDrive',
'Item_DeviceGraphicCard',
'Item_DeviceHardDrive',
'Item_DeviceMemory',
'Item_DeviceMotherboard',
'Item_DeviceNetworkCard',
'Item_DevicePci',
'Item_DevicePowerSupply',
'Item_DeviceProcessor',
'Item_Devices'];
var found = itemtypes.indexOf(itemtype);
if (found === -1) {
return false;
} else {
return true;
}
}
function validRange(range) {
var pattern = new RegExp('/^\d+-\d+|\*$/');
return pattern.test(range);
}
return {
SetValidateItemType: function (aBoolValue){
validateItemType = aBoolValue;
},
initsession: function (url, authorization) {
var responseDefer = $q.defer();
var headers = {};
headers['Content-Type'] = 'application/json';
if (!validURL(url)) {
throw new Error(errorMsg.invalid_url);
} else {
apiUrl = url.toConcatSlash();
}
if (!authorization) {
throw new Error(errorMsg.invalid_authorization);
}
if (authorization.basic) {
headers.Authorization = 'Basic ' + window.btoa(authorization.login + ':' + authorization.password);
}
if (authorization.user_token) {
headers.Authorization = 'user_token ' + authorization.user_token;
}
if (authorization.app_token) {
headers['App-Token'] = authorization.app_token;
appToken = authorization.app_token;
}
$http({
method: 'GET',
url: apiUrl + endpoints.initsession,
headers: headers,
data: {},
}).success(function (resp) {
sessionToken = resp.data.session_token;
responseDefer.resolve(resp);
}).error(function (error) {
responseDefer.reject(error);
});
return responseDefer.promise;
},
killsession: function () {
var responseDefer = $q.defer();
var headers = {};
headers['Content-Type'] = 'application/json';
headers['Session-Token'] = this.sessionToken;
if (appToken) {
headers['App-Token'] = this.AppToken;
}
$http({
method: 'GET',
url: apiUrl + endpoints.killsession,
headers: headers,
data: {},
}).success(function () {
responseDefer.resolve();
}).error(function (error) {
responseDefer.reject(error);
});
return responseDefer.promise;
},
getMyProfiles: function () { },
getActiveProfile: function () { },
changeActiveProfile: function () { },
getMyEntities: function () { },
getActiveEntities: function () { },
changeActiveEntities: function () { },
getFullSession: function () { },
getAnItem: function () { },
getAllItems: function (itemtype, range) {
var responseDefer = $q.defer();
if (!validItemType(itemtype) && this.validateItemType) {
throw new Error(errorMsg.invalid_url);
}
if (range) {
if (!validRange(range)) {
throw new Error(errorMsg.invalid_range);
}
}
$http({
method: 'GET',
url: apiUrl.toConcatSlash() + itemtype,
params: {
range: range ? range : maxRange
},
data: {},
}).success(function (resp) {
responseDefer.resolve(resp);
}).error(function (error) {
responseDefer.reject(error);
});
return responseDefer.promise;
},
getSubItems: function () { },
getMultipleItems: function () { },
listSearchOptions: function () { },
searchItems: function () { },
addItems: function () { },
updateItems: function () { },
deleteItems: function () { }
};
});
})();