k2hr3-api 1.0.38 → 1.0.40

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/service.js CHANGED
@@ -261,12 +261,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unuse
261
261
  !apiutil.isSafeEntity(req.baseUrl) ||
262
262
  !apiutil.isSafeEntity(req.body) )
263
263
  {
264
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
265
264
  result = {
266
- result: false,
267
- message: 'POST body does not exist'
268
- };
269
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
265
+ result: false,
266
+ message: 'POST body does not exist'
267
+ };
270
268
 
271
269
  r3logger.elog(result.message);
272
270
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -309,12 +307,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unuse
309
307
  var cnt;
310
308
  if(is_create){
311
309
  if(!apiutil.isSafeString(req.body.name)){
312
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
313
310
  result = {
314
- result: false,
315
- message: 'service:name field is wrong : ' + JSON.stringify(req.body.name)
316
- };
317
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
311
+ result: false,
312
+ message: 'service:name field is wrong : ' + JSON.stringify(req.body.name)
313
+ };
318
314
 
319
315
  r3logger.elog(result.message);
320
316
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -356,12 +352,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unuse
356
352
  verify = req.body.verify;
357
353
  }
358
354
  if(null === tenant && null === verify){
359
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
360
355
  result = {
361
- result: false,
362
- message: 'both tenant and verify are not specified.'
363
- };
364
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
356
+ result: false,
357
+ message: 'both tenant and verify are not specified.'
358
+ };
365
359
 
366
360
  r3logger.elog(result.message);
367
361
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -374,12 +368,10 @@ router.post('/', function(req, res, next) // eslint-disable-line no-unuse
374
368
  //------------------------------
375
369
  var error = rawUpdateService(token_info.tenant, name, verify, tenant, is_clear, is_create);
376
370
  if(null !== error){
377
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
378
371
  result = {
379
- result: false,
380
- message: error.message
381
- };
382
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
372
+ result: false,
373
+ message: error.message
374
+ };
383
375
 
384
376
  r3logger.elog(result.message);
385
377
  resutil.errResponse(req, res, 403, result); // 403: Forbidden(is this status OK?)
@@ -430,12 +422,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused
430
422
  !apiutil.isSafeEntity(req.baseUrl) ||
431
423
  !apiutil.isSafeEntity(req.query) )
432
424
  {
433
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
434
425
  result = {
435
- result: false,
436
- message: 'PUT argument does not have any data'
437
- };
438
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
426
+ result: false,
427
+ message: 'PUT argument does not have any data'
428
+ };
439
429
 
440
430
  r3logger.elog(result.message);
441
431
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -477,12 +467,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused
477
467
  var is_clear = false;
478
468
  if(is_create){
479
469
  if(!apiutil.isSafeString(req.query.name)){
480
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
481
470
  result = {
482
- result: false,
483
- message: 'name argument is wrong : ' + JSON.stringify(req.query.name)
484
- };
485
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
471
+ result: false,
472
+ message: 'name argument is wrong : ' + JSON.stringify(req.query.name)
473
+ };
486
474
 
487
475
  r3logger.elog(result.message);
488
476
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -534,12 +522,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused
534
522
  }
535
523
  }
536
524
  if(null === tenant && null === verify){
537
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
538
525
  result = {
539
- result: false,
540
- message: 'both tenant and verify are not specified.'
541
- };
542
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
526
+ result: false,
527
+ message: 'both tenant and verify are not specified.'
528
+ };
543
529
 
544
530
  r3logger.elog(result.message);
545
531
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -552,12 +538,10 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused
552
538
  //------------------------------
553
539
  var error = rawUpdateService(token_info.tenant, name, verify, tenant, is_clear, is_create);
554
540
  if(null !== error){
555
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
556
541
  result = {
557
- result: false,
558
- message: error.message
559
- };
560
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
542
+ result: false,
543
+ message: error.message
544
+ };
561
545
 
562
546
  r3logger.elog(result.message);
563
547
  resutil.errResponse(req, res, 403, result); // 403: Forbidden(is this status OK?)
