# HG changeset patch
# User Arnaud Vergnet <arnaud.vergnet@logilab.fr>
# Date 1712240418 -7200
#      Thu Apr 04 16:20:18 2024 +0200
# Node ID f7bd8e9c9153d5ec8af07ea41a70d60c7a4ceea3
# Parent  809ff43d836d5d56adae698b14a02422cb460f1c
feat(frontend): allow specifying env var for the logo base64

diff --git a/frontend/.env.development b/frontend/.env.development
--- a/frontend/.env.development
+++ b/frontend/.env.development
@@ -1,2 +1,55 @@
 RODOLF_API_URL="http://localhost:8080/api"
-RODOLF_APP_TITLE="Rodolf Dev"
\ No newline at end of file
+RODOLF_APP_TITLE="Rodolf Dev"
+RODOLF_APP_LOGO_B64="/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU
+FhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo
+KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCABgAGADASIA
+AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
+AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
+ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
+p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
+AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
+BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
+U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
+uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6ppGY
+KpZiAAMkntS1i+Npmt/BmvTxkh47C4dSPURsRQBe0fU7LWdNg1DS7iO5sp13RTRnKsM4yPyNXK8u
++CGsTXuh2Wn2ccI0TSdMtbeScg7pLtow7qpzjaikA99ze1enxusiK8bKyMMhlOQRSTuhyVnYdRRR
+TEFFFFABWdrutWGhWSXeqT+RbtNHAHKkgO7BVzgcDJHJ4FXppY4YnlmdY4kUszucBQOpJPQV5H8e
+9UuYvCF3IJYbnw5qVi0SSxAMYLofvIJNwPKOVC+x2nvSbshxV3Y9forL0fUo5vDVlqd3KkUUlpHc
+SSSMFVQUDEkngCr9rcQ3dvHPazRzQSLuSSNgysPUEcEUxGD8Q9P1rU/CN/a+GL82GqsoMMoOCcHJ
+UN/DuHG7tmvJfBnxRfUtJ1Hwb483WGu+RJZpcXA2CVihULJ2V+evRv5+yeJfE+ieGbYT69qdtZRn
+7olf5m/3VHJ/AV8/fFLxV4O+IamPRNA1zUdYjGyK/srbb9FYHJZfYjI7EVnJ21TNIK+jR6F8IdOh
+b4BW9vZL++urK58z1MzF1bP0Ix+ArR/Z4u0uvhFoSr963WSBx6FZG4/IivFfBPi7xv8AC3TYk1jQ
+LxvDjSE+XdQmLy2Jydj4+XPXDcH2rtv2b/FOmte+I9Dgm8m3lvWvdPinIV2R+CmM8kYXgZ65pRlq
+ipRdmz3lJEdnVWVihwwBzg+9OrzTwI4sPi78QNNk4e5NrqMXupj2N+RAFel1oncyasFNlkSGJpJX
+VI1GWZjgAepNKzKilmYKoGSScYrg/jtKsfwk8S7sHzLbylHqzuqj9TQ3ZAld2Nn4kyxxfD3xJJJg
+p/Ztx16HMZFcBNBF/wAMuiO/QMo0EMA3GGC5Q/ntqP46+KtO0n4Z3Hh030R1q7t4rf7OrZdF+Xez
+AfdGAevXNef6Vonjj4t6PaQxywaT4WsYkgto3Y+XIUAUHA+Z246nAHaok9bI0jHS7LNxrmtfFSPS
+vBPhRZLbQrO2gTULx1ID7VAJb/ZBB2p1YjJ4HH0V4X0Oz8N6BY6RpqFbS0jEabjknuSfckkn615B
+4b8EfE7wZpi2fh3VPDEtorFzC9uUZ2Pdm25J9ya6vwb4r8bT6/b6V4r8JpDHKrH+0bCcPAmAfvAk
+4yRjrnPaiOm4T122NDxd4F8N3mqzeJ9R0mK/1GKJVCXEjGNgh4G37ucHHIPauntms9J0PzmEFtZw
+QmZzEgVEUDcSAB0A9qZrgnaLbHEJY9udmcb27D2p+hrcjT1W9hELdo9wbaPQmsI1pOu6dtLduvqD
+iuS9zzOTXvFXxGVofC8Meg+GZj5Z1O/hEk90pHWKE8BSO7f/AFq5/wAT/AjwtpmgLOdfu9PuoyM3
+dyVdJHPQbAAck9Apz9a9gcoviGK4RVECxeQWHQNnj246fiaoav4F0zWvFkOuaxNd3ptowtrZySfu
+Ld+cyKox8x45OcY/KqdSNXmtunb+vIbvC3Q8B8NQ+JPDHihNUk8Qw3t1bQtZr58Uk4eDOdrZKkc8
+gZJFew2fxBvmssXthaQ3J5RklZlZcZLFSAV+mT9aZ4t8K6Jo8C3UaTG4kfKh5MqMck47/wD1681a
+21bWJbi6sVsfLVtix3N35MtywG7yoFwd7BSCc4GWA9SI/eJ8qNHyNczOzvPFvnX6fb7jzAh2sg4U
+gsCV9ugH6etYPxO1PVvFdiNPvLxbHTXdZVS0hD7ypyu52IJxwcAD8a563tpr4sYLzTLKFE82W81O
+UxwxgnCg4wSzHOBkYAYnpg7/AIeOJn07WbcHyJP3kIfcBtOGCsOo7g9wRUe/FX6Mr3W7dUZPw+0L
+wLoN/bzeNTLd311IRFe33zWZfPQj+F+f+WmQexr0rXPhroeng6v4Wv7rwtdfea5sJD5BHYvEcqy5
+x0x1rsbTwtoaaXNZjT4J7K5TEkcy+Ysi+hBp+uiFLFbGPEEAQE7BhUQcADH4VrVn7Ck5vVr8zJPn
+nZDPCD67FoAPi57Fr+NmBmtNwSRB0cqR8rHnIHApdFZItQvXcRo15J5i4ABPGMH3wB+tXtNuYtSs
+Dn51+4+Rw1KmlWqXv2oRjzexPXP+RUSU6rp1KT0X9f15iVo80Zbl6iiiu0xMmTQbOW6imcSExDCK
+HIGPcd61qKjuZlt7eWaT7kalz9AM1lTpU6V+RWKcpS3ZwHxULv5UaAk/Z3KgdyT/APWrxPWfBGpa
+xqmlXkd/LZJZuGaIH/WAOrjoeDuUc89B6V2HxH8azwXEZKq93OCYkb7kKZ6+/NcLHqt5etuuruV8
+9t2APwHFcM67jJyie7hMoqYimpSdkaXi7wNd+IdMFqL1rQiTzN8JPOVZSpHGQVdh171s6Dptxp91
+bRSJJ5cUQiDsd2QqhRk+uAK5O7uHj+aGaVD6q5FJp3ja9024Vb5zd2mcNu++o9Qe/wBDUKvKSszp
+qZHOC5qbu/uPqrw65k0KwZuvkr/Kr8kaSLh1DD3Fcn4A1k3tr9kchxHGHhcd0/8ArZH5111elTan
+BHzVSLjJpjY41jQKgwBTqKKtK2iICiiimAVHdQrc20sEn3JEKH6EYqSigD58+JXgi6uZY8ER3kAK
+xu33JkJzjPY/5NeazWGp6adt3Y3CY/iCFlP4jIr6W+KmsjT9D+yxbftNzwpIBKD+8PevGbTxNd20
+aRX7osqjaXkXCyY/iDDjn0PIrzatFKVonv4LN6lCmoSV0cQ0lxOdsVvO7HssTH+laOkeCdS1W4Rt
+Qjazs8/Nv/1jj0Ve2fU118visoozLajIyMNuJ+gB5q34V8S31v4hgvZs/ZhhFidQM5PLY7eg796i
+NI6queVJK0I2Z654D0STT4WuZozFuQRxRnqqD1/IflXW1HbzJcQRzRHMcihlPsakr0oRUI2R8xOT
+lK7CiiirJCiiigAooooA8Q+K121z4kaPPyRDaB9OP55rldKsJ9Tvo7W2Us0h59FHcn2rd+IikeIr
+hj3kkH/j3/16oeFdbbQ9TWfYrwvhZRtydueq+9edUcrNx3O1JI1/G3hw6ZHBdW8OyMDy3KrjHoT/
+ACrj845HUV0Gr+I5Lp9QitlItLliB5xLMF/PAPFc+awwkJU6ahJbfMqbu7n0B8Prs3XhyHccmMlf
+wIDD+ddJXHfDFSmjzKezKPx2Cuxr1KTvBHHUVpMKKKK0IP/Z"
\ No newline at end of file
diff --git a/frontend/.env.production b/frontend/.env.production
--- a/frontend/.env.production
+++ b/frontend/.env.production
@@ -1,2 +1,55 @@
 RODOLF_API_URL="https://rodolf-api.k.intra.logilab.fr/api"
-RODOLF_APP_TITLE="Rodolf"
\ No newline at end of file
+RODOLF_APP_TITLE="Rodolf"
+RODOLF_APP_LOGO_B64="/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU
+FhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo
+KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCABgAGADASIA
+AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
+AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
+ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
+p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
+AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
+BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
+U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
+uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6ppGY
+KpZiAAMkntS1i+Npmt/BmvTxkh47C4dSPURsRQBe0fU7LWdNg1DS7iO5sp13RTRnKsM4yPyNXK8u
++CGsTXuh2Wn2ccI0TSdMtbeScg7pLtow7qpzjaikA99ze1enxusiK8bKyMMhlOQRSTuhyVnYdRRR
+TEFFFFABWdrutWGhWSXeqT+RbtNHAHKkgO7BVzgcDJHJ4FXppY4YnlmdY4kUszucBQOpJPQV5H8e
+9UuYvCF3IJYbnw5qVi0SSxAMYLofvIJNwPKOVC+x2nvSbshxV3Y9forL0fUo5vDVlqd3KkUUlpHc
+SSSMFVQUDEkngCr9rcQ3dvHPazRzQSLuSSNgysPUEcEUxGD8Q9P1rU/CN/a+GL82GqsoMMoOCcHJ
+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"
\ No newline at end of file
diff --git a/frontend/src/app/favicon.ico b/frontend/src/app/favicon.ico
deleted file mode 100644
index 363dd74afa299b5625f37d0bf4330e3057da04f9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
Hc$@<O00001

diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx
--- a/frontend/src/app/layout.tsx
+++ b/frontend/src/app/layout.tsx
@@ -14,6 +14,7 @@
 }) {
   const API_ENDPOINT = process.env.RODOLF_API_URL;
   const APP_TITLE = process.env.RODOLF_APP_TITLE;
+  const APP_LOGO = process.env.RODOLF_APP_LOGO;
 
   if (!API_ENDPOINT) {
     throw new Error("No api endpoint configured");
@@ -23,7 +24,11 @@
     <html lang="en">
       <body style={{ margin: 0 }}>
         <AppRouterCacheProvider>
-          <BaseLayout endpoint={API_ENDPOINT} title={APP_TITLE ?? "Rodolf"}>
+          <BaseLayout
+            endpoint={API_ENDPOINT}
+            title={APP_TITLE ?? "Rodolf"}
+            logoBase64={APP_LOGO}
+          >
             {children}
           </BaseLayout>
         </AppRouterCacheProvider>
diff --git a/frontend/src/components/BaseLayout.tsx b/frontend/src/components/BaseLayout.tsx
--- a/frontend/src/components/BaseLayout.tsx
+++ b/frontend/src/components/BaseLayout.tsx
@@ -10,7 +10,12 @@
   children,
   endpoint,
   title,
-}: PropsWithChildren<{ endpoint: string; title: string }>) {
+  logoBase64,
+}: PropsWithChildren<{
+  endpoint: string;
+  title: string;
+  logoBase64?: string;
+}>) {
   return (
     <ClientProvider endpoint={endpoint}>
       <CustomThemeProvider>
@@ -20,7 +25,7 @@
           sx={{ minHeight: "100vh", display: "flex" }}
         >
           <Stack flex={1}>
-            <Header title={title} />
+            <Header title={title} logoBase64={logoBase64} />
             <Box paddingTop={1} paddingBottom={1} flex={1}>
               {children}
             </Box>
diff --git a/frontend/src/components/Header.tsx b/frontend/src/components/Header.tsx
--- a/frontend/src/components/Header.tsx
+++ b/frontend/src/components/Header.tsx
@@ -19,9 +19,10 @@
 
 type HeaderProps = {
   title: string;
+  logoBase64: string | undefined;
 };
 
-export function Header({ title }: HeaderProps) {
+export function Header({ title, logoBase64 }: HeaderProps) {
   const pathname = usePathname();
   const loggedIn = pathname !== "/login";
   const logout = useApiLogout();
@@ -59,7 +60,11 @@
             alignItems={"center"}
           >
             <Image
-              src={"/rodolf.jpg"}
+              src={
+                logoBase64
+                  ? `data:image/png;base64,${logoBase64}`
+                  : "/rodolf.jpg"
+              }
               alt={"Rodolf logo"}
               width={50}
               height={50}