diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..f47c262 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,23 @@ +version: 2 +jobs: + build: + working_directory: ~/node-module-glpi + docker: + - image: circleci/node:8.5 + steps: + - checkout + - restore_cache: + key: dependency-cache-{{ checksum "package.json" }} + - run: + name: install-npm-wee + command: npm install + - save_cache: + key: dependency-cache-{{ checksum "package.json" }} + paths: + - ./node_modules + - run: + name: generate a configuration file + command: ci/create-config-file.sh + - run: + name: test + command: npm test \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e8954c4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +.DS_Store +config.json \ No newline at end of file diff --git a/ci/create-config-file.sh b/ci/create-config-file.sh new file mode 100755 index 0000000..8d4d1bc --- /dev/null +++ b/ci/create-config-file.sh @@ -0,0 +1,6 @@ +mv ./{config.example,config}.json +sed -i -e "s|http://example.com/glpi/apirest.php|${APIREST_URL}|g" config.json +sed -i -e "s|exampleName|${USER_NAME}|g" config.json +sed -i -e "s|examplePassword|${USER_PASSWORD}|g" config.json +sed -i -e "s|exampleUserToken|${USER_TOKEN}|g" config.json +sed -i -e "s|exampleAppToken|${APP_TOKEN}|g" config.json diff --git a/config.example.json b/config.example.json new file mode 100644 index 0000000..2f31039 --- /dev/null +++ b/config.example.json @@ -0,0 +1,9 @@ +{ + "apirest": "http://example.com/glpi/apirest.php", + "user": { + "name": "exampleName", + "password": "examplePassword", + "userToken": "exampleUserToken" + }, + "appToken": "exampleAppToken" +} diff --git a/example/example-001.js b/example/example-001.js deleted file mode 100644 index ac0a7de..0000000 --- a/example/example-001.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict' - -const GlpiRestClient = require('../lib/restclient') - -var client = new GlpiRestClient('http://localhost/~dethegeek/glpi-flyvemdm-92/apirest.php') - -client.initSessionByCredentials('glpi', 'glpi').then(() => { - console.log('Logged in !') - //var computer = client.getAnItem('computer', 1) -}) - -/* -var computer = client.getAnItem('computer', 1) -var computers = client.getMultipleItems([ - {"itemtype": "computer", "id": 1}, - {"itemtype": "computer", "id": 3}, - {"itemtype": "computer", "id": 4} -]) -*/ diff --git a/example/example-getActiveEntities.js b/example/example-getActiveEntities.js new file mode 100644 index 0000000..cf9a536 --- /dev/null +++ b/example/example-getActiveEntities.js @@ -0,0 +1,18 @@ +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') + +const client = new GlpiRestClient(config.apirest) + +client.initSessionByCredentials(config.user.name, config.user.password, config.appToken) + .then((res) => { + client.getActiveEntities() + .then((res2) => { + console.log(res2) + }) + .catch((err2) => { + console.log(err2) + }) + }) + .catch((err) => { + console.log(err) + }) \ No newline at end of file diff --git a/example/example-getActiveProfile.js b/example/example-getActiveProfile.js new file mode 100644 index 0000000..ad05e7c --- /dev/null +++ b/example/example-getActiveProfile.js @@ -0,0 +1,18 @@ +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') + +const client = new GlpiRestClient(config.apirest) + +client.initSessionByCredentials(config.user.name, config.user.password, config.appToken) + .then((res) => { + client.getActiveProfile() + .then((res2) => { + console.log(res2) + }) + .catch((err2) => { + console.log(err2) + }) + }) + .catch((err) => { + console.log(err) + }) \ No newline at end of file diff --git a/example/example-getAllItems.js b/example/example-getAllItems.js new file mode 100644 index 0000000..0eb1c86 --- /dev/null +++ b/example/example-getAllItems.js @@ -0,0 +1,19 @@ +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') +const itemtype = require('../lib/itemtype') + +const client = new GlpiRestClient(config.apirest) + +client.initSessionByCredentials(config.user.name, config.user.password, config.appToken) + .then((res) => { + client.getAllItems(itemtype.User) + .then((res2) => { + console.log(res2) + }) + .catch((err2) => { + console.log(err2) + }) + }) + .catch((err) => { + console.log(err) + }) \ No newline at end of file diff --git a/example/example-getFullSession.js b/example/example-getFullSession.js new file mode 100644 index 0000000..b1727fd --- /dev/null +++ b/example/example-getFullSession.js @@ -0,0 +1,18 @@ +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') + +const client = new GlpiRestClient(config.apirest) + +client.initSessionByCredentials(config.user.name, config.user.password, config.appToken) + .then((res) => { + client.getFullSession() + .then((res2) => { + console.log(res2) + }) + .catch((err2) => { + console.log(err2) + }) + }) + .catch((err) => { + console.log(err) + }) \ No newline at end of file diff --git a/example/example-getGlpiConfig.js b/example/example-getGlpiConfig.js new file mode 100644 index 0000000..af6c9b5 --- /dev/null +++ b/example/example-getGlpiConfig.js @@ -0,0 +1,18 @@ +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') + +const client = new GlpiRestClient(config.apirest) + +client.initSessionByCredentials(config.user.name, config.user.password, config.appToken) + .then((res) => { + client.getGlpiConfig() + .then((res2) => { + console.log(res2) + }) + .catch((err2) => { + console.log(err2) + }) + }) + .catch((err) => { + console.log(err) + }) \ No newline at end of file diff --git a/example/example-getMyEntities.js b/example/example-getMyEntities.js new file mode 100644 index 0000000..7e7bef2 --- /dev/null +++ b/example/example-getMyEntities.js @@ -0,0 +1,18 @@ +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') + +const client = new GlpiRestClient(config.apirest) + +client.initSessionByCredentials(config.user.name, config.user.password, config.appToken) + .then((res) => { + client.getMyEntities() + .then((res2) => { + console.log(res2) + }) + .catch((err2) => { + console.log(err2) + }) + }) + .catch((err) => { + console.log(err) + }) \ No newline at end of file diff --git a/example/example-getMyProfiles.js b/example/example-getMyProfiles.js new file mode 100644 index 0000000..ddc72db --- /dev/null +++ b/example/example-getMyProfiles.js @@ -0,0 +1,18 @@ +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') + +const client = new GlpiRestClient(config.apirest) + +client.initSessionByCredentials(config.user.name, config.user.password, config.appToken) + .then((res) => { + client.getMyProfiles() + .then((res2) => { + console.log(res2) + }) + .catch((err2) => { + console.log(err2) + }) + }) + .catch((err) => { + console.log(err) + }) \ No newline at end of file diff --git a/example/example-initSessionByCredentials.js b/example/example-initSessionByCredentials.js new file mode 100644 index 0000000..78f743a --- /dev/null +++ b/example/example-initSessionByCredentials.js @@ -0,0 +1,12 @@ +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') + +const client = new GlpiRestClient(config.apirest) + +client.initSessionByCredentials(config.user.name, config.user.password, config.appToken) + .then((res) => { + console.log(res) + }) + .catch((err) => { + console.log(err) + }) \ No newline at end of file diff --git a/example/example-initSessionByUserToken.js b/example/example-initSessionByUserToken.js new file mode 100644 index 0000000..c11e3af --- /dev/null +++ b/example/example-initSessionByUserToken.js @@ -0,0 +1,12 @@ +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') + +const client = new GlpiRestClient(config.apirest) + +client.initSessionByUserToken(config.user.userToken, config.appToken) + .then((res) => { + console.log(res) + }) + .catch((err) => { + console.log(err) + }) \ No newline at end of file diff --git a/example/example-killSession.js b/example/example-killSession.js new file mode 100644 index 0000000..25c3ecc --- /dev/null +++ b/example/example-killSession.js @@ -0,0 +1,18 @@ +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') + +const client = new GlpiRestClient(config.apirest) + +client.initSessionByCredentials(config.user.name, config.user.password, config.appToken) + .then((res) => { + client.killSession() + .then((res2) => { + console.log(res2) + }) + .catch((err2) => { + console.log(err2) + }) + }) + .catch((err) => { + console.log(err) + }) \ No newline at end of file diff --git a/lib/item.js b/lib/item.js deleted file mode 100644 index 4a47907..0000000 --- a/lib/item.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * http://usejsdoc.org/ - */ -'use strict' - -class item { - constructor(itemtype, id) { - this.itemtype = itemtype - this.id = id - } -} \ No newline at end of file diff --git a/lib/itemtype.js b/lib/itemtype.js new file mode 100644 index 0000000..3aae810 --- /dev/null +++ b/lib/itemtype.js @@ -0,0 +1,328 @@ +module.exports = itemtype = { + "Alert": { "name": "Alert" }, + "AuthLDAP": { "name": "AuthLDAP" }, + "Computer": { "name": "Computer" }, + "Config": { "name": "Config" }, + "ConsumableItem": { "name": "ConsumableItem" }, + "Contact": { "name": "Contact" }, + "Contract": { "name": "Contract" }, + "CronTask": { "name": "CronTask" }, + "CronTaskLog": { "name": "CronTaskLog" }, + "DBConnection": { "name": "DBConnection" }, + "DisplayPreference": { "name": "DisplayPreference" }, + "Document": { "name": "Document" }, + "AuthLdapReplicate": { "name": "AuthLdapReplicate" }, + "Event": { "name": "Event" }, + "KnowbaseItem": { "name": "KnowbaseItem" }, + "Link": { "name": "Link" }, + "Log": { "name": "Log" }, + "MailCollector": { "name": "MailCollector" }, + "Monitor": { "name": "Monitor" }, + "NetworkEquipment": { "name": "NetworkEquipment" }, + "Notification": { "name": "Notification" }, + "NotificationEvent": { "name": "NotificationEvent" }, + "NotificationMailSetting": { "name": "NotificationMailSetting" }, + "AuthMail": { "name": "AuthMail" }, + "NotificationTemplate": { "name": "NotificationTemplate" }, + "NotImportedEmail": { "name": "NotImportedEmail" }, + "Peripheral": { "name": "Peripheral" }, + "Phone": { "name": "Phone" }, + "Plugin": { "name": "Plugin" }, + "Printer": { "name": "Printer" }, + "Profile": { "name": "Profile" }, + "Project": { "name": "Project" }, + "QueuedMail": { "name": "QueuedMail" }, + "Reminder": { "name": "Reminder" }, + "Bookmark": { "name": "Bookmark" }, + "RSSFeed": { "name": "RSSFeed" }, + "Rule": { "name": "Rule" }, + "RuleCollection": { "name": "RuleCollection" }, + "SLA": { "name": "SLA" }, + "SlaLevel_Ticket": { "name": "SlaLevel_Ticket" }, + "Software": { "name": "Software" }, + "SoftwareLicense": { "name": "SoftwareLicense" }, + "Supplier": { "name": "Supplier" }, + "TicketFollowup": { "name": "TicketFollowup" }, + "TicketSatisfaction": { "name": "TicketSatisfaction" }, + "CartridgeItem": { "name": "CartridgeItem" }, + "Transfer": { "name": "Transfer" }, + "User": { "name": "User" }, + "CommonDBConnexity": { "name": "CommonDBConnexity" }, + "CommonDropdown": { "name": "CommonDropdown" }, + "CommonITILObject": { "name": "CommonITILObject" }, + "CommonITILTask": { "name": "CommonITILTask" }, + "AutoUpdateSystem": { "name": "AutoUpdateSystem" }, + "Blacklist": { "name": "Blacklist" }, + "CartridgeItemType": { "name": "CartridgeItemType" }, + "Item_DeviceSoundCard": { "name": "Item_DeviceSoundCard" }, + "Item_Problem": { "name": "Item_Problem" }, + "Item_Project": { "name": "Item_Project" }, + "Item_Ticket": { "name": "Item_Ticket" }, + "ITILCategory": { "name": "ITILCategory" }, + "KnowbaseItem_Profile": { "name": "KnowbaseItem_Profile" }, + "KnowbaseItem_User": { "name": "KnowbaseItem_User" }, + "KnowbaseItemCategory": { "name": "KnowbaseItemCategory" }, + "KnowbaseItemTranslation": { "name": "KnowbaseItemTranslation" }, + "Link_Itemtype": { "name": "Link_Itemtype" }, + "Change": { "name": "Change" }, + "Location": { "name": "Location" }, + "Manufacturer": { "name": "Manufacturer" }, + "MonitorModel": { "name": "MonitorModel" }, + "MonitorType": { "name": "MonitorType" }, + "Netpoint": { "name": "Netpoint" }, + "Network": { "name": "Network" }, + "NetworkAlias": { "name": "NetworkAlias" }, + "NetworkEquipmentFirmware": { "name": "NetworkEquipmentFirmware" }, + "NetworkEquipmentModel": { "name": "NetworkEquipmentModel" }, + "NetworkEquipmentType": { "name": "NetworkEquipmentType" }, + "Change_Group": { "name": "Change_Group" }, + "NetworkInterface": { "name": "NetworkInterface" }, + "NetworkName": { "name": "NetworkName" }, + "NetworkPort": { "name": "NetworkPort" }, + "NetworkPort_NetworkPort": { "name": "NetworkPort_NetworkPort" }, + "NetworkPort_Vlan": { "name": "NetworkPort_Vlan" }, + "NetworkPortAggregate": { "name": "NetworkPortAggregate" }, + "NetworkPortAlias": { "name": "NetworkPortAlias" }, + "NetworkPortDialup": { "name": "NetworkPortDialup" }, + "NetworkPortEthernet": { "name": "NetworkPortEthernet" }, + "NetworkPortInstantiation": { "name": "NetworkPortInstantiation" }, + "Change_Item": { "name": "Change_Item" }, + "NetworkPortLocal": { "name": "NetworkPortLocal" }, + "NetworkPortMigration": { "name": "NetworkPortMigration" }, + "NetworkPortWifi": { "name": "NetworkPortWifi" }, + "Notepad": { "name": "Notepad" }, + "NotificationTarget": { "name": "NotificationTarget" }, + "NotificationTargetCartridgeItem": { "name": "NotificationTargetCartridgeItem" }, + "NotificationTargetChange": { "name": "NotificationTargetChange" }, + "NotificationTargetCommonITILObject": { "name": "NotificationTargetCommonITILObject" }, + "NotificationTargetConsumableItem": { "name": "NotificationTargetConsumableItem" }, + "NotificationTargetContract": { "name": "NotificationTargetContract" }, + "Change_Problem": { "name": "Change_Problem" }, + "NotificationTargetCrontask": { "name": "NotificationTargetCrontask" }, + "NotificationTargetDBConnection": { "name": "NotificationTargetDBConnection" }, + "NotificationTargetFieldUnicity": { "name": "NotificationTargetFieldUnicity" }, + "NotificationTargetInfocom": { "name": "NotificationTargetInfocom" }, + "NotificationTargetMailCollector": { "name": "NotificationTargetMailCollector" }, + "NotificationTargetPlanningRecall": { "name": "NotificationTargetPlanningRecall" }, + "NotificationTargetProblem": { "name": "NotificationTargetProblem" }, + "NotificationTargetProject": { "name": "NotificationTargetProject" }, + "NotificationTargetProjectTask": { "name": "NotificationTargetProjectTask" }, + "NotificationTargetReservation": { "name": "NotificationTargetReservation" }, + "Change_Project": { "name": "Change_Project" }, + "NotificationTargetSoftwareLicense": { "name": "NotificationTargetSoftwareLicense" }, + "NotificationTargetTicket": { "name": "NotificationTargetTicket" }, + "NotificationTargetUser": { "name": "NotificationTargetUser" }, + "NotificationTemplateTranslation": { "name": "NotificationTemplateTranslation" }, + "OperatingSystem": { "name": "OperatingSystem" }, + "OperatingSystemServicePack": { "name": "OperatingSystemServicePack" }, + "OperatingSystemVersion": { "name": "OperatingSystemVersion" }, + "PeripheralModel": { "name": "PeripheralModel" }, + "PeripheralType": { "name": "PeripheralType" }, + "PhoneModel": { "name": "PhoneModel" }, + "Change_Supplier": { "name": "Change_Supplier" }, + "PhonePowerSupply": { "name": "PhonePowerSupply" }, + "PhoneType": { "name": "PhoneType" }, + "PlanningRecall": { "name": "PlanningRecall" }, + "PrinterModel": { "name": "PrinterModel" }, + "PrinterType": { "name": "PrinterType" }, + "Problem": { "name": "Problem" }, + "Problem_Supplier": { "name": "Problem_Supplier" }, + "Problem_Ticket": { "name": "Problem_Ticket" }, + "Problem_User": { "name": "Problem_User" }, + "ProblemCost": { "name": "ProblemCost" }, + "Change_Ticket": { "name": "Change_Ticket" }, + "ProblemTask": { "name": "ProblemTask" }, + "Profile_Reminder": { "name": "Profile_Reminder" }, + "Profile_RSSFeed": { "name": "Profile_RSSFeed" }, + "Profile_User": { "name": "Profile_User" }, + "ProfileRight": { "name": "ProfileRight" }, + "ProjectCost": { "name": "ProjectCost" }, + "ProjectState": { "name": "ProjectState" }, + "ProjectTask": { "name": "ProjectTask" }, + "ProjectTask_Ticket": { "name": "ProjectTask_Ticket" }, + "ProjectTaskTeam": { "name": "ProjectTaskTeam" }, + "Change_User": { "name": "Change_User" }, + "ProjectTaskType": { "name": "ProjectTaskType" }, + "ProjectTeam": { "name": "ProjectTeam" }, + "ProjectType": { "name": "ProjectType" }, + "RegisteredID": { "name": "RegisteredID" }, + "Reminder_User": { "name": "Reminder_User" }, + "RequestType": { "name": "RequestType" }, + "Reservation": { "name": "Reservation" }, + "ReservationItem": { "name": "ReservationItem" }, + "RSSFeed_User": { "name": "RSSFeed_User" }, + "RuleAction": { "name": "RuleAction" }, + "ChangeCost": { "name": "ChangeCost" }, + "RuleCriteria": { "name": "RuleCriteria" }, + "RuleDictionnaryComputerModel": { "name": "RuleDictionnaryComputerModel" }, + "RuleDictionnaryComputerModelCollection": { "name": "RuleDictionnaryComputerModelCollection" }, + "RuleDictionnaryComputerType": { "name": "RuleDictionnaryComputerType" }, + "RuleDictionnaryComputerTypeCollection": { "name": "RuleDictionnaryComputerTypeCollection" }, + "RuleDictionnaryDropdown": { "name": "RuleDictionnaryDropdown" }, + "RuleDictionnaryDropdownCollection": { "name": "RuleDictionnaryDropdownCollection" }, + "RuleDictionnaryManufacturer": { "name": "RuleDictionnaryManufacturer" }, + "RuleDictionnaryManufacturerCollection": { "name": "RuleDictionnaryManufacturerCollection" }, + "RuleDictionnaryMonitorModel": { "name": "RuleDictionnaryMonitorModel" }, + "BlacklistedMailContent": { "name": "BlacklistedMailContent" }, + "ChangeTask": { "name": "ChangeTask" }, + "RuleDictionnaryMonitorModelCollection": { "name": "RuleDictionnaryMonitorModelCollection" }, + "RuleDictionnaryMonitorType": { "name": "RuleDictionnaryMonitorType" }, + "RuleDictionnaryMonitorTypeCollection": { "name": "RuleDictionnaryMonitorTypeCollection" }, + "RuleDictionnaryNetworkEquipmentModel": { "name": "RuleDictionnaryNetworkEquipmentModel" }, + "RuleDictionnaryNetworkEquipmentModelCollection": { "name": "RuleDictionnaryNetworkEquipmentModelCollection" }, + "RuleDictionnaryNetworkEquipmentType": { "name": "RuleDictionnaryNetworkEquipmentType" }, + "RuleDictionnaryNetworkEquipmentTypeCollection": { "name": "RuleDictionnaryNetworkEquipmentTypeCollection" }, + "RuleDictionnaryOperatingSystem": { "name": "RuleDictionnaryOperatingSystem" }, + "RuleDictionnaryOperatingSystemCollection": { "name": "RuleDictionnaryOperatingSystemCollection" }, + "RuleDictionnaryOperatingSystemServicePack": { "name": "RuleDictionnaryOperatingSystemServicePack" }, + "ChangeValidation": { "name": "ChangeValidation" }, + "RuleDictionnaryOperatingSystemServicePackCollection": { "name": "RuleDictionnaryOperatingSystemServicePackCollection" }, + "RuleDictionnaryOperatingSystemVersion": { "name": "RuleDictionnaryOperatingSystemVersion" }, + "RuleDictionnaryOperatingSystemVersionCollection": { "name": "RuleDictionnaryOperatingSystemVersionCollection" }, + "RuleDictionnaryPeripheralModel": { "name": "RuleDictionnaryPeripheralModel" }, + "RuleDictionnaryPeripheralModelCollection": { "name": "RuleDictionnaryPeripheralModelCollection" }, + "RuleDictionnaryPeripheralType": { "name": "RuleDictionnaryPeripheralType" }, + "RuleDictionnaryPeripheralTypeCollection": { "name": "RuleDictionnaryPeripheralTypeCollection" }, + "RuleDictionnaryPhoneModel": { "name": "RuleDictionnaryPhoneModel" }, + "RuleDictionnaryPhoneModelCollection": { "name": "RuleDictionnaryPhoneModelCollection" }, + "RuleDictionnaryPhoneType": { "name": "RuleDictionnaryPhoneType" }, + "CommonDBChild": { "name": "CommonDBChild" }, + "RuleDictionnaryPhoneTypeCollection": { "name": "RuleDictionnaryPhoneTypeCollection" }, + "RuleDictionnaryPrinter": { "name": "RuleDictionnaryPrinter" }, + "RuleDictionnaryPrinterCollection": { "name": "RuleDictionnaryPrinterCollection" }, + "RuleDictionnaryPrinterModel": { "name": "RuleDictionnaryPrinterModel" }, + "RuleDictionnaryPrinterModelCollection": { "name": "RuleDictionnaryPrinterModelCollection" }, + "RuleDictionnaryPrinterType": { "name": "RuleDictionnaryPrinterType" }, + "RuleDictionnaryPrinterTypeCollection": { "name": "RuleDictionnaryPrinterTypeCollection" }, + "RuleDictionnarySoftware": { "name": "RuleDictionnarySoftware" }, + "RuleDictionnarySoftwareCollection": { "name": "RuleDictionnarySoftwareCollection" }, + "RuleImportComputer": { "name": "RuleImportComputer" }, + "CommonDBRelation": { "name": "CommonDBRelation" }, + "RuleImportComputerCollection": { "name": "RuleImportComputerCollection" }, + "RuleImportEntity": { "name": "RuleImportEntity" }, + "RuleImportEntityCollection": { "name": "RuleImportEntityCollection" }, + "RuleMailCollector": { "name": "RuleMailCollector" }, + "RuleMailCollectorCollection": { "name": "RuleMailCollectorCollection" }, + "RuleRight": { "name": "RuleRight" }, + "RuleRightCollection": { "name": "RuleRightCollection" }, + "RuleRightParameter": { "name": "RuleRightParameter" }, + "RuleSoftwareCategory": { "name": "RuleSoftwareCategory" }, + "RuleSoftwareCategoryCollection": { "name": "RuleSoftwareCategoryCollection" }, + "CommonDevice": { "name": "CommonDevice" }, + "RuleTicket": { "name": "RuleTicket" }, + "RuleTicketCollection": { "name": "RuleTicketCollection" }, + "SlaLevel": { "name": "SlaLevel" }, + "SlaLevelAction": { "name": "SlaLevelAction" }, + "SlaLevelCriteria": { "name": "SlaLevelCriteria" }, + "SoftwareCategory": { "name": "SoftwareCategory" }, + "SoftwareLicenseType": { "name": "SoftwareLicenseType" }, + "SoftwareVersion": { "name": "SoftwareVersion" }, + "SolutionTemplate": { "name": "SolutionTemplate" }, + "SolutionType": { "name": "SolutionType" }, + "CommonImplicitTreeDropdown": { "name": "CommonImplicitTreeDropdown" }, + "SsoVariable": { "name": "SsoVariable" }, + "State": { "name": "State" }, + "Supplier_Ticket": { "name": "Supplier_Ticket" }, + "SupplierType": { "name": "SupplierType" }, + "TaskCategory": { "name": "TaskCategory" }, + "Ticket": { "name": "Ticket" }, + "Ticket_Ticket": { "name": "Ticket_Ticket" }, + "Ticket_User": { "name": "Ticket_User" }, + "TicketCost": { "name": "TicketCost" }, + "TicketRecurrent": { "name": "TicketRecurrent" }, + "CommonITILActor": { "name": "CommonITILActor" }, + "TicketTask": { "name": "TicketTask" }, + "TicketTemplate": { "name": "TicketTemplate" }, + "TicketTemplateHiddenField": { "name": "TicketTemplateHiddenField" }, + "TicketTemplateMandatoryField": { "name": "TicketTemplateMandatoryField" }, + "TicketTemplatePredefinedField": { "name": "TicketTemplatePredefinedField" }, + "TicketValidation": { "name": "TicketValidation" }, + "UserCategory": { "name": "UserCategory" }, + "UserEmail": { "name": "UserEmail" }, + "UserTitle": { "name": "UserTitle" }, + "VirtualMachineState": { "name": "VirtualMachineState" }, + "CommonITILCost": { "name": "CommonITILCost" }, + "VirtualMachineSystem": { "name": "VirtualMachineSystem" }, + "VirtualMachineType": { "name": "VirtualMachineType" }, + "Vlan": { "name": "Vlan" }, + "WifiNetwork": { "name": "WifiNetwork" }, + "CommonITILValidation": { "name": "CommonITILValidation" }, + "CommonTreeDropdown": { "name": "CommonTreeDropdown" }, + "Bookmark_User": { "name": "Bookmark_User" }, + "Computer_Item": { "name": "Computer_Item" }, + "Computer_SoftwareLicense": { "name": "Computer_SoftwareLicense" }, + "Computer_SoftwareVersion": { "name": "Computer_SoftwareVersion" }, + "ComputerDisk": { "name": "ComputerDisk" }, + "ComputerModel": { "name": "ComputerModel" }, + "ComputerType": { "name": "ComputerType" }, + "ComputerVirtualMachine": { "name": "ComputerVirtualMachine" }, + "Consumable": { "name": "Consumable" }, + "ConsumableItemType": { "name": "ConsumableItemType" }, + "Contact_Supplier": { "name": "Contact_Supplier" }, + "Budget": { "name": "Budget" }, + "ContactType": { "name": "ContactType" }, + "Contract_Item": { "name": "Contract_Item" }, + "Contract_Supplier": { "name": "Contract_Supplier" }, + "ContractCost": { "name": "ContractCost" }, + "ContractType": { "name": "ContractType" }, + "DeviceCase": { "name": "DeviceCase" }, + "DeviceCaseType": { "name": "DeviceCaseType" }, + "DeviceControl": { "name": "DeviceControl" }, + "DeviceDrive": { "name": "DeviceDrive" }, + "DeviceGraphicCard": { "name": "DeviceGraphicCard" }, + "Calendar": { "name": "Calendar" }, + "DeviceHardDrive": { "name": "DeviceHardDrive" }, + "DeviceMemory": { "name": "DeviceMemory" }, + "DeviceMemoryType": { "name": "DeviceMemoryType" }, + "DeviceMotherboard": { "name": "DeviceMotherboard" }, + "DeviceNetworkCard": { "name": "DeviceNetworkCard" }, + "DevicePci": { "name": "DevicePci" }, + "DevicePowerSupply": { "name": "DevicePowerSupply" }, + "DeviceProcessor": { "name": "DeviceProcessor" }, + "DeviceSoundCard": { "name": "DeviceSoundCard" }, + "Document_Item": { "name": "Document_Item" }, + "Calendar_Holiday": { "name": "Calendar_Holiday" }, + "DocumentCategory": { "name": "DocumentCategory" }, + "DocumentType": { "name": "DocumentType" }, + "Domain": { "name": "Domain" }, + "DropdownTranslation": { "name": "DropdownTranslation" }, + "Entity": { "name": "Entity" }, + "Entity_KnowbaseItem": { "name": "Entity_KnowbaseItem" }, + "Entity_Reminder": { "name": "Entity_Reminder" }, + "Entity_RSSFeed": { "name": "Entity_RSSFeed" }, + "Fieldblacklist": { "name": "Fieldblacklist" }, + "FieldUnicity": { "name": "FieldUnicity" }, + "CalendarSegment": { "name": "CalendarSegment" }, + "Filesystem": { "name": "Filesystem" }, + "FQDN": { "name": "FQDN" }, + "FQDNLabel": { "name": "FQDNLabel" }, + "Group": { "name": "Group" }, + "Group_KnowbaseItem": { "name": "Group_KnowbaseItem" }, + "Group_Problem": { "name": "Group_Problem" }, + "Group_Reminder": { "name": "Group_Reminder" }, + "Group_RSSFeed": { "name": "Group_RSSFeed" }, + "Group_Ticket": { "name": "Group_Ticket" }, + "Group_User": { "name": "Group_User" }, + "Cartridge": { "name": "Cartridge" }, + "Holiday": { "name": "Holiday" }, + "Infocom": { "name": "Infocom" }, + "InterfaceType": { "name": "InterfaceType" }, + "IPAddress": { "name": "IPAddress" }, + "IPAddress_IPNetwork": { "name": "IPAddress_IPNetwork" }, + "IPNetmask": { "name": "IPNetmask" }, + "IPNetwork": { "name": "IPNetwork" }, + "IPNetwork_Vlan": { "name": "IPNetwork_Vlan" }, + "Item_DeviceCase": { "name": "Item_DeviceCase" }, + "Item_DeviceControl": { "name": "Item_DeviceControl" }, + "CartridgeItem_PrinterModel": { "name": "CartridgeItem_PrinterModel" }, + "Item_DeviceDrive": { "name": "Item_DeviceDrive" }, + "Item_DeviceGraphicCard": { "name": "Item_DeviceGraphicCard" }, + "Item_DeviceHardDrive": { "name": "Item_DeviceHardDrive" }, + "Item_DeviceMemory": { "name": "Item_DeviceMemory" }, + "Item_DeviceMotherboard": { "name": "Item_DeviceMotherboard" }, + "Item_DeviceNetworkCard": { "name": "Item_DeviceNetworkCard" }, + "Item_DevicePci": { "name": "Item_DevicePci" }, + "Item_DevicePowerSupply": { "name": "Item_DevicePowerSupply" }, + "Item_DeviceProcessor": { "name": "Item_DeviceProcessor" }, + "Item_Devices": { "name": "Item_Devices" } +} \ No newline at end of file diff --git a/lib/restclient.js b/lib/restclient.js index 84b18a4..49152a5 100644 --- a/lib/restclient.js +++ b/lib/restclient.js @@ -1,106 +1,266 @@ -'use strict' - -const http = require('http') -const url = require('url') -const item = require('./item') +const HTTPS = require('https') +const URL = require('url').URL +const ITEMTYPE = require('./itemtype') class GlpiRestClient { - /** - * @param {http} http - - * @param {string} url - The rest API url of a GLPI instance - */ constructor(url) { this._url = url this._sessionToken = '' } - /** - * @param {string} verb HTTP verb - * @param {string} endpoint endpoint of the request - * @param {object} headers options for the request object - * @param {function} responseHandler handler of the response - */ - _prepareRequest(verb, endpoint, options, responseHandler) { + get url() { + return this._url + } + + set url(url) { + this._url = url + } + + get sessionToken() { + return this._sessionToken + } + + set sessionToken(sessionToken) { + if (sessionToken) this._sessionToken = sessionToken + } + + _prepareRequest(method, endpoint, options, responseHandler) { // Prepare options of the request - var requestOptions = url.parse(this._url) - requestOptions['path'] += '/' + endpoint - requestOptions['method'] = verb - if (typeof options['headers'] == 'object') { - requestOptions['headers'] = Object.assign( - {'Content-Type': 'application/json'}, - options['headers'] - ) - delete options['headers'] + let requestOptions = new URL(this._url) + requestOptions.pathname += `/${endpoint}` + + let headers = { + "Content-Type": "application/json", + "Session-Token": this.sessionToken + } + if (options) { + if (options.headers) headers = {...headers, ...options.headers} } - Object.assign( - requestOptions, - options - ) - - // Build the request - return http.request(requestOptions, response => { - var body = '' - - // Buffer the body of the response - response.on('data', chunk => { - body = body + chunk - }) - // Parse the response - response.on('end', () => { - responseHandler(response, body) + const requestData = { + "hostname": requestOptions.hostname, + "port": 443, + "path": requestOptions.pathname, + "method": method, + "headers": headers + } + + return HTTPS.request(requestData, (resp) => { + let data = '' + + // A chunk of data has been recieved. + resp.on('data', (chunk) => { + data += chunk }) - }) + + // The whole response has been received. Print out the result. + resp.on('end', () => { + responseHandler(resp, data) + }) + + }).on("error", (err) => {}) } - /** - * @param {string} user - login - * @param {string} password - password - * @param {string} appToken - application token (optional) - */ initSessionByCredentials(user, password, appToken) { return new Promise((resolve, reject) => { - var options = {'auth' : user + ':' + password} - var request = this._prepareRequest('get', 'initSession', options, (response, body) => { - switch (true) { - case (response.statusCode >= 400 && response.statusCode < 500): - reject(JSON.parse(body)) - break - - case (response.statusCode != 200): - reject(['ERROR_INTERNAL_SERVER', 'Internal server error']) - break + let options = { + "headers": { + "Authorization": 'Basic ' + new Buffer(user + ':' + password).toString('base64') } - try { - var parsed = JSON.parse(body) - this._sessionToken = parsed['session_token'] - resolve() - } catch (e) { - reject() + } + if (appToken) options.headers = { + ...options.headers, + "App-Token": appToken + } + try { + this._prepareRequest('GET', 'initSession', options, (response, data) => { + this.sessionToken = JSON.parse(data).session_token + resolve({ + status: response.statusCode, + data: JSON.parse(data) + }) + }).end() + } + catch (err) { + reject(err) + } + }) + } + + initSessionByUserToken(userToken, appToken) { + return new Promise((resolve, reject) => { + let options = { + "headers": { + "Authorization": `user_token ${userToken}` } - }) - request.end() + } + if (appToken) options.headers = { + ...options.headers, + "App-Token": appToken + } + try { + this._prepareRequest('GET', 'initSession', options, (response, data) => { + this.sessionToken = JSON.parse(data).session_token + resolve({ + status: response.statusCode, + data: JSON.parse(data) + }) + }).end() + } + catch (err) { + reject(err) + } + }) + + } + + killSession() { + return new Promise((resolve, reject) => { + try { + if (!this.sessionToken) reject('Uninitialized session') + this._prepareRequest('GET', 'killSession', null, (response, data) => { + if (response.statusCode == 200) { + this.sessionToken = '' + resolve({ + status: response.statusCode, + data: { + message: 'User logout successfully' + } + }) + } else { + resolve({ + status: response.statusCode, + data: data + }) + } + }).end() + } + catch (err) { + reject(err) + } }) } - /** - * Gets an item given its itemtype and its ID - * @param {string} itemtype of the requested item - * @param {number} ID of the requested item - */ - getAnItem(itemtype, id) { - this.prepareHttpRequest('get', itemtype + '/' + id, function(response) { - response.on('data', chunk => body.push(chunk)) + getMyProfiles() { + return new Promise((resolve, reject) => { + try { + if (!this.sessionToken) reject('Uninitialized session') + this._prepareRequest('GET', 'getMyProfiles', null, (response, data) => { + resolve({ + status: response.statusCode, + data: data + }) + }).end() + } + catch (err) { + reject(err) + } }) } - /** - * Gets one or more items given their itemtype and their ID - * @param {array} Array of objects {"itemtype": "...", "id": 1} - */ - getMultipleItems(items) { + getActiveProfile() { + return new Promise((resolve, reject) => { + try { + if (!this.sessionToken) reject('Uninitialized session') + this._prepareRequest('GET', 'getActiveProfile', null, (response, data) => { + resolve({ + status: response.statusCode, + data: data + }) + }).end() + } + catch (err) { + reject(err) + } + }) + } + + getMyEntities() { + return new Promise((resolve, reject) => { + try { + if (!this.sessionToken) reject('Uninitialized session') + this._prepareRequest('GET', 'getMyEntities', null, (response, data) => { + resolve({ + status: response.statusCode, + data: data + }) + }).end() + } + catch (err) { + reject(err) + } + }) + } + getActiveEntities() { + return new Promise((resolve, reject) => { + try { + if (!this.sessionToken) reject('Uninitialized session') + this._prepareRequest('GET', 'getActiveEntities', null, (response, data) => { + resolve({ + status: response.statusCode, + data: data + }) + }).end() + } + catch (err) { + reject(err) + } + }) + } + + getFullSession() { + return new Promise((resolve, reject) => { + try { + if (!this.sessionToken) reject('Uninitialized session') + this._prepareRequest('GET', 'getFullSession', null, (response, data) => { + resolve({ + status: response.statusCode, + data: data + }) + }).end() + } + catch (err) { + reject(err) + } + }) + } + + getGlpiConfig() { + return new Promise((resolve, reject) => { + try { + if (!this.sessionToken) reject('Uninitialized session') + this._prepareRequest('GET', 'getGlpiConfig', null, (response, data) => { + resolve({ + status: response.statusCode, + data: data + }) + }).end() + } + catch (err) { + reject(err) + } + }) + } + + getAllItems(itemtype) { + return new Promise((resolve, reject) => { + try { + if (!this.sessionToken) reject('Uninitialized session') + if (!itemtype) reject('Invalid itemtype') + if (itemtype != ITEMTYPE[itemtype.name]) reject('Invalid itemtype') + this._prepareRequest('GET', itemtype.name, null, (response, data) => { + resolve({ + status: response.statusCode, + data: data + }) + }).end() + } + catch (err) { + reject(err) + } + }) } } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b864305 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,257 @@ +{ + "name": "@teclib/glpi", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "assertion-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", + "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "dev": true, + "requires": { + "assertion-error": "1.0.2", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.3" + } + }, + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dev": true, + "requires": { + "check-error": "1.0.2" + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "4.0.3" + } + }, + "diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", + "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "type-detect": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.3.tgz", + "integrity": "sha1-Dj8mcLRAmbC0bChNE2p+9Jx0wuo=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/package.json b/package.json index a8ef46f..a53bf2a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "version": "0.1.0", "license": "GPL-3.0", "repository": { - "type": "git", + "type": "git", "url": "git://github.com/btry/node-module-glpi" }, "main": "./lib/restclient", @@ -22,5 +22,12 @@ "dependencies": {}, "engines": { "node": "*" + }, + "devDependencies": { + "chai": "^4.1.2", + "mocha": "^4.0.1" + }, + "scripts": { + "test": "mocha" } -} \ No newline at end of file +} diff --git a/test/test.js b/test/test.js new file mode 100644 index 0000000..055a8c9 --- /dev/null +++ b/test/test.js @@ -0,0 +1,146 @@ +const assert = require("chai").assert +const expect = require("chai").expect + +const GlpiRestClient = require('../lib/restclient') +const config = require('../config.json') +const itemtype = require('../lib/itemtype') + +// var client = new GlpiRestClient('http://localhost/~dethegeek/glpi-flyvemdm-92/apirest.php') + +describe('initSessionByCredentials()', function() { + this.timeout(15000) + it('successful login', async () => { + const client = new GlpiRestClient(config.apirest) + const result = await client.initSessionByCredentials(config.user.name, config.user.password) + assert.deepInclude(result, { "status": 200 }) + }) +}) + +describe('initSessionByUserToken()', function() { + this.timeout(15000) + it('successful login', async () => { + const client = new GlpiRestClient(config.apirest) + const result = await client.initSessionByUserToken(config.user.userToken) + assert.deepInclude(result, { "status": 200 }) + }) +}) + +describe('killSession()', function() { + this.timeout(15000) + it('log out successfully', () => { + const client = new GlpiRestClient(config.apirest) + + return client.initSessionByUserToken(config.user.userToken) + .then(function() { + client.killSession() + .then((result) => { + assert.deepInclude(result, { "status": 200 }) + }) + }) + }) +}) + +describe('getMyProfiles()', function() { + this.timeout(15000) + it('get my profiles successfully', () => { + const client = new GlpiRestClient(config.apirest) + + return client.initSessionByUserToken(config.user.userToken) + .then(function() { + client.getMyProfiles() + .then((result) => { + assert.deepInclude(result, { "status": 200 }) + }) + }) + }) +}) + +describe('getActiveProfile()', function() { + this.timeout(15000) + it('get active profile successfully', () => { + const client = new GlpiRestClient(config.apirest) + + return client.initSessionByUserToken(config.user.userToken) + .then(function() { + client.getActiveProfile() + .then((result) => { + assert.deepInclude(result, { "status": 200 }) + }) + }) + }) +}) + +describe('getMyEntities()', function() { + this.timeout(15000) + it('get my entities successfully', () => { + const client = new GlpiRestClient(config.apirest) + + return client.initSessionByUserToken(config.user.userToken) + .then(function() { + client.getMyEntities() + .then((result) => { + assert.deepInclude(result, { "status": 200 }) + }) + }) + }) +}) + +describe('getActiveEntities()', function() { + this.timeout(15000) + it('get active entities successfully', () => { + const client = new GlpiRestClient(config.apirest) + + return client.initSessionByUserToken(config.user.userToken) + .then(function() { + client.getActiveEntities() + .then((result) => { + assert.deepInclude(result, { "status": 200 }) + }) + }) + }) +}) + +describe('getFullSession()', function() { + this.timeout(15000) + it('get full session successfully', () => { + const client = new GlpiRestClient(config.apirest) + + return client.initSessionByUserToken(config.user.userToken) + .then(function() { + client.getFullSession() + .then((result) => { + assert.deepInclude(result, { "status": 200 }) + }) + }) + }) +}) + +describe('getGlpiConfig()', function() { + this.timeout(15000) + it('get gpli configuration successfully', () => { + const client = new GlpiRestClient(config.apirest) + + return client.initSessionByUserToken(config.user.userToken) + .then(function() { + client.getGlpiConfig() + .then((result) => { + assert.deepInclude(result, { "status": 200 }) + }) + }) + }) +}) + +describe('getAllItems()', function() { + this.timeout(15000) + it('get all items of a type successfully', () => { + const client = new GlpiRestClient(config.apirest) + + return client.initSessionByUserToken(config.user.userToken) + .then(function() { + client.getAllItems(itemtype.User) + .then((result) => { + assert.deepInclude(result, { "status": 200 }) + }) + }) + }) +}) \ No newline at end of file