@manyos/smileconnect-api 1.39.0 → 1.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/app.js +14 -2
  2. package/conf/clients.json +1 -0
  3. package/docs/.nojekyll +0 -0
  4. package/docs/README.md +1 -0
  5. package/docs/_coverpage.md +12 -0
  6. package/docs/_media/dataflow.png +0 -0
  7. package/docs/_media/logo.png +0 -0
  8. package/docs/_sidebar.md +25 -0
  9. package/docs/adapter.md +309 -0
  10. package/docs/architecture.md +8 -0
  11. package/docs/configuration/clients.md +69 -0
  12. package/docs/configuration/config.md +323 -0
  13. package/docs/{eventlog → configuration}/events.md +11 -8
  14. package/docs/{general/field-management.md → configuration/mapping.md} +2 -72
  15. package/docs/howto/{worklog-attachment.md → attachments.md} +8 -15
  16. package/docs/howto/cmdbobjects.md +11 -17
  17. package/docs/howto/incidents.md +16 -23
  18. package/docs/howto/token.md +14 -18
  19. package/docs/howto/{incident-worklogs.md → worklogs.md} +14 -21
  20. package/docs/index.html +26 -0
  21. package/docs/openapi.json +2054 -1354
  22. package/docs/quickstart.md +9 -0
  23. package/docs/releases.md +11 -0
  24. package/docs/scripts.md +204 -0
  25. package/package.json +1 -1
  26. package/routes/cmdbObjectRoutes.js +5 -0
  27. package/routes/customFormRoutes.js +2 -0
  28. package/routes/taskRoutes.js +11 -0
  29. package/routes/ticketRoutes.js +2 -0
  30. package/routes/ticketWorkLogRoutes.js +4 -0
  31. package/docs/.gitattributes +0 -48
  32. package/docs/404.html +0 -13
  33. package/docs/Gemfile +0 -7
  34. package/docs/Gemfile.lock +0 -249
  35. package/docs/_config.yml +0 -257
  36. package/docs/_data/SocialNetworks.yml +0 -92
  37. package/docs/_data/ui-text.yml +0 -494
  38. package/docs/_includes/disqus.html +0 -17
  39. package/docs/_includes/ext-css.html +0 -7
  40. package/docs/_includes/ext-js.html +0 -7
  41. package/docs/_includes/fb-comment.html +0 -14
  42. package/docs/_includes/footer-minimal.html +0 -16
  43. package/docs/_includes/footer-scripts.html +0 -32
  44. package/docs/_includes/footer.html +0 -51
  45. package/docs/_includes/google_analytics.html +0 -14
  46. package/docs/_includes/gtag.html +0 -11
  47. package/docs/_includes/gtm_body.html +0 -6
  48. package/docs/_includes/gtm_head.html +0 -9
  49. package/docs/_includes/head.html +0 -131
  50. package/docs/_includes/header.html +0 -76
  51. package/docs/_includes/just_comments.html +0 -4
  52. package/docs/_includes/matomo.html +0 -17
  53. package/docs/_includes/nav.html +0 -57
  54. package/docs/_includes/social-share.html +0 -42
  55. package/docs/_includes/staticman-comment.html +0 -22
  56. package/docs/_includes/staticman-comments.html +0 -81
  57. package/docs/_layouts/base.html +0 -35
  58. package/docs/_layouts/default.html +0 -9
  59. package/docs/_layouts/minimal.html +0 -26
  60. package/docs/_layouts/page.html +0 -26
  61. package/docs/_layouts/post.html +0 -82
  62. package/docs/_posts/2015-02-28-test-markdown.md +0 -77
  63. package/docs/aboutme.md +0 -18
  64. package/docs/css/bootstrap-social.css +0 -147
  65. package/docs/css/bootstrap-theme.css +0 -476
  66. package/docs/css/bootstrap-theme.css.map +0 -1
  67. package/docs/css/bootstrap-theme.min.css +0 -5
  68. package/docs/css/bootstrap.css +0 -6566
  69. package/docs/css/bootstrap.css.map +0 -1
  70. package/docs/css/bootstrap.min.css +0 -5
  71. package/docs/css/main-minimal.css +0 -13
  72. package/docs/css/main.css +0 -788
  73. package/docs/css/normalize.css +0 -427
  74. package/docs/css/pygment_highlights.css +0 -61
  75. package/docs/css/staticman.css +0 -180
  76. package/docs/feed.xml +0 -24
  77. package/docs/general/architecture.md +0 -10
  78. package/docs/general/config.md +0 -201
  79. package/docs/general/release-notes.md +0 -9
  80. package/docs/howto/sample-config.md +0 -518
  81. package/docs/img/404-southpark.jpg +0 -0
  82. package/docs/img/avatar-icon.png +0 -0
  83. package/docs/img/bgimage.png +0 -0
  84. package/docs/img/gb-isapi.jpg +0 -0
  85. package/docs/img/install-steps.gif +0 -0
  86. package/docs/img/workflow.png +0 -0
  87. package/docs/js/bootstrap.js +0 -2306
  88. package/docs/js/bootstrap.min.js +0 -7
  89. package/docs/js/jquery-1.11.2.min.js +0 -4
  90. package/docs/js/main.js +0 -140
  91. package/docs/js/staticman.js +0 -54
  92. package/docs/staticman.yml +0 -110
  93. /package/docs/{img → _media}/architecture.jpeg +0 -0
  94. /package/docs/{img → _media}/attachment-upload.png +0 -0
  95. /package/docs/{getting-started.md → old/getting-started.md} +0 -0
  96. /package/docs/{index.md → old/index.md} +0 -0
  97. /package/docs/{installation.md → old/installation.md} +0 -0
  98. /package/docs/{postinstall.md → old/postinstall.md} +0 -0
  99. /package/docs/{preinstall.md → old/preinstall.md} +0 -0
  100. /package/docs/{tags.html → old/tags.html} +0 -0
  101. /package/docs/{workflow.md → old/workflow.md} +0 -0
