This is an automated email from the ASF dual-hosted git repository.

smolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git


The following commit(s) were added to refs/heads/master by this push:
     new 2c7140ed4 KNOX-2740 - Impersonation-related fields should be displayed 
only if that's enabled in the topology for the KnoxToken service (#569)
2c7140ed4 is described below

commit 2c7140ed4e4231134f0a91f5c99fcfe321e8611f
Author: Sandor Molnar <[email protected]>
AuthorDate: Thu May 5 20:19:22 2022 +0200

    KNOX-2740 - Impersonation-related fields should be displayed only if that's 
enabled in the topology for the KnoxToken service (#569)
---
 .../resources/applications/tokengen/app/index.html     |  8 +++++---
 .../resources/applications/tokengen/app/js/tokengen.js |  4 ++++
 .../knox/gateway/service/knoxtoken/TokenResource.java  |  6 ++++++
 .../app/token.management.component.html                |  2 +-
 .../token-management/app/token.management.component.ts |  7 +++++++
 .../token-management/app/token.management.service.ts   | 18 ++++++++++++++++++
 6 files changed, 41 insertions(+), 4 deletions(-)

diff --git 
a/gateway-applications/src/main/resources/applications/tokengen/app/index.html 
b/gateway-applications/src/main/resources/applications/tokengen/app/index.html
index 3810a8d7b..57d20254c 100644
--- 
a/gateway-applications/src/main/resources/applications/tokengen/app/index.html
+++ 
b/gateway-applications/src/main/resources/applications/tokengen/app/index.html
@@ -79,9 +79,11 @@
                             </table>
                             <label style="display: none; color: red;" 
id="invalidLifetimeText"><i class="icon-warning"></i>Invalid lifetime!</label>
                         </div>
-                        <label><i class="icon-user"></i> Generating token for 
(impersonation):</label>
-                        <input type="text" name="doas" id="doas" size="50" 
maxlength="255">
-                        <label style="display: none; color: red;" 
id="invalidDoasText"><i class="icon-warning"></i>Invalid doAs!</label>
+                        <div id="impersonationFields" style="display: none;">
+                            <label><i class="icon-user"></i> Generating token 
for (impersonation):</label>
+                            <input type="text" name="doas" id="doas" size="50" 
maxlength="255">
+                            <label style="display: none; color: red;" 
id="invalidDoasText"><i class="icon-warning"></i>Invalid doAs!</label>
+                        </div>
                     </div>
                     <span id="errorBox" class="help-inline" 
style="color:red;display:none;"><span class="errorMsg"></span>
                         <i class="icon-warning-sign" 
style="color:#ae2817;"></i>
diff --git 
a/gateway-applications/src/main/resources/applications/tokengen/app/js/tokengen.js
 
b/gateway-applications/src/main/resources/applications/tokengen/app/js/tokengen.js
index 04079e8eb..d5d1263ba 100644
--- 
a/gateway-applications/src/main/resources/applications/tokengen/app/js/tokengen.js
+++ 
b/gateway-applications/src/main/resources/applications/tokengen/app/js/tokengen.js
@@ -112,6 +112,10 @@ function setTokenStateServiceStatus() {
                     $('#lifespanFields').show();
                     document.getElementById("lifespanInputEnabled").value = 
"true";
                 }
+
+                if (resp.impersonationEnabled === "true") {
+                    $('#impersonationFields').show();
+                }
             }
         }
     }
diff --git 
a/gateway-service-knoxtoken/src/main/java/org/apache/knox/gateway/service/knoxtoken/TokenResource.java
 
b/gateway-service-knoxtoken/src/main/java/org/apache/knox/gateway/service/knoxtoken/TokenResource.java
index 85c07d33a..b0cc793e8 100644
--- 
a/gateway-service-knoxtoken/src/main/java/org/apache/knox/gateway/service/knoxtoken/TokenResource.java
+++ 
b/gateway-service-knoxtoken/src/main/java/org/apache/knox/gateway/service/knoxtoken/TokenResource.java
@@ -145,6 +145,8 @@ public class TokenResource {
   private static final String TARGET_ENDPOINT_PULIC_CERT_PEM = 
TOKEN_PARAM_PREFIX + "target.endpoint.cert.pem";
   static final String QUERY_PARAMETER_DOAS = "doAs";
   static final String PROXYUSER_PREFIX = TOKEN_PARAM_PREFIX + "proxyuser";
+  private static final String IMPERSONATION_ENABLED_PARAM = TOKEN_PARAM_PREFIX 
+ "impersonation.enabled";
+  private static final String IMPERSONATION_ENABLED_TEXT = 
"impersonationEnabled";
   public static final String KNOX_TOKEN_INCLUDE_GROUPS = TOKEN_PARAM_PREFIX + 
"include.groups";
 
   private static TokenServiceMessages log = 
MessagesFactory.get(TokenServiceMessages.class);
@@ -361,6 +363,10 @@ public class TokenResource {
     final String lifespanInputEnabledValue = 
context.getInitParameter(LIFESPAN_INPUT_ENABLED_PARAM);
     final Boolean lifespanInputEnabled = lifespanInputEnabledValue == null ? 
Boolean.TRUE : Boolean.parseBoolean(lifespanInputEnabledValue);
     tokenStateServiceStatusMap.put(LIFESPAN_INPUT_ENABLED_TEXT, 
lifespanInputEnabled.toString());
+
+    final String impersonationEnabledValue = 
context.getInitParameter(IMPERSONATION_ENABLED_PARAM);
+    final Boolean impersonationEnabled = impersonationEnabledValue == null ? 
Boolean.TRUE : Boolean.parseBoolean(impersonationEnabledValue);
+    tokenStateServiceStatusMap.put(IMPERSONATION_ENABLED_TEXT, 
impersonationEnabled.toString());
   }
 
   private void populateAllowedTokenStateBackendForTokenGenApp(final String 
actualTokenServiceName) {
diff --git 
a/knox-token-management-ui/token-management/app/token.management.component.html 
b/knox-token-management-ui/token-management/app/token.management.component.html
index 7aebe2577..5a9157565 100644
--- 
a/knox-token-management-ui/token-management/app/token.management.component.html
+++ 
b/knox-token-management-ui/token-management/app/token.management.component.html
@@ -66,7 +66,7 @@
 
     <!-- 'doAs' Knox Tokens (tokens created by the current user on behalf on 
another user -->
 
-    <div class="table-responsive" style="width:100%; overflow: auto; 
overflow-y: scroll; padding: 10px 0px 0px 0px;">
+    <div class="table-responsive" style="width:100%; overflow: auto; 
overflow-y: scroll; padding: 10px 0px 0px 0px;" 
*ngIf="isImpersonationEnabled()">
         <label>Impersonation Knox Tokens</label>
         <table class="table table-hover" [mfData]="doAsKnoxTokens" 
#doAsTokens="mfDataTable" [mfRowsOnPage]="10">
             <thead>
diff --git 
a/knox-token-management-ui/token-management/app/token.management.component.ts 
b/knox-token-management-ui/token-management/app/token.management.component.ts
index e4ebc0d5c..af7742539 100644
--- 
a/knox-token-management-ui/token-management/app/token.management.component.ts
+++ 
b/knox-token-management-ui/token-management/app/token.management.component.ts
@@ -31,6 +31,7 @@ export class TokenManagementComponent implements OnInit {
     userName: string;
     knoxTokens: KnoxToken[];
     doAsKnoxTokens: KnoxToken[];
+    impersonationEnabled: boolean;
 
     toggleBoolean(propertyName: string) {
         this[propertyName] = !this[propertyName];
@@ -46,6 +47,8 @@ export class TokenManagementComponent implements OnInit {
     ngOnInit(): void {
         console.debug('TokenManagementComponent --> ngOnInit()');
         this.tokenManagementService.getUserName().then(userName => 
this.setUserName(userName));
+        this.tokenManagementService.getImpersonationEnabled()
+            .then(impersonationEnabled => this.impersonationEnabled = 
impersonationEnabled === 'true');
     }
 
     setUserName(userName: string) {
@@ -87,6 +90,10 @@ export class TokenManagementComponent implements OnInit {
         return Date.now() > expiration;
     }
 
+    isImpersonationEnabled(): boolean {
+        return this.impersonationEnabled;
+    }
+
     getCustomMetadataArray(knoxToken: KnoxToken): [string, string][] {
       let mdMap = new Map();
       if (knoxToken.metadata.customMetadataMap) {
diff --git 
a/knox-token-management-ui/token-management/app/token.management.service.ts 
b/knox-token-management-ui/token-management/app/token.management.service.ts
index 4da100d43..7a6ddda23 100644
--- a/knox-token-management-ui/token-management/app/token.management.service.ts
+++ b/knox-token-management-ui/token-management/app/token.management.service.ts
@@ -31,6 +31,7 @@ export class TokenManagementService {
     enableKnoxTokenUrl = this.apiUrl + 'enable';
     disableKnoxTokenUrl = this.apiUrl + 'disable';
     revokeKnoxTokenUrl = this.apiUrl + 'revoke';
+    getTssStatusUrl = this.apiUrl + 'getTssStatus';
 
     constructor(private http: HttpClient) {}
 
@@ -102,6 +103,23 @@ export class TokenManagementService {
             });
     }
 
+    getImpersonationEnabled(): Promise<string> {
+        let headers = new HttpHeaders();
+        headers = this.addJsonHeaders(headers);
+        return this.http.get(this.getTssStatusUrl, { headers: headers})
+            .toPromise()
+            .then(response => response['impersonationEnabled'] as string)
+            .catch((err: HttpErrorResponse) => {
+                console.debug('TokenManagementService --> 
getImpersonationEnabled() --> ' + this.getTssStatusUrl
+                              + '\n  error: ' + err.message);
+                if (err.status === 401) {
+                    window.location.assign(document.location.pathname);
+                } else {
+                    return this.handleError(err);
+                }
+            });
+    }
+
     addJsonHeaders(headers: HttpHeaders): HttpHeaders {
         return this.addCsrfHeaders(headers.append('Accept', 
'application/json').append('Content-Type', 'application/json'));
     }

Reply via email to