From 819f292f55adb377ef174b94d5da094f01ab88d9 Mon Sep 17 00:00:00 2001
From: BLANCHET Ludovic <ludovic.blanchet.ext@culture.gouv.fr>
Date: Mon, 20 Jan 2020 11:34:13 +0100
Subject: [PATCH] Add app logo configuration

Signed-off-by: Makhtar DIAGNE <makhtar.diagne@teamdlab.com>
---
 .../gouv/vitamui/commons/api/CommonConstants.java  |  3 +++
 .../vitamui/ui/commons/property/UIProperties.java  |  2 ++
 .../ui/commons/service/ApplicationService.java     | 14 +++++++++++++-
 .../components/navbar/navbar.component.html        |  5 ++++-
 .../modules/components/navbar/navbar.component.ts  |  8 ++++++++
 .../modules/models/app.configuration.interface.ts  |  1 +
 .../src/app/modules/startup.service.ts             | 10 ++++++++--
 ui/ui-frontend/package.json.rej                    | 10 ++++++++++
 .../graphic-identity-update.component.ts           |  2 --
 .../main/config/ui-identity-application-dev.yml    |  2 ++
 .../src/main/config/ui-portal-application-dev.yml  |  2 ++
 11 files changed, 53 insertions(+), 6 deletions(-)
 create mode 100644 ui/ui-frontend/package.json.rej

diff --git a/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/CommonConstants.java b/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/CommonConstants.java
index 739b1e4e..cf9cf54e 100644
--- a/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/CommonConstants.java
+++ b/commons/commons-api/src/main/java/fr/gouv/vitamui/commons/api/CommonConstants.java
@@ -183,6 +183,8 @@ public class CommonConstants {
 
     public static final String UI_URL = "UI_URL";
 
+    public static final String ASSET_FOLDER = "ASSET_FOLDER";
+
     public static final String THEME_COLORS = "THEME_COLORS";
 
     /**
@@ -258,4 +260,5 @@ public class CommonConstants {
 
     public static final String MULTIPART_FILE_PARAM_NAME = "uploadedFile";
 
+    public static final String LOGO = "LOGO";
 }
diff --git a/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/property/UIProperties.java b/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/property/UIProperties.java
index 63a5c945..04dc4634 100644
--- a/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/property/UIProperties.java
+++ b/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/property/UIProperties.java
@@ -50,4 +50,6 @@ public interface UIProperties {
 
     public Map<String, String> getThemeColors();
 
+    public String getLogoURI();
+
 }
diff --git a/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/service/ApplicationService.java b/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/service/ApplicationService.java
index 092e0fdc..2a08f359 100644
--- a/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/service/ApplicationService.java
+++ b/ui/ui-commons/src/main/java/fr/gouv/vitamui/ui/commons/service/ApplicationService.java
@@ -118,13 +118,25 @@ public class ApplicationService extends AbstractCrudService<ApplicationDto> {
     public Map<String, Object> getConf() {
         final Map<String, Object> configurationData = new HashMap<>();
         configurationData.put(CommonConstants.PORTAL_URL, properties.getBaseUrl().getPortal());
-        // TODO check if it s used
         configurationData.put(CommonConstants.CAS_LOGIN_URL, getCasLoginUrl());
         configurationData.put(CommonConstants.CAS_LOGOUT_URL, casLogoutUrl.getValue());
         configurationData.put(CommonConstants.UI_URL, uiUrl);
         configurationData.put(CommonConstants.LOGOUT_REDIRECT_UI_URL, casLogoutUrl.getValueWithRedirection(uiRedirectUrl));
         configurationData.put(CommonConstants.THEME_COLORS, properties.getThemeColors());
 
+        final Path logoPath = Paths.get(properties.getLogoURI());
+        String base64Logo = null;
+        try {
+            base64Logo = DatatypeConverter.printBase64Binary(Files.readAllBytes(logoPath));
+        }
+        catch (IOException e) {
+            LOGGER.warn("Error while resolve application logo");
+            e.printStackTrace();
+        }
+        if (base64Logo != null) {
+            configurationData.put(CommonConstants.LOGO, base64Logo);
+        }
+
         return configurationData;
     }
 
diff --git a/ui/ui-frontend-common/src/app/modules/components/navbar/navbar.component.html b/ui/ui-frontend-common/src/app/modules/components/navbar/navbar.component.html
index 369765e2..9fc9cff8 100644
--- a/ui/ui-frontend-common/src/app/modules/components/navbar/navbar.component.html
+++ b/ui/ui-frontend-common/src/app/modules/components/navbar/navbar.component.html
@@ -1,5 +1,8 @@
 <nav class="vitamui-navbar">
-  <a href="{{portalUrl}}" class="vitamui-navbar-logo"><img src="../../../../assets/navbar-logo-vitamui.png"></a>
+  <a href="{{portalUrl}}" class="vitamui-navbar-logo">
+    <img *ngIf="base64Logo" [src]="trustedAppLogoUrl">
+    <img *ngIf="!base64Logo" src="../../../../assets/navbar-logo.svg">
+  </a>
 
   <ul class="menu">
 
diff --git a/ui/ui-frontend-common/src/app/modules/components/navbar/navbar.component.ts b/ui/ui-frontend-common/src/app/modules/components/navbar/navbar.component.ts
index e74218ac..1c2b663e 100644
--- a/ui/ui-frontend-common/src/app/modules/components/navbar/navbar.component.ts
+++ b/ui/ui-frontend-common/src/app/modules/components/navbar/navbar.component.ts
@@ -68,9 +68,11 @@ export class NavbarComponent {
   @Output() customerSelect = new EventEmitter<string>();
 
   portalUrl: string;
+  base64Logo: string;
   currentUser: AuthUser;
   hasAccountProfile = false;
   trustedInlineLogoUrl: SafeUrl;
+  trustedAppLogoUrl: SafeUrl;
 
   constructor(
     public authService: AuthService,
@@ -78,6 +80,12 @@ export class NavbarComponent {
     private subrogationService: SubrogationService,
     private domSanitizer: DomSanitizer) {
     this.portalUrl = startupService.getPortalUrl();
+    this.base64Logo = startupService.getLogo();
+
+    if (this.base64Logo) {
+      this.trustedAppLogoUrl = this.domSanitizer.bypassSecurityTrustUrl('data:image/*;base64,' + this.base64Logo);
+    }
+
     if (this.authService.user) {
       this.currentUser = this.authService.user;
       if (this.currentUser.basicCustomer) {
diff --git a/ui/ui-frontend-common/src/app/modules/models/app.configuration.interface.ts b/ui/ui-frontend-common/src/app/modules/models/app.configuration.interface.ts
index a5affeba..340c929a 100644
--- a/ui/ui-frontend-common/src/app/modules/models/app.configuration.interface.ts
+++ b/ui/ui-frontend-common/src/app/modules/models/app.configuration.interface.ts
@@ -42,6 +42,7 @@ export interface AppConfiguration {
     LOGOUT_REDIRECT_UI_URL: string;
     SEARCH_URL?: string;
     THEME_COLORS: any;
+    LOGO: any;
     [key: string]: string;
 
 }
diff --git a/ui/ui-frontend-common/src/app/modules/startup.service.ts b/ui/ui-frontend-common/src/app/modules/startup.service.ts
index 6a1b69ff..d4b85655 100644
--- a/ui/ui-frontend-common/src/app/modules/startup.service.ts
+++ b/ui/ui-frontend-common/src/app/modules/startup.service.ts
@@ -93,7 +93,6 @@ export class StartupService {
 
         const applicationColorMap = this.configurationData.THEME_COLORS;
         const customerColorMap = this.authService.user.basicCustomer.graphicIdentity.themeColors;
-
         const themeColors = {
           '--vitamui-primary': getColorFromMaps('vitamui-primary', '#fe4f02', applicationColorMap, customerColorMap),
           '--vitamui-primary-light': getColorFromMaps('vitamui-primary-light', '#ff8559', applicationColorMap, customerColorMap),
@@ -104,7 +103,8 @@ export class StartupService {
           '--vitamui-secondary-dark-5': getColorFromMaps('vitamui-secondary-dark', '#52aa9a', applicationColorMap, customerColorMap)
         };
 
-        console.log('Theme colors: ', themeColors);
+        const logo64 = this.configurationData.LOGO;
+        console.log('Logo: ', logo64);
 
         for (const themeColorsKey in themeColors) {
           if (themeColors.hasOwnProperty(themeColorsKey)) {
@@ -152,6 +152,12 @@ export class StartupService {
     }
   }
 
+  getLogo(): string {
+    if (this.configurationLoaded()) {
+      return this.configurationData.LOGO;
+    }
+  }
+
   getPortalUrl(): string {
     if (this.configurationLoaded()) {
       return this.configurationData.PORTAL_URL;
diff --git a/ui/ui-frontend/package.json.rej b/ui/ui-frontend/package.json.rej
new file mode 100644
index 00000000..d3db92f4
--- /dev/null
+++ b/ui/ui-frontend/package.json.rej
@@ -0,0 +1,10 @@
+diff a/ui/ui-frontend/package.json b/ui/ui-frontend/package.json	(rejected hunks)
+@@ -59,7 +59,7 @@
+     "moment": "^2.24.0",
+     "rxjs": "^6.5.2",
+     "tslib": "^1.9.0",
+-    "ui-frontend-common": "file:../ui-frontend-common/ui-frontend-common-0.0.25.tgz",
++    "ui-frontend-common": "file:../ui-frontend-common/ui-frontend-common-0.0.26.tgz",
+     "underscore": "^1.9.1",
+     "web-animations-js": "github:angular/web-animations-js#release_pr208",
+     "zone.js": "~0.9.1"
diff --git a/ui/ui-frontend/projects/identity/src/app/customer/customer-preview/graphic-identity-tab/graphic-identity-update/graphic-identity-update.component.ts b/ui/ui-frontend/projects/identity/src/app/customer/customer-preview/graphic-identity-tab/graphic-identity-update/graphic-identity-update.component.ts
index f93f6f51..e5d9cd5c 100644
--- a/ui/ui-frontend/projects/identity/src/app/customer/customer-preview/graphic-identity-tab/graphic-identity-update/graphic-identity-update.component.ts
+++ b/ui/ui-frontend/projects/identity/src/app/customer/customer-preview/graphic-identity-tab/graphic-identity-update/graphic-identity-update.component.ts
@@ -197,8 +197,6 @@ export class GraphicIdentityUpdateComponent implements OnInit {
   isGraphicIdentityFormValid() {
     return this.graphicIdentityForm.get('hasCustomGraphicIdentity').value === false ||
       (this.graphicIdentityForm.get('hasCustomGraphicIdentity').value === true && this.imageUrl);
-    // TODO: Update me to add themeColors !
-    // FIXME: What if we dont want to update imageURL ? Can we test image OR themeColors updates
   }
 
 }
diff --git a/ui/ui-identity/src/main/config/ui-identity-application-dev.yml b/ui/ui-identity/src/main/config/ui-identity-application-dev.yml
index 9fe3575e..56bd8c48 100644
--- a/ui/ui-identity/src/main/config/ui-identity-application-dev.yml
+++ b/ui/ui-identity/src/main/config/ui-identity-application-dev.yml
@@ -16,6 +16,8 @@ ui-identity:
     vitamui-primary-light-20: "#ba52d1"
     vitamui-secondary: "#7FA1D4"
 
+  logoURI: "/home/lubla/vitamui/test_logo.png"
+
   iam-external-client:
     server-host: localhost
     server-port: 8083
diff --git a/ui/ui-portal/src/main/config/ui-portal-application-dev.yml b/ui/ui-portal/src/main/config/ui-portal-application-dev.yml
index 2d49fefd..2566f06f 100644
--- a/ui/ui-portal/src/main/config/ui-portal-application-dev.yml
+++ b/ui/ui-portal/src/main/config/ui-portal-application-dev.yml
@@ -31,6 +31,8 @@ ui-portal:
     vitamui-primary-light-20: "#ba52d1"
     vitamui-secondary: "#7FA1D4"
 
+  logoURI: "/home/lubla/vitamui/test_logo.png"
+
   iam-external-client:
     server-host: localhost
     server-port: 8083
-- 
GitLab