package/app.js CHANGED
@@ -233,11 +233,23 @@ app.get('/debug', function (req, res, next) {
233
233
  //global authentication
234
234
  app.use(passport.authenticate('jwt', {session: false}), responseHandler.logRequest);
235
235
 
236
+ //Check for dynamic impersonate
237
+ app.use(function (req, res, next) {
238
+ if (req.user) {
239
+ const clientConfig = req.user.config;
240
+ const dynamicARUser = req.query.impersonateUser;
241
+ if (clientConfig && clientConfig.options && clientConfig.options.allowDynamicImpersonate === true && dynamicARUser) {
242
+ log.debug('Dynamic impersonate to user', dynamicARUser)
243
+ clientConfig.options.impersonateUser = dynamicARUser
244
+ }
245
+ }
246
+ next()
247
+ })
248
+
236
249
  //set globalscript params
237
250
  app.use(function (req, res, next) {
238
251
  req.globalScriptParams = {
239
- query: req.query,
240
- params: req.params
252
+ query: req.query
241
253
  }
242
254
  next()
243
255
  });
package/conf/clients.json CHANGED
@@ -133,6 +133,7 @@
133
133
  "dateFormati": "dd.MM.yyyy HH:mm.ss",
134
134
  "clientLimit": 100000,
135
135
  "impersonateUser": "rhannemann",
136
+ "allowDynamicImpersonate": true,
136
137
  "translateSelectionFieldsX": false
137
138
  },
138
139
  "custom_Sample:Enrollments": {
package/docs/.nojekyll ADDED
File without changes
package/docs/README.md ADDED
@@ -0,0 +1 @@
1
+ Our ITSM API creates a RESTful layer on-top of BMCs ITSM Suite. It allows you to expose all of your services with an easy and powerful REST-API. You can perform create, read and update operations on Incidents, Changes, Problems, Work Orders, Tasks and Assets. With no need for customization.
@@ -0,0 +1,12 @@
1
+ ![logo](_media/logo.png)
2
+
3
+ # SMILEconnect
4
+
5
+ > Learn all about manyos ITSM API on these pages
6
+
7
+ - The easy way to integrate providers
8
+ - Reduce efforts and license cost
9
+ - State of the art ITSM REST API
10
+
11
+ [manyos](https://manyos.it)
12
+ [Get Started](quickstart#Introduction)
Binary file
Binary file
@@ -0,0 +1,25 @@
1
+ - Getting started
2
+
3
+ - [Quick start](quickstart.md)
4
+ - [Architecture](architecture.md)
5
+ - [API Specification](spec/index.html)
6
+
7
+ - Configuration
8
+
9
+ - [Global Settings](configuration/config.md)
10
+ - [Mapping](configuration/mapping.md)
11
+ - [Client Configuration](configuration/clients.md)
12
+ - [Events](configuration/events.md)
13
+
14
+ - Data manipulation
15
+
16
+ - [Scripts](scripts.md)
17
+ - [Adapter](adapter.md)
18
+
19
+ - How-Tos
20
+
21
+ - [Authentication](howto/token.md)
22
+ - [Incident Requests](howto/incidents.md)
23
+ - [Handle Worklogs](howto/worklogs.md)
24
+ - [Handle Attachments](howto/attachments.md)
25
+ - [Read Configuration Items](howto/cmdbobjects.md)
@@ -0,0 +1,309 @@
1
+ # Adapter
2
+
3
+ Adapter are used to integrate with different systems. SMILEconnect comes with a flexible adapter architecture. Multiple types of adapters can be used and also multiple adapters of the same type can be configured. This can be useful if you need to interact e.g. with two different LDAP Systems.
4
+
5
+ # Adapter Configuration
6
+
7
+ Adapter are configured in the file *adapterConfig.js* in the root of the conf folder. Within the configuration file the variable *env* can be used to access system environment variables. E.g. *env.AR_USER* reflects the value of the system variable *AR_USER*.
8
+
9
+ For security, it is advised to store confidential information, like passwords, in the environment variables and not in the configuration file itself.
10
+
11
+ Configuration example:
12
+ ```javascript
13
+ const adapterParams = {
14
+ remedy: {
15
+ type: "remedy",
16
+ arServer: env.AR_SERVER,
17
+ arUser: env.AR_USER,
18
+ arPassword: env.AR_PASSWORD,
19
+ arPort: env.AR_PORT,
20
+ rapiUri: env.RAPI_URL,
21
+ cacheTime: env.AR_CACHE_TTL,
22
+ limitDefault: env.LIMIT_DEFAULT || 100,
23
+ limitMax: env.LIMIT_MAX
24
+ },
25
+ ldap: {
26
+ type: "ldap",
27
+ ldapUrl: env.LDAP_URL,
28
+ ldapBind: env.LDAP_BIND,
29
+ ldapSecret: env.LDAP_SECRET
30
+ },
31
+ ldapIDM: {
32
+ type: "ldap",
33
+ ldapUrl: env.LDAP_IDM_URL,
34
+ ldapBind: env.LDAP_IDM_BIND,
35
+ ldapSecret: env.LDAP_IDM_SECRET
36
+ },
37
+ smileconnect: {
38
+ type: "SMILEconnect",
39
+ clientId: env.SC_CLIENT,
40
+ secret: env.SC_SECRET,
41
+ ssoUrl: env.SC_SSO_URL,
42
+ smileConnectUrl: env.SC_SMILECONNECT_URL
43
+ }
44
+ };
45
+
46
+ // noinspection JSAnnotator
47
+ return adapterParams;
48
+ ```
49
+
50
+ The different Adapter and their configuration values are described in detail below.
51
+
52
+ ## Remedy
53
+
54
+ The Remedy Adapter is used to connect to BMC Remedy Action Request Servers. It allows you to create, query and update records.
55
+
56
+ ### Configuration values
57
+
58
+ **arServer**: The name of the arsystem server. e.g. ars1.mydomain.com
59
+
60
+ **arUser**: The user which is used to connect to the remedy server. E.g. Allen
61
+
62
+ **arPassword**: The password of the ar user.
63
+
64
+ **arPort**: The port of the arsystem server. e.g. 5142. Use 0 if you want to a portmapper.
65
+
66
+ **rapiUri**: The URL of the RAPI Server wich is used as middleware to connect to the arsystem server. e.g. https://rapi.mydomain.com
67
+
68
+ **cacheTime**: The default time in seconds in which the result of queries is stored in a cache. This is used to increase performance dramatically. Defaults to 300s.
69
+
70
+ **limitDefault**: The default limit of records retrieved in a query. This value is used whenever no value is specified. Can be overwritten in queries.
71
+
72
+ **limitMax**: The maximum number of records retrieved in a query. This parameter can be used to enforce a limit. The limit can not be overwritten by queries.
73
+
74
+ ### Functions
75
+
76
+ #### Search
77
+
78
+ ```javascript
79
+ async function search(form, query, fields, options)
80
+ ```
81
+
82
+ Parameter:
83
+
84
+ * form (string):
85
+
86
+ The form used to query data. e.g. CTM:People
87
+
88
+ * query (string):
89
+
90
+ The query used in the form. e.g. 'Remedy Login ID' = "Allen"
91
+
92
+ * fields (comma separated list):
93
+
94
+ The fields to be returned by the query. e.g. "Full Name, Remedy Login ID, First Name, Last Name, Department"
95
+
96
+ Full example:
97
+ ```javascript
98
+ const result = await adapter.remedy.search(
99
+ "CTM:People",
100
+ "'Remedy Login ID' = \"Allen\"",
101
+ "Full Name, Remedy Login ID, First Name, Last Name, Department");
102
+ ```
103
+
104
+ Will return an object with a data array and some meta data.
105
+
106
+ ```javascript
107
+ {
108
+ "status": "success",
109
+ "query": "'Remedy Login ID' = \"Allen\"",
110
+ "server": "arserver:51423",
111
+ "form": "CTM:People",
112
+ "runtime": 106,
113
+ "dataSize": 1,
114
+ "data": [
115
+ {
116
+ "Person ID": "PPL000000000013",
117
+ "Remedy Login ID": "Allen",
118
+ "Department": "Customer Service",
119
+ "Full Name": "Allen Allbrook",
120
+ "Last Name": "Allbrook",
121
+ "First Name": "Allen"
122
+ }
123
+ ]
124
+ }
125
+ ```
126
+
127
+
128
+ #### Create
129
+
130
+ ```javascript
131
+ async function create(form, entry, options)
132
+ ```
133
+
134
+ Parameter:
135
+
136
+ * form (string):
137
+
138
+ The form in which a new record is created. e.g. CTM:People
139
+
140
+ * entry (object):
141
+
142
+ The entry object that is ceated.
143
+
144
+ e.g.
145
+
146
+ ```javascript
147
+ {
148
+ "Source Keyword": "SMILEcatalog",
149
+ "Company": "Calbro Services",
150
+ "AppRequestSummary": "New Request from SMILEcatalog",
151
+ "TitleInstanceID": "SRGAA5V0GEfds7LO5YL6Q945Z",
152
+ "Login ID": "Allen"
153
+ }
154
+ ```
155
+
156
+ Full example:
157
+
158
+ ```javascript
159
+ const settings = {
160
+ "createForm":"SRM:RequestInterface_Create",
161
+ "entry": {
162
+ "Source Keyword": "SMILEcatalog",
163
+ "Company": "Calbro Services",
164
+ "AppRequestSummary": "New Request from SMILEcatalog",
165
+ "TitleInstanceID": "SRGAA5V0GEfds7LO5YL6Q945Z",
166
+ "Login ID": "Allen"
167
+ }
168
+ };
169
+ //Create Service Request
170
+ const resultCreate = await adapter.remedy.create(settings.createForm, settings.entry);
171
+ ```
172
+
173
+ Will return return the id of the created record. e.g. REQ00000002893
174
+
175
+ #### Options
176
+
177
+ * limit
178
+
179
+ The maximum number of records that should be returned by this query. e.g. 5. Use this value to increase performance or to overwrite a default limit.
180
+
181
+ * offset
182
+
183
+ Use together with limit to allow pagination. e.g. limit=10 & offset=10
184
+
185
+ * dateFormat
186
+
187
+ The format in which dates are returned.
188
+
189
+ * sort
190
+
191
+ The fields that are to sort the result on the remedy server. Use 1 for ascending and -1 for descending order.
192
+
193
+ e.g.
194
+ ```javascript
195
+ {
196
+ "Name": 1,
197
+ "Status": -1
198
+ }
199
+ ```
200
+
201
+
202
+ * countOnly (only search)
203
+
204
+ Can be used to retrieve only the size of the results without any payload. This improves performance.
205
+
206
+ Full example:
207
+
208
+ ```javascript
209
+ const options = {
210
+ limit: 100,
211
+ offset: 100,
212
+ dafeFormat: "yyyy-MM-dd HH:mm:ss.SSSZ",
213
+ sort: {
214
+ "Name": 1,
215
+ "Status": -1
216
+ }
217
+ }
218
+ ```
219
+
220
+ ## LDAP
221
+
222
+
223
+ ### Configuration values
224
+
225
+ * ldapUrl
226
+
227
+ The connection URL of the LDAP Server. e.g. ldap://ldap.forumsys.com:389
228
+
229
+ * ldapBind
230
+
231
+ The Bind DN to authenticate with. e.g. cn=smilecatalog-user,dc=example,dc=com
232
+
233
+ * ldapSecret
234
+
235
+ The secret to use with the Bind DN. e.g. password
236
+
237
+ ### Functions
238
+
239
+
240
+ #### Search
241
+
242
+ ```javascript
243
+ async search(base, options)
244
+ ```
245
+ Runs a query against the ldap Server.
246
+
247
+ Parameter:
248
+
249
+ * base
250
+
251
+ A DN string to start.
252
+
253
+ * options
254
+
255
+ Options for the search. Like filters and returned attributes. See http://ldapjs.org/client.html for more details.
256
+
257
+ ```javascript
258
+ const opts = {
259
+ filter: '(&(l=Seattle)(email=*@foo.com))',
260
+ scope: 'sub',
261
+ attributes: ['dn', 'sn', 'cn']
262
+ };
263
+ ```
264
+
265
+ Full example:
266
+
267
+ ```javascript
268
+ const base = "dc=example,dc=com";
269
+ const options = {
270
+ attributes: ['dn', 'sn', 'cn'],
271
+ scope: "sub",
272
+ filter: "sn=Riemann"
273
+ }
274
+ const result = await adapter.ldap.search(base, options);
275
+ resolve(result);
276
+ ```
277
+
278
+ Returns an array of records. e.g.
279
+
280
+ ```javascript
281
+ [
282
+ {
283
+ "dn": "uid=riemann,dc=example,dc=com",
284
+ "controls": [],
285
+ "cn": "Bernhard Riemann",
286
+ "sn": "Riemann"
287
+ }
288
+ ]
289
+ ```
290
+
291
+ ## SMILEconnect
292
+
293
+ The SMILEconnect Adapter can be used to do calls against SMILEconnect. It will act as it is called externally.
294
+
295
+ ### Configuration values
296
+
297
+ **smileConnectUrl**: The url of your SMILEconnect installation e.g. https://smileconnect.mydomain.io
298
+
299
+ **ssoUrl**: The url of the oidc identity provider. e.g. https://sso.mydomain.io/auth/realms/smileconnect
300
+
301
+ **clientId**: The name of the client that is used to connect to SMILEconnect
302
+
303
+ **secret**: The secret of the client. e.g. jd92hd-03283d-2293s-232
304
+
305
+ ### Functions
306
+
307
+ The SMILEconnect adapter is an open source project.
308
+
309
+ [Visit the project homepage for details](https://github.com/manyosit/smileconnect-client)
@@ -0,0 +1,8 @@
1
+ # Architecture
2
+
3
+ In this guide we will explain the different components of ISAPI and how you can use them.
4
+
5
+ ![architecure of smileconnect](_media/architecture.jpeg)
6
+
7
+
8
+ ![architecure of smileconnect](_media/dataflow.png)
@@ -0,0 +1,69 @@
1
+ # Client Config
2
+
3
+ On a per client base it can be configured which fields are returned for each object and if a basequery is applied. This expose certain fields only dedicated clients. It also allows to define which rows a client can access. Clients are configured in conf/clients.json
4
+
5
+ ```json
6
+ [
7
+ {
8
+ "name": "jira",
9
+ "config": {
10
+ "options" : {
11
+ "dateFormat" : "dd.MM.yyyy HH:mm.ss",
12
+ "clientLimit": 100
13
+ },
14
+ "cmdbobject": {
15
+ "basequery": "'Data Set Id' = \"BMC.ASSET\" AND ('Mark As Deleted' = \"No\" OR 'Mark As Deleted' = $NULL$) AND 'Class Id' = \"BMC_COMPUTERSYSTEM\"",
16
+ "fields": [
17
+ "Instance Id",
18
+ "Tag Number",
19
+ "Name",
20
+ "AssetLifecycleStatus",
21
+ "Category",
22
+ "Item",
23
+ "Type",
24
+ "Availability",
25
+ "Confidentiality",
26
+ "Integrity",
27
+ "Authenticity",
28
+ "Model Number",
29
+ "Class Id",
30
+ "Reconciliation Identity"
31
+ ]
32
+ },
33
+ "orgdata": {
34
+ "basequeryPeople": "'Profile Status' = \"Enabled\"",
35
+ "basequeryOrganisation": "'Status'=\"Enabled\"",
36
+ "basequerySupportGroup": "'Status'=\"Enabled\""
37
+ },
38
+ "change": {
39
+ "fields": [
40
+ "Infrastructure Change ID",
41
+ "Categorization Tier 1",
42
+ "Categorization Tier 2",
43
+ "Categorization Tier 3",
44
+ "Product Cat Tier 1",
45
+ "Product Cat Tier 2",
46
+ "Product Cat Tier 3",
47
+ "Product Name (2)",
48
+ "Description",
49
+ "Detailed Description",
50
+ "Status Reason",
51
+ "Change Request Status",
52
+ "Requested Start Date",
53
+ "Requested End Date",
54
+ "Scheduled Start Date",
55
+ "Scheduled End Date",
56
+ "Support Group ID",
57
+ "Support Group ID 2",
58
+ "Customer Person ID"
59
+ ],
60
+ "constants" : [
61
+ {"name": "Location Company", "value" : "Calbro Services"},
62
+ {"name": "Company", "value" : "Calbro Services"},
63
+ {"name": "RequesterLoginID", "value" : "Allen"}
64
+ ]
65
+ }
66
+ }
67
+ }
68
+ ]
69
+ ```