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.
- package/ChangeLog +12 -0
- package/README.md +31 -31
- package/app.js +6 -10
- package/bin/run.sh +21 -21
- package/bin/www +1 -1
- package/config/k2hr3-init.sh.templ +5 -5
- package/eslint.config.mjs +68 -0
- package/lib/cacerts.js +8 -7
- package/lib/dummyuserapi.js +1 -1
- package/lib/ipwatch.js +1 -1
- package/lib/k2hr3acrutil.js +12 -14
- package/lib/k2hr3apiutil.js +5 -5
- package/lib/k2hr3cryptutil.js +2 -0
- package/lib/k2hr3dkc.js +25 -28
- package/lib/k2hr3template.js +54 -52
- package/lib/k2hr3tokens.js +4 -4
- package/lib/k8soidc.js +3 -3
- package/lib/openstackapiv2.js +51 -52
- package/lib/openstackapiv3.js +86 -87
- package/lib/openstackep.js +46 -46
- package/package.json +8 -8
- package/routes/acr.js +66 -110
- package/routes/debugVerify.js +12 -14
- package/routes/extdata.js +24 -40
- package/routes/list.js +24 -36
- package/routes/policy.js +72 -120
- package/routes/resource.js +110 -165
- package/routes/role.js +177 -295
- package/routes/service.js +54 -90
- package/routes/userTokens.js +1 -1
- package/routes/userdata.js +12 -20
- package/routes/version.js +39 -23
- package/tests/auto_control_subprocess.sh +9 -9
- package/tests/auto_init_config_json.sh +3 -3
- package/tests/auto_resource.js +417 -478
- package/tests/auto_role.js +55 -71
- package/tests/auto_template.sh +4 -4
- package/tests/auto_version.js +39 -23
- package/tests/k2hdkc_test_load.sh +9 -9
- package/tests/k2hr3template_test.sh +12 -12
- package/tests/k2hr3template_test_vars.js +60 -62
- package/tests/manual_acr_delete.js +11 -12
- package/tests/manual_acr_get.js +9 -10
- package/tests/manual_acr_postput.js +12 -13
- package/tests/manual_extdata_get.js +5 -6
- package/tests/manual_list_gethead.js +12 -13
- package/tests/manual_policy_delete.js +12 -13
- package/tests/manual_policy_gethead.js +27 -27
- package/tests/manual_policy_postput.js +21 -23
- package/tests/manual_resource_delete.js +11 -15
- package/tests/manual_resource_gethead.js +11 -14
- package/tests/manual_resource_postput.js +18 -21
- package/tests/manual_role_delete.js +22 -28
- package/tests/manual_role_gethead.js +53 -53
- package/tests/manual_role_postput.js +28 -31
- package/tests/manual_service_delete.js +11 -13
- package/tests/manual_service_gethead.js +13 -15
- package/tests/manual_service_postput.js +10 -11
- package/tests/manual_test.sh +10 -10
- package/tests/manual_userdata_get.js +14 -15
- package/tests/manual_usertoken_gethead.js +12 -14
- package/tests/manual_usertoken_postput.js +23 -26
- package/tests/manual_version_get.js +12 -13
- package/tests/run_local_test_k2hdkc.sh +4 -4
- 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
|
-
|
|
267
|
-
|
|
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
|
-
|
|
315
|
-
|
|
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
|
-
|
|
362
|
-
|
|
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
|
-
|
|
380
|
-
|
|
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
|
-
|
|
436
|
-
|
|
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
|
-
|
|
483
|
-
|
|
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
|
-
|
|
540
|
-
|
|
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
|
-
|
|
558
|
-
|
|
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
|
-
|
|
605
|
-
|
|
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
|
-
|
|
636
|
-
|
|
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
|
-
|
|
655
|
-
|
|
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
|
-
|
|
715
|
-
|
|
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
|
-
|
|
746
|
-
|
|
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
|
-
|
|
774
|
-
|
|
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
|
-
|
|
795
|
-
|
|
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
|
-
|
|
836
|
-
|
|
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
|
-
|
|
867
|
-
|
|
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
|
-
|
|
900
|
-
|
|
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;
|
package/routes/userTokens.js
CHANGED
|
@@ -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)
|
|
384
|
+
router.get('/', function(req, res, next)
|
|
385
385
|
{
|
|
386
386
|
r3logger.dlog('CALL:', req.method, req.url);
|
|
387
387
|
if('HEAD' === req.method){
|
package/routes/userdata.js
CHANGED
|
@@ -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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
89
|
-
|
|
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
|
-
|
|
106
|
-
|
|
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
|
-
|
|
163
|
-
|
|
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':
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
|
67
|
+
elif echo "$1" | grep -q -i -e "^-h$" -e "^--help$"; then
|
|
68
68
|
PrintUsage "${PRGNAME}"
|
|
69
69
|
exit 0
|
|
70
70
|
|
|
71
|
-
elif
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
66
|
+
elif echo "$1" | grep -q -i -e "^-h$" -e "^--help$"; then
|
|
67
67
|
PrintUsage "${PRGNAME}"
|
|
68
68
|
exit 0
|
|
69
69
|
|
|
70
|
-
elif
|
|
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
|
|
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
|