k2hr3-api 1.0.37 → 1.0.39

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 (65) hide show
  1. package/ChangeLog +12 -0
  2. package/README.md +31 -31
  3. package/app.js +6 -10
  4. package/bin/run.sh +21 -21
  5. package/bin/www +1 -1
  6. package/config/k2hr3-init.sh.templ +5 -5
  7. package/eslint.config.mjs +68 -0
  8. package/lib/cacerts.js +8 -7
  9. package/lib/dummyuserapi.js +1 -1
  10. package/lib/ipwatch.js +1 -1
  11. package/lib/k2hr3acrutil.js +12 -14
  12. package/lib/k2hr3apiutil.js +5 -5
  13. package/lib/k2hr3cryptutil.js +2 -0
  14. package/lib/k2hr3dkc.js +25 -28
  15. package/lib/k2hr3template.js +54 -52
  16. package/lib/k2hr3tokens.js +4 -4
  17. package/lib/k8soidc.js +3 -3
  18. package/lib/openstackapiv2.js +51 -52
  19. package/lib/openstackapiv3.js +86 -87
  20. package/lib/openstackep.js +46 -46
  21. package/package.json +8 -8
  22. package/routes/acr.js +66 -110
  23. package/routes/debugVerify.js +12 -14
  24. package/routes/extdata.js +24 -40
  25. package/routes/list.js +24 -36
  26. package/routes/policy.js +72 -120
  27. package/routes/resource.js +110 -165
  28. package/routes/role.js +177 -295
  29. package/routes/service.js +54 -90
  30. package/routes/userTokens.js +1 -1
  31. package/routes/userdata.js +12 -20
  32. package/routes/version.js +39 -23
  33. package/tests/auto_control_subprocess.sh +9 -9
  34. package/tests/auto_init_config_json.sh +3 -3
  35. package/tests/auto_resource.js +417 -478
  36. package/tests/auto_role.js +55 -71
  37. package/tests/auto_template.sh +4 -4
  38. package/tests/auto_version.js +39 -23
  39. package/tests/k2hdkc_test_load.sh +9 -9
  40. package/tests/k2hr3template_test.sh +12 -12
  41. package/tests/k2hr3template_test_vars.js +60 -62
  42. package/tests/manual_acr_delete.js +11 -12
  43. package/tests/manual_acr_get.js +9 -10
  44. package/tests/manual_acr_postput.js +12 -13
  45. package/tests/manual_extdata_get.js +5 -6
  46. package/tests/manual_list_gethead.js +12 -13
  47. package/tests/manual_policy_delete.js +12 -13
  48. package/tests/manual_policy_gethead.js +27 -27
  49. package/tests/manual_policy_postput.js +21 -23
  50. package/tests/manual_resource_delete.js +11 -15
  51. package/tests/manual_resource_gethead.js +11 -14
  52. package/tests/manual_resource_postput.js +18 -21
  53. package/tests/manual_role_delete.js +22 -28
  54. package/tests/manual_role_gethead.js +53 -53
  55. package/tests/manual_role_postput.js +28 -31
  56. package/tests/manual_service_delete.js +11 -13
  57. package/tests/manual_service_gethead.js +13 -15
  58. package/tests/manual_service_postput.js +10 -11
  59. package/tests/manual_test.sh +10 -10
  60. package/tests/manual_userdata_get.js +14 -15
  61. package/tests/manual_usertoken_gethead.js +12 -14
  62. package/tests/manual_usertoken_postput.js +23 -26
  63. package/tests/manual_version_get.js +12 -13
  64. package/tests/run_local_test_k2hdkc.sh +4 -4
  65. package/tests/test.sh +12 -12
package/routes/policy.js CHANGED
@@ -70,12 +70,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unused-v
70
70
  !apiutil.isSafeEntity(req.body) ||
71
71
  !apiutil.isSafeEntity(req.body.policy) )
72
72
  {
73
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
74
73
  result = {
75
- result: false,
76
- message: 'POST body does not have policy data'
77
- };
78
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
74
+ result: false,
75
+ message: 'POST body does not have policy data'
76
+ };
79
77
 
80
78
  r3logger.elog(result.message);
81
79
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -99,12 +97,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unused-v
99
97
  // check arguments
100
98
  //------------------------------
101
99
  if(!apiutil.isSafeString(req.body.policy.name)){
102
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
103
100
  result = {
104
- result: false,
105
- message: 'policy:name field is wrong : ' + JSON.stringify(req.body.policy.name)
106
- };
107
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
101
+ result: false,
102
+ message: 'policy:name field is wrong : ' + JSON.stringify(req.body.policy.name)
103
+ };
108
104
 
109
105
  r3logger.elog(result.message);
110
106
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -122,12 +118,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unused-v
122
118
  // check token's tenant(if same tenant, name is not full yrn)
123
119
  nameptn = new RegExp('^' + keys.NO_TENANT_KEY); // regex = /^yrn:yahoo:/
124
120
  if(name.match(nameptn)){
125
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
126
121
  result = {
127
- result: false,
128
- message: 'POST request url has wrong yrn full path to policy'
129
- };
130
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
122
+ result: false,
123
+ message: 'POST request url has wrong yrn full path to policy'
124
+ };
131
125
 
132
126
  r3logger.elog(result.message);
133
127
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -144,12 +138,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unused-v
144
138
  }else if(apiutil.compareCaseString(req.body.policy.effect, keys.VALUE_DENY)){
145
139
  effect = false; // = deny
146
140
  }else{
147
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
148
141
  result = {
149
- result: false,
150
- message: 'policy:effect field is wrong : ' + JSON.stringify(req.body.policy.effect)
151
- };
152
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
142
+ result: false,
143
+ message: 'policy:effect field is wrong : ' + JSON.stringify(req.body.policy.effect)
144
+ };
153
145
 
154
146
  r3logger.elog(result.message);
155
147
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -159,12 +151,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unused-v
159
151
  var actptns = [keys.ACTION_READ_KEY, keys.ACTION_WRITE_KEY]; // allow string as read/write yrn full path
160
152
  var actpram = apiutil.getNormalizeParameter(req.body.policy.action, null, actptns);
161
153
  if(false === actpram.result){
162
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
163
154
  result = {
164
- result: false,
165
- message: 'policy:action field is wrong : ' + JSON.stringify(req.body.policy.action)
166
- };
167
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
155
+ result: false,
156
+ message: 'policy:action field is wrong : ' + JSON.stringify(req.body.policy.action)
157
+ };
168
158
 
169
159
  r3logger.elog(result.message);
170
160
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -175,12 +165,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unused-v
175
165
  var resptn = new RegExp('^' + keys.RESOURCE_TOP_KEY + ':(.*)'); // regex = /^yrn:yahoo:<service>::<tenant>:resource:(.*)/
176
166
  var respram = apiutil.getNormalizeParameter(req.body.policy.resource, resptn, null);
177
167
  if(false === respram.result){
178
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
179
168
  result = {
180
- result: false,
181
- message: 'policy:resource field is wrong : ' + JSON.stringify(req.body.policy.resource)
182
- };
183
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
169
+ result: false,
170
+ message: 'policy:resource field is wrong : ' + JSON.stringify(req.body.policy.resource)
171
+ };
184
172
 
185
173
  r3logger.elog(result.message);
186
174
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -192,12 +180,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unused-v
192
180
  if(!apiutil.isSafeEntity(req.body.policy.condition) || '' === req.body.policy.condition){
193
181
  condition = null; // now reserved this field
194
182
  }else{
195
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
196
183
  result = {
197
- result: false,
198
- message: 'policy:condition field is wrong : ' + JSON.stringify(req.body.policy.condition)
199
- };
200
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
184
+ result: false,
185
+ message: 'policy:condition field is wrong : ' + JSON.stringify(req.body.policy.condition)
186
+ };
201
187
 
202
188
  r3logger.elog(result.message);
203
189
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -207,12 +193,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unused-v
207
193
  var aliasptn = new RegExp('^' + keys.POLICY_TOP_KEY + ':(.*)'); // regex = /^yrn:yahoo:<service>::<tenant>:policy:(.*)/
208
194
  var aliaspram = apiutil.getNormalizeParameter(req.body.policy.alias, aliasptn, null);
209
195
  if(false === aliaspram.result){
210
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
211
196
  result = {
212
- result: false,
213
- message: 'policy:alias field is wrong : ' + JSON.stringify(req.body.policy.alias)
214
- };
215
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
197
+ result: false,
198
+ message: 'policy:alias field is wrong : ' + JSON.stringify(req.body.policy.alias)
199
+ };
216
200
 
217
201
  r3logger.elog(result.message);
218
202
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -226,12 +210,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unused-v
226
210
  result = k2hr3.setPolicyAll(token_info.user, token_info.tenant, name, effect, actions, resources, condition, aliases);
227
211
  if(!apiutil.isSafeEntity(result) || !apiutil.isSafeEntity(result.result) || false === result.result){
228
212
  if(!apiutil.isSafeEntity(result)){
229
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
230
213
  result = {
231
- result: false,
232
- message: 'Could not get response from setPolicyAll'
233
- };
234
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
214
+ result: false,
215
+ message: 'Could not get response from setPolicyAll'
216
+ };
235
217
  }else{
236
218
  if(!apiutil.isSafeEntity(result.result)){
237
219
  result.result = false;
@@ -282,12 +264,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused-va
282
264
  if( !apiutil.isSafeEntity(req) ||
283
265
  !apiutil.isSafeEntity(req.query) )
284
266
  {
285
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
286
267
  result = {
287
- result: false,
288
- message: 'PUT argument does not have any data'
289
- };
290
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
268
+ result: false,
269
+ message: 'PUT argument does not have any data'
270
+ };
291
271
 
292
272
  r3logger.elog(result.message);
293
273
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -312,12 +292,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused-va
312
292
  // check arguments
313
293
  //------------------------------
314
294
  if(!apiutil.isSafeString(req.query.name)){
315
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
316
295
  result = {
317
- result: false,
318
- message: 'policy:name field is wrong : ' + JSON.stringify(req.query.name)
319
- };
320
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
296
+ result: false,
297
+ message: 'policy:name field is wrong : ' + JSON.stringify(req.query.name)
298
+ };
321
299
 
322
300
  r3logger.elog(result.message);
323
301
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -336,12 +314,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused-va
336
314
  // check token's tenant(if same tenant, name is not full yrn)
337
315
  nameptn = new RegExp('^' + keys.NO_TENANT_KEY); // regex = /^yrn:yahoo:/
338
316
  if(name.match(nameptn)){
339
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
340
317
  result = {
341
- result: false,
342
- message: 'PUT request url has wrong yrn full path to policy'
343
- };
344
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
318
+ result: false,
319
+ message: 'PUT request url has wrong yrn full path to policy'
320
+ };
345
321
 
346
322
  r3logger.elog(result.message);
347
323
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -358,12 +334,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused-va
358
334
  }else if(apiutil.compareCaseString(req.query.effect, keys.VALUE_DENY)){
359
335
  effect = false; // = deny
360
336
  }else{
361
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
362
337
  result = {
363
- result: false,
364
- message: 'policy:effect field is wrong : ' + JSON.stringify(req.query.effect)
365
- };
366
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
338
+ result: false,
339
+ message: 'policy:effect field is wrong : ' + JSON.stringify(req.query.effect)
340
+ };
367
341
 
368
342
  r3logger.elog(result.message);
369
343
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -373,12 +347,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused-va
373
347
  var actptns = [keys.ACTION_READ_KEY, keys.ACTION_WRITE_KEY]; // allow string as read/write yrn full path
374
348
  var actpram = apiutil.getNormalizeParameter(req.query.action, null, actptns);
375
349
  if(false === actpram.result){
376
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
377
350
  result = {
378
- result: false,
379
- message: 'policy:action field is wrong : ' + JSON.stringify(req.query.action)
380
- };
381
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
351
+ result: false,
352
+ message: 'policy:action field is wrong : ' + JSON.stringify(req.query.action)
353
+ };
382
354
 
383
355
  r3logger.elog(result.message);
384
356
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -389,12 +361,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused-va
389
361
  var resptn = new RegExp('^' + keys.RESOURCE_TOP_KEY + ':(.*)'); // regex = /^yrn:yahoo:<service>::<tenant>:resource:(.*)/
390
362
  var respram = apiutil.getNormalizeParameter(req.query.resource, resptn, null);
391
363
  if(false === respram.result){
392
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
393
364
  result = {
394
- result: false,
395
- message: 'policy:resource field is wrong : ' + JSON.stringify(req.query.resource)
396
- };
397
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
365
+ result: false,
366
+ message: 'policy:resource field is wrong : ' + JSON.stringify(req.query.resource)
367
+ };
398
368
 
399
369
  r3logger.elog(result.message);
400
370
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -406,12 +376,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused-va
406
376
  if(!apiutil.isSafeEntity(req.query.condition) || '' === req.query.condition){
407
377
  condition = null; // now reserved this field
408
378
  }else{
409
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
410
379
  result = {
411
- result: false,
412
- message: 'policy:condition field is wrong : ' + JSON.stringify(req.query.condition)
413
- };
414
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
380
+ result: false,
381
+ message: 'policy:condition field is wrong : ' + JSON.stringify(req.query.condition)
382
+ };
415
383
 
416
384
  r3logger.elog(result.message);
417
385
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -421,12 +389,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused-va
421
389
  var aliasptn = new RegExp('^' + keys.POLICY_TOP_KEY + ':(.*)'); // regex = /^yrn:yahoo:<service>::<tenant>:policy:(.*)/
422
390
  var aliaspram = apiutil.getNormalizeParameter(req.query.alias, aliasptn, null);
423
391
  if(false === aliaspram.result){
424
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
425
392
  result = {
426
- result: false,
427
- message: 'policy:alias field is wrong : ' + JSON.stringify(req.query.alias)
428
- };
429
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
393
+ result: false,
394
+ message: 'policy:alias field is wrong : ' + JSON.stringify(req.query.alias)
395
+ };
430
396
 
431
397
  r3logger.elog(result.message);
432
398
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -440,12 +406,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused-va
440
406
  result = k2hr3.setPolicyAll(token_info.user, token_info.tenant, name, effect, actions, resources, condition, aliases);
441
407
  if(!apiutil.isSafeEntity(result) || !apiutil.isSafeEntity(result.result) || false === result.result){
442
408
  if(!apiutil.isSafeEntity(result)){
443
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
444
409
  result = {
445
- result: false,
446
- message: 'Could not get response from setPolicyAll'
447
- };
448
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
410
+ result: false,
411
+ message: 'Could not get response from setPolicyAll'
412
+ };
449
413
  }else{
450
414
  if(!apiutil.isSafeEntity(result.result)){
451
415
  result.result = false;
@@ -494,12 +458,10 @@ router.get('/', function(req, res, next)
494
458
  if( !apiutil.isSafeEntity(req) ||
495
459
  !apiutil.isSafeEntity(req.baseUrl) )
496
460
  {
497
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
498
461
  result = {
499
- result: false,
500
- message: 'GET request or url is wrong'
501
- };
502
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
462
+ result: false,
463
+ message: 'GET request or url is wrong'
464
+ };
503
465
 
504
466
  r3logger.elog(result.message);
505
467
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -534,12 +496,10 @@ router.get('/', function(req, res, next)
534
496
  var requestptn = new RegExp('^/v1/policy/(.*)'); // regex = /^\/v1\/policy\/(.*)/
535
497
  var reqmatchs = decodeURI(req.baseUrl).match(requestptn);
536
498
  if(apiutil.isEmptyArray(reqmatchs) || reqmatchs.length < 2 || '' === apiutil.getSafeString(reqmatchs[1])){
537
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
538
499
  result = {
539
- result: false,
540
- message: 'GET request url does not have policy name'
541
- };
542
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
500
+ result: false,
501
+ message: 'GET request url does not have policy name'
502
+ };
543
503
 
544
504
  r3logger.elog(result.message);
545
505
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -606,12 +566,10 @@ router.get('/', function(req, res, next)
606
566
  result = k2hr3.getPolicyAll(token_info.user, token_info.tenant, service, name);
607
567
  if(!apiutil.isSafeEntity(result) || !apiutil.isSafeEntity(result.result) || false === result.result){
608
568
  if(!apiutil.isSafeEntity(result)){
609
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
610
569
  result = {
611
- result: false,
612
- message: 'Could not get response from getPolicyAll'
613
- };
614
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
570
+ result: false,
571
+ message: 'Could not get response from getPolicyAll'
572
+ };
615
573
  }else{
616
574
  if(!apiutil.isSafeEntity(result.result)){
617
575
  result.result = false;
@@ -841,12 +799,10 @@ router.delete('/', function(req, res, next) // eslint-disable-line no-unused
841
799
  var requestptn = new RegExp('^/v1/policy/(.*)'); // regex = /^\/v1\/policy\/(.*)/
842
800
  var reqmatchs = decodeURI(req.baseUrl).match(requestptn);
843
801
  if(apiutil.isEmptyArray(reqmatchs) || reqmatchs.length < 2 || '' === apiutil.getSafeString(reqmatchs[1])){
844
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
845
802
  result = {
846
- result: false,
847
- message: 'GET request url does not have policy name'
848
- };
849
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
803
+ result: false,
804
+ message: 'GET request url does not have policy name'
805
+ };
850
806
 
851
807
  r3logger.elog(result.message);
852
808
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -864,12 +820,10 @@ router.delete('/', function(req, res, next) // eslint-disable-line no-unused
864
820
  // check yrn full path(it is NG)
865
821
  nameptn = new RegExp('^' + keys.NO_TENANT_KEY); // regex = /^yrn:yahoo:/
866
822
  if(name.match(nameptn)){
867
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
868
823
  result = {
869
- result: false,
870
- message: 'DELETE request url has wrong yrn full path to policy'
871
- };
872
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
824
+ result: false,
825
+ message: 'DELETE request url has wrong yrn full path to policy'
826
+ };
873
827
 
874
828
  r3logger.elog(result.message);
875
829
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -882,12 +836,10 @@ router.delete('/', function(req, res, next) // eslint-disable-line no-unused
882
836
  result = k2hr3.removePolicy(token_info.user, token_info.tenant, name);
883
837
  if(!apiutil.isSafeEntity(result) || !apiutil.isSafeEntity(result.result) || false === result.result){
884
838
  if(!apiutil.isSafeEntity(result)){
885
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
886
839
  result = {
887
- result: false,
888
- message: 'Could not get response from removePolicy'
889
- };
890
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
840
+ result: false,
841
+ message: 'Could not get response from removePolicy'
842
+ };
891
843
  }else{
892
844
  if(!apiutil.isSafeEntity(result.result)){
893
845
  result.result = false;