@@ -599,12 +583,10 @@ router.get('/', function(req, res, next)
599
583
  if( !apiutil.isSafeEntity(req) ||
600
584
  !apiutil.isSafeEntity(req.baseUrl) )
601
585
  {
602
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
603
586
  result = {
604
- result: false,
605
- message: 'GET request or url is wrong'
606
- };
607
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
587
+ result: false,
588
+ message: 'GET request or url is wrong'
589
+ };
608
590
 
609
591
  r3logger.elog(result.message);
610
592
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -630,12 +612,10 @@ router.get('/', function(req, res, next)
630
612
  var requestptn = new RegExp('^/v1/service/(.*)'); // regex = /^\/v1\/service\/(.*)/
631
613
  var reqmatchs = decodeURI(req.baseUrl).match(requestptn);
632
614
  if(apiutil.isEmptyArray(reqmatchs) || reqmatchs.length < 2 || '' === apiutil.getSafeString(reqmatchs[1])){
633
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
634
615
  result = {
635
- result: false,
636
- message: 'GET request url does not have service name'
637
- };
638
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
616
+ result: false,
617
+ message: 'GET request url does not have service name'
618
+ };
639
619
 
640
620
  r3logger.elog(result.message);
641
621
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -649,12 +629,10 @@ router.get('/', function(req, res, next)
649
629
  result = k2hr3.getService(token_info.tenant, servicename);
650
630
  if(!apiutil.isSafeEntity(result) || !apiutil.isSafeEntity(result.result) || false === result.result){
651
631
  if(!apiutil.isSafeEntity(result)){
652
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
653
632
  result = {
654
- result: false,
655
- message: 'Could not get service data from getService'
656
- };
657
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
633
+ result: false,
634
+ message: 'Could not get service data from getService'
635
+ };
658
636
  }else{
659
637
  if(!apiutil.isSafeEntity(result.result)){
660
638
  result.result = false;
@@ -709,12 +687,10 @@ router.head('/', function(req, res, next)
709
687
  if( !apiutil.isSafeEntity(req) ||
710
688
  !apiutil.isSafeEntity(req.baseUrl) )
711
689
  {
712
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
713
690
  result = {
714
- result: false,
715
- message: 'HEAD request or url or query is wrong'
716
- };
717
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
691
+ result: false,
692
+ message: 'HEAD request or url or query is wrong'
693
+ };
718
694
 
719
695
  r3logger.elog(result.message);
720
696
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -740,12 +716,10 @@ router.head('/', function(req, res, next)
740
716
  var requestptn = new RegExp('^/v1/service/(.*)'); // regex = /^\/v1\/service\/(.*)/
741
717
  var reqmatchs = decodeURI(req.baseUrl).match(requestptn);
742
718
  if(apiutil.isEmptyArray(reqmatchs) || reqmatchs.length < 2 || '' === apiutil.getSafeString(reqmatchs[1])){
743
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
744
719
  result = {
745
- result: false,
746
- message: 'GET request url does not have service name'
747
- };
748
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
720
+ result: false,
721
+ message: 'GET request url does not have service name'
722
+ };
749
723
 
750
724
  r3logger.elog(result.message);
751
725
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -768,12 +742,10 @@ router.head('/', function(req, res, next)
768
742
  result = k2hr3.getService(token_info.tenant, servicename);
769
743
  if(!apiutil.isSafeEntity(result) || !apiutil.isSafeEntity(result.result) || false === result.result){
770
744
  if(!apiutil.isSafeEntity(result)){
771
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
772
745
  result = {
773
- result: false,
774
- message: 'Could not get service data from getService'
775
- };
776
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
746
+ result: false,
747
+ message: 'Could not get service data from getService'
748
+ };
777
749
  }else{
778
750
  if(!apiutil.isSafeEntity(result.result)){
779
751
  result.result = false;
@@ -789,12 +761,10 @@ router.head('/', function(req, res, next)
789
761
  if(null !== tenantyrn){
790
762
  // tenant check
791
763
  if(!apiutil.isSafeEntity(result.service) || !apiutil.isArray(result.service.tenant) || !apiutil.findStringInArray(result.service.tenant, tenantyrn)){
792
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
793
764
  result = {
794
- result: false,
795
- message: 'Deny tenant(' + req.query.tenant.toLowerCase() + ') for service(' + servicename + ')'
796
- };
797
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
765
+ result: false,
766
+ message: 'Deny tenant(' + req.query.tenant.toLowerCase() + ') for service(' + servicename + ')'
767
+ };
798
768
 
799
769
  r3logger.elog(result.message);
800
770
  resutil.errResponse(req, res, 403); // 403: Forbidden(is this status OK?)
@@ -830,12 +800,10 @@ router.delete('/', function(req, res, next) // eslint-disable-line no-unu
830
800
  if( !apiutil.isSafeEntity(req) ||
831
801
  !apiutil.isSafeEntity(req.baseUrl) )
832
802
  {
833
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
834
803
  result = {
835
- result: false,
836
- message: 'DELETE request or url or query is wrong'
837
- };
838
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
804
+ result: false,
805
+ message: 'DELETE request or url or query is wrong'
806
+ };
839
807
 
840
808
  r3logger.elog(result.message);
841
809
  resutil.errResponse(req, res, 400); // 400: Bad Request
@@ -861,12 +829,10 @@ router.delete('/', function(req, res, next) // eslint-disable-line no-unu
861
829
  var requestptn = new RegExp('^/v1/service/(.*)'); // regex = /^\/v1\/service\/(.*)/
862
830
  var reqmatchs = decodeURI(req.baseUrl).match(requestptn);
863
831
  if(apiutil.isEmptyArray(reqmatchs) || reqmatchs.length < 2 || '' === apiutil.getSafeString(reqmatchs[1])){
864
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
865
832
  result = {
866
- result: false,
867
- message: 'DELETE request url does not have service name'
868
- };
869
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
833
+ result: false,
834
+ message: 'DELETE request url does not have service name'
835
+ };
870
836
 
871
837
  r3logger.elog(result.message);
872
838
  resutil.errResponse(req, res, 400, result); // 400: Bad Request
@@ -894,12 +860,10 @@ router.delete('/', function(req, res, next) // eslint-disable-line no-unu
894
860
  }
895
861
  if(!apiutil.isSafeEntity(result) || !apiutil.isSafeEntity(result.result) || false === result.result){
896
862
  if(!apiutil.isSafeEntity(result)){
897
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
898
863
  result = {
899
- result: false,
900
- message: 'Could not remove service data from ' + (null === tenantname ? 'removeService' : 'denyTenantFromService')
901
- };
902
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
864
+ result: false,
865
+ message: 'Could not remove service data from ' + (null === tenantname ? 'removeService' : 'denyTenantFromService')
866
+ };
903
867
  }else{
904
868
  if(!apiutil.isSafeEntity(result.result)){
905
869
  result.result = false;
@@ -381,7 +381,7 @@ router.put('/', function(req, res, next) // eslint-disable-line no-unused-v
381
381
  // Which element has name and display member, but display is as same as name.
382
382
  // It is not real display name, because we take a cost getting it from APIs.
383
383
  //
384
- router.get('/', function(req, res, next) // eslint-disable-line no-unused-vars
384
+ router.get('/', function(req, res, next)
385
385
  {
386
386
  r3logger.dlog('CALL:', req.method, req.url);
387
387
  if('HEAD' === req.method){
@@ -62,12 +62,10 @@ router.get('/', function(req, res, next)
62
62
  !apiutil.isSafeEntity(req.baseUrl) ||
63
63
  !apiutil.isSafeEntity(req.headers) ) // Must User-Agent in header
64
64
  {
65
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
66
65
  result = {
67
- result: false,
68
- message: 'GET request or url is wrong'
69
- };
70
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
66
+ result: false,
67
+ message: 'GET request or url is wrong'
68
+ };
71
69
 
72
70
  r3logger.elog(result.message);
73
71
  res.type('application/json; charset=utf-8');
@@ -83,12 +81,10 @@ router.get('/', function(req, res, next)
83
81
  // 'User-Agent' Must have 'Cloud-Init'
84
82
  r3logger.elog('GET request does not have User-Agent header');
85
83
 
86
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
87
84
  result = {
88
- result: false,
89
- message: 'GET request does not have User-Agent header'
90
- };
91
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
85
+ result: false,
86
+ message: 'GET request does not have User-Agent header'
87
+ };
92
88
 
93
89
  r3logger.elog(result.message);
94
90
  res.type('application/json; charset=utf-8');
@@ -100,12 +96,10 @@ router.get('/', function(req, res, next)
100
96
  // 'User-Agent' Must have 'Cloud-Init'
101
97
  r3logger.elog('GET request User-Agent does not have Cloud-Init');
102
98
 
103
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
104
99
  result = {
105
- result: false,
106
- message: 'GET request is not allowed from your client'
107
- };
108
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
100
+ result: false,
101
+ message: 'GET request is not allowed from your client'
102
+ };
109
103
 
110
104
  r3logger.elog(result.message);
111
105
  res.type('application/json; charset=utf-8');
@@ -157,12 +151,10 @@ router.get('/', function(req, res, next)
157
151
  var requestptn = new RegExp('^/v1/userdata/(.*)'); // regex = /^\/v1\/userdata\/(.*)/
158
152
  var reqmatchs = decodeURI(req.baseUrl).match(requestptn);
159
153
  if(apiutil.isEmptyArray(reqmatchs) || reqmatchs.length < 2 || '' === apiutil.getSafeString(reqmatchs[1])){
160
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
161
154
  result = {
162
- result: false,
163
- message: 'GET request url does not have userdata path parameter'
164
- };
165
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
155
+ result: false,
156
+ message: 'GET request url does not have userdata path parameter'
157
+ };
166
158
 
167
159
  r3logger.elog(result.message);
168
160
  res.type('application/json; charset=utf-8');
package/routes/version.js CHANGED
@@ -50,31 +50,47 @@ router.get('/v1', function(req, res, next) // eslint-disable-line no-unused
50
50
 
51
51
  res.type('application/json; charset=utf-8');
52
52
 
53
- /* eslint-disable indent, no-mixed-spaces-and-tabs */
54
53
  var result = {
55
- 'version': { '/': ['GET'],
56
- '/v1': ['GET']},
57
- 'user token': { '/v1/user/tokens': ['HEAD', 'GET', 'POST']},
58
- 'host': { '/v1/host': ['GET', 'PUT', 'POST', 'DELETE'],
59
- '/v1/host/{port}': ['PUT', 'POST', 'DELETE'],
60
- '/v1/host/FQDN': ['DELETE'],
61
- '/v1/host/FQDN:{port}': ['DELETE'],
62
- '/v1/host/IP': ['DELETE'],
63
- '/v1/host/IP:{port}': ['DELETE']},
64
- 'service': { '/v1/service': ['PUT', 'POST'],
65
- '/v1/service/{service}': ['GET', 'HEAD', 'PUT', 'POST', 'DELETE']},
66
- 'role': { '/v1/role': ['PUT', 'POST'],
67
- '/v1/role/{role}': ['HEAD', 'GET', 'PUT', 'POST', 'DELETE'],
68
- '/v1/role/token/{role}': ['GET']},
69
- 'resource': { '/v1/resource': ['PUT', 'POST'],
70
- '/v1/resource/{resource}': ['HEAD', 'GET', 'DELETE']},
71
- 'policy': { '/v1/policy': ['PUT', 'POST'],
72
- '/v1/policy/{policy}': ['HEAD', 'GET', 'DELETE']},
73
- 'list': { '/v1/list': ['HEAD', 'GET'],
74
- '/v1/list/{role, resource, policy}/{path}': ['HEAD', 'GET']},
75
- 'acr': { '/v1/acr/{service}': ['GET', 'PUT', 'POST', 'DELETE']}
54
+ 'version': {
55
+ '/': ['GET'],
56
+ '/v1': ['GET']
57
+ },
58
+ 'user token': {
59
+ '/v1/user/tokens': ['HEAD', 'GET', 'POST']
60
+ },
61
+ 'host': {
62
+ '/v1/host': ['GET', 'PUT', 'POST', 'DELETE'],
63
+ '/v1/host/{port}': ['PUT', 'POST', 'DELETE'],
64
+ '/v1/host/FQDN': ['DELETE'],
65
+ '/v1/host/FQDN:{port}': ['DELETE'],
66
+ '/v1/host/IP': ['DELETE'],
67
+ '/v1/host/IP:{port}': ['DELETE']
68
+ },
69
+ 'service': {
70
+ '/v1/service': ['PUT', 'POST'],
71
+ '/v1/service/{service}': ['GET', 'HEAD', 'PUT', 'POST', 'DELETE']
72
+ },
73
+ 'role': {
74
+ '/v1/role': ['PUT', 'POST'],
75
+ '/v1/role/{role}': ['HEAD', 'GET', 'PUT', 'POST', 'DELETE'],
76
+ '/v1/role/token/{role}': ['GET']
77
+ },
78
+ 'resource': {
79
+ '/v1/resource': ['PUT', 'POST'],
80
+ '/v1/resource/{resource}': ['HEAD', 'GET', 'DELETE']
81
+ },
82
+ 'policy': {
83
+ '/v1/policy': ['PUT', 'POST'],
84
+ '/v1/policy/{policy}': ['HEAD', 'GET', 'DELETE']
85
+ },
86
+ 'list': {
87
+ '/v1/list': ['HEAD', 'GET'],
88
+ '/v1/list/{role, resource, policy}/{path}': ['HEAD', 'GET']
89
+ },
90
+ 'acr': {
91
+ '/v1/acr/{service}': ['GET', 'PUT', 'POST', 'DELETE']
92
+ }
76
93
  };
77
- /* eslint-enable indent, no-mixed-spaces-and-tabs */
78
94
 
79
95
  res.status(200); // 200: OK
80
96
  res.send(JSON.stringify(result));
@@ -64,25 +64,25 @@ while [ $# -ne 0 ]; do
64
64
  if [ -z "$1" ]; then
65
65
  break
66
66
 
67
- elif [ "$1" = "-h" ] || [ "$1" = "-H" ] || [ "$1" = "--help" ] || [ "$1" = "--HELP" ]; then
67
+ elif echo "$1" | grep -q -i -e "^-h$" -e "^--help$"; then
68
68
  PrintUsage "${PRGNAME}"
69
69
  exit 0
70
70
 
71
- elif [ "$1" = "-str" ] || [ "$1" = "-STR" ] || [ "$1" = "--start" ] || [ "$1" = "--START" ]; then
71
+ elif echo "$1" | grep -q -i -e "^-str$" -e "^--start$"; then
72
72
  if [ -n "${EXEC_MODE}" ]; then
73
73
  echo "[ERROR] Already run mode(--start(-str) or --stop(-stp) option) is specified."
74
74
  exit 1
75
75
  fi
76
76
  EXEC_MODE="start"
77
77
 
78
- elif [ "$1" = "-stp" ] || [ "$1" = "-STP" ] || [ "$1" = "--stop" ] || [ "$1" = "--STOP" ]; then
78
+ elif echo "$1" | grep -q -i -e "^-stp$" -e "^--stop$"; then
79
79
  if [ -n "${EXEC_MODE}" ]; then
80
80
  echo "[ERROR] Already run mode(--start(-str) or --stop(-stp) option) is specified."
81
81
  exit 1
82
82
  fi
83
83
  EXEC_MODE="stop"
84
84
 
85
- elif [ "$1" = "-k" ] || [ "$1" = "-K" ] || [ "$1" = "--key" ] || [ "$1" = "--KEY" ]; then
85
+ elif echo "$1" | grep -q -i -e "^-k$" -e "^--key$"; then
86
86
  if [ -n "${PID_FILENAME_EXT_PART}" ]; then
87
87
  echo "[ERROR] Already --key(-k) option is specified."
88
88
  exit 1
@@ -94,7 +94,7 @@ while [ $# -ne 0 ]; do
94
94
  fi
95
95
  PID_FILENAME_EXT_PART="_$1"
96
96
 
97
- elif [ "$1" = "-i" ] || [ "$1" = "-I" ] || [ "$1" = "-int" ] || [ "$1" = "-INT" ] || [ "$1" = "--interval" ] || [ "$1" = "--INTERVAL" ]; then
97
+ elif echo "$1" | grep -q -i -e "^-i$" -e "^-int$" -e "^--interval$"; then
98
98
  if [ "${RUN_INTERVAL}" -ne 0 ]; then
99
99
  echo "[ERROR] Already --interval(-i) option is specified."
100
100
  exit 1
@@ -174,7 +174,7 @@ if [ "${EXEC_MODE}" = "start" ]; then
174
174
  fi
175
175
 
176
176
  # shellcheck disable=SC2009
177
- if ! ps -ax | grep -v grep | grep -v defunct | grep -q "${CHILD_PROCESS_PID}"; then
177
+ if ! ( ps -o pid,stat ax 2>/dev/null | grep -v 'PID' | awk '$2~/^[^Z]/ { print $1 }' | grep -q "^${CHILD_PROCESS_PID}$" || exit 1 && exit 0 ); then
178
178
  echo "[ERROR] Could not start child process : ${CHILD_PROCESS_CMD}"
179
179
  exit 1
180
180
  fi
@@ -191,7 +191,7 @@ else
191
191
  CHILD_PROCESS_PID="$(tr -d '\n' < "${CHILD_PROCESS_PIDFILE}")"
192
192
 
193
193
  # shellcheck disable=SC2009
194
- if ! ps -ax | grep -v grep | grep -v defunct | grep -q "${CHILD_PROCESS_PID}"; then
194
+ if ( ps -o pid,stat ax 2>/dev/null | grep -v 'PID' | awk '$2~/^[^Z]/ { print $1 }' | grep -q "^${CHILD_PROCESS_PID}$" || exit 1 && exit 0 ); then
195
195
  #
196
196
  # Try stop
197
197
  #
@@ -203,7 +203,7 @@ else
203
203
  fi
204
204
 
205
205
  # shellcheck disable=SC2009
206
- if ! ps -ax | grep -v grep | grep -v defunct | grep -q "${CHILD_PROCESS_PID}"; then
206
+ if ( ps -o pid,stat ax 2>/dev/null | grep -v 'PID' | awk '$2~/^[^Z]/ { print $1 }' | grep -q "^${CHILD_PROCESS_PID}$" || exit 1 && exit 0 ); then
207
207
  #
208
208
  # Retry stop
209
209
  #
@@ -215,7 +215,7 @@ else
215
215
  fi
216
216
 
217
217
  # shellcheck disable=SC2009
218
- if ! ps -ax | grep -v grep | grep -v defunct | grep -q "${CHILD_PROCESS_PID}"; then
218
+ if ( ps -o pid,stat ax 2>/dev/null | grep -v 'PID' | awk '$2~/^[^Z]/ { print $1 }' | grep -q "^${CHILD_PROCESS_PID}$" || exit 1 && exit 0 ); then
219
219
  echo "[ERROR] Could not stop process : ${CHILD_PROCESS_NAME}"
220
220
  exit 1
221
221
  fi
@@ -63,18 +63,18 @@ while [ $# -ne 0 ]; do
63
63
  if [ -z "$1" ]; then
64
64
  break
65
65
 
66
- elif [ "$1" = "-h" ] || [ "$1" = "-H" ] || [ "$1" = "--help" ] || [ "$1" = "--HELP" ]; then
66
+ elif echo "$1" | grep -q -i -e "^-h$" -e "^--help$"; then
67
67
  PrintUsage "${PRGNAME}"
68
68
  exit 0
69
69
 
70
- elif [ "$1" = "-s" ] || [ "$1" = "-S" ] || [ "$1" = "--set" ] || [ "$1" = "--SET" ]; then
70
+ elif echo "$1" | grep -q -i -e "^-s$" -e "^--set$"; then
71
71
  if [ -n "${PROC_MODE}" ]; then
72
72
  echo "[ERROR] already specified --set(-s) or --restore(-r) option"
73
73
  exit 1
74
74
  fi
75
75
  PROC_MODE="set"
76
76
 
77
- elif [ "$1" = "-r" ] || [ "$1" = "-R" ] || [ "$1" = "--restore" ] || [ "$1" = "--RESTORE" ]; then
77
+ elif echo "$1" | grep -q -i -e "^-r$" -e "^--restore$"; then
78
78
  if [ -n "${PROC_MODE}" ]; then
79
79
  echo "[ERROR] already specified --set(-s) or --restore(-r) option"
80
80
  exit 1