From d565f624e6bd791f57608c2ff50b9cb005ca924f Mon Sep 17 00:00:00 2001
From: Bastien DUMONT <bdumont@grandlyon.com>
Date: Tue, 8 Oct 2024 15:34:08 +0200
Subject: [PATCH 01/16] feat(consent): increase consent duration to 3 years

---
 internal/models/sgeConsent.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/internal/models/sgeConsent.go b/internal/models/sgeConsent.go
index e382ef0..8df860c 100644
--- a/internal/models/sgeConsent.go
+++ b/internal/models/sgeConsent.go
@@ -81,7 +81,7 @@ func (dh *DataHandler) PostSgeConsent(w http.ResponseWriter, r *http.Request) {
 		log.Println(err.Error())
 		return
 	}
-	consent.EndDate = time.Now().AddDate(1, 0, 0)
+	consent.EndDate = time.Now().AddDate(3, 0, 0)
 
 	// Create a consent in SQL
 	err = dh.sqlClient.Create(&consent).Error
-- 
GitLab


From edf65fe5dcb61929b38c2d0173c7377fc43abced Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20PAILHAREY?= <rpailharey@grandlyon.com>
Date: Thu, 10 Oct 2024 08:34:24 +0000
Subject: [PATCH 02/16] fix(k8s): increase memory limits

---
 k8s/deployments/ecolyo-agent-database-deployment.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/k8s/deployments/ecolyo-agent-database-deployment.yml b/k8s/deployments/ecolyo-agent-database-deployment.yml
index 9c0d54f..fafc676 100644
--- a/k8s/deployments/ecolyo-agent-database-deployment.yml
+++ b/k8s/deployments/ecolyo-agent-database-deployment.yml
@@ -40,7 +40,7 @@ spec:
           resources:
             limits:
               cpu: 100m
-              memory: 512Mi
+              memory: 1Gi
             requests:
               cpu: 100m
-              memory: 512Mi
+              memory: 1Gi
-- 
GitLab


From fb4fcd2cd6eaf42a37b358ff514bc4ccb27e6653 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20PAILHAREY?= <rpailharey@grandlyon.com>
Date: Fri, 18 Oct 2024 11:06:53 +0200
Subject: [PATCH 03/16] fix: correct access token

---
 .gitlab-ci.yml                                     | 4 ++--
 k8s/README.md                                      | 4 ++--
 k8s/deployments/ecolyo-agent-server-deployment.yml | 2 +-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 258ea31..63a57bb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -152,7 +152,7 @@ deploy_rec:
   script:
     - find k8s/ -name '*.yml' -exec sed -i "s/{{NS}}/$NAMESPACE/g" {} \;
 
-    - oc create secret -n $NAMESPACE docker-registry llle-project --docker-server=$CI_REGISTRY --docker-username=llle-project --docker-password=$READ_REGISTRY_TOKEN --dry-run=client -o yaml | oc apply -f -
+    - oc create secret -n $NAMESPACE docker-registry forge-secret --docker-server=$CI_REGISTRY --docker-username=read_registry --docker-password=$READ_REGISTRY_TOKEN --dry-run=client -o yaml | oc apply -f -
 
     - oc apply -f k8s/secrets
     - oc apply -f k8s/deployments
@@ -184,7 +184,7 @@ deploy_prod:
   script:
     - find k8s/ -name '*.yml' -exec sed -i "s/{{NS}}/$NAMESPACE/g" {} \;
 
-    - oc create secret -n $NAMESPACE docker-registry llle-project --docker-server=$CI_REGISTRY --docker-username=llle-project --docker-password=$READ_REGISTRY_TOKEN --dry-run=client -o yaml | oc apply -f -
+    - oc create secret -n $NAMESPACE docker-registry forge-secret --docker-server=$CI_REGISTRY --docker-username=read_registry --docker-password=$READ_REGISTRY_TOKEN --dry-run=client -o yaml | oc apply -f -
 
     - oc apply -f k8s/secrets
     - oc apply -f k8s/deployments
diff --git a/k8s/README.md b/k8s/README.md
index abd3f18..948896b 100644
--- a/k8s/README.md
+++ b/k8s/README.md
@@ -31,10 +31,10 @@ Configuration:
 - Depuis la console Web, se rendre dans la section "Workloads > Secrets"
 - Cliquer sur le bouton bleu "Create" puis "Image pull secret"
 - Donner les informations :
-  - Secret name : llle-project
+  - Secret name : forge-secret
   - Authentification type : Image registry credentials
   - Registry server address : registry.forge.grandlyon.com
-  - Username: llle-project
+  - Username: read_registry
   - Password: demander le password
 - Cliquer sur Create
 
diff --git a/k8s/deployments/ecolyo-agent-server-deployment.yml b/k8s/deployments/ecolyo-agent-server-deployment.yml
index 2b733b8..c37c1cb 100644
--- a/k8s/deployments/ecolyo-agent-server-deployment.yml
+++ b/k8s/deployments/ecolyo-agent-server-deployment.yml
@@ -54,4 +54,4 @@ spec:
               cpu: 100m
               memory: 64Mi   
       imagePullSecrets:
-        - name: llle-project
+        - name: forge-secret
-- 
GitLab


From d2de6f94d7e910142f998e734970e4bbfff7390b Mon Sep 17 00:00:00 2001
From: Bastien DUMONT <bdumont@grandlyon.com>
Date: Mon, 21 Oct 2024 15:05:49 +0200
Subject: [PATCH 04/16] feat(consents): delete outdated consents

---
 internal/models/consent_cleanup.go | 35 ++++++++++++++++++++++++++++++
 main.go                            | 15 +++++++++++++
 2 files changed, 50 insertions(+)
 create mode 100644 internal/models/consent_cleanup.go

diff --git a/internal/models/consent_cleanup.go b/internal/models/consent_cleanup.go
new file mode 100644
index 0000000..c7fe21a
--- /dev/null
+++ b/internal/models/consent_cleanup.go
@@ -0,0 +1,35 @@
+package models
+
+import (
+	"log"
+	"time"
+)
+
+// deleteOutdatedConsents hard deletes outdated consents where end_date is more than 5 years old
+func deleteOutdatedConsents[T GrdfConsent | SgeConsent](dh *DataHandler, model *T, consentType string) {
+	log.Printf("Running %v outdated consents cleanup", consentType)
+	cutoffDate := time.Now().AddDate(-5, 0, 0)
+
+	result := dh.sqlClient.Unscoped().
+		Where("end_date < ?", cutoffDate).
+		Delete(model)
+
+	log.Printf("nb of rows %v", result.RowsAffected)
+
+	if result.Error != nil {
+		log.Printf("Error deleting outdated %s consents: %v\n", consentType, result.Error)
+		return
+	}
+
+	if result.RowsAffected > 0 {
+		log.Printf("Successfully deleted %d outdated %s consent(s) created before %v\n",
+			result.RowsAffected,
+			consentType,
+			cutoffDate.Format("2006-01-02"))
+	}
+}
+
+func DeleteOutdatedConsents(dh *DataHandler) {
+	deleteOutdatedConsents(dh, &GrdfConsent{}, "GRDF")
+	deleteOutdatedConsents(dh, &SgeConsent{}, "SGE")
+}
diff --git a/main.go b/main.go
index baa3d5c..c895f5d 100644
--- a/main.go
+++ b/main.go
@@ -59,6 +59,21 @@ func main() {
 		}
 	}()
 
+	// Deletes outdated consents every 24h
+	dh := models.NewDataHandler()
+	dailyTicker := time.NewTicker(time.Hour * 24)
+	go func() {
+		for {
+			select {
+			case <-dailyTicker.C:
+				models.DeleteOutdatedConsents(dh)
+			case <-quit:
+				dailyTicker.Stop()
+				return
+			}
+		}
+	}()
+
 	// Serve locally with https
 	log.Fatal(http.ListenAndServeTLS(":"+strconv.Itoa(httpsPort), "./dev_certificates/localhost.crt", "./dev_certificates/localhost.key", rootMux.Router))
 	// log.Fatal(http.ListenAndServe(":"+strconv.Itoa(httpsPort), rootMux.Router))
-- 
GitLab


From 66ead2e320ed2176331fecb22147ae93ae59deb1 Mon Sep 17 00:00:00 2001
From: Bastien DUMONT <bdumont@grandlyon.com>
Date: Mon, 21 Oct 2024 15:11:55 +0200
Subject: [PATCH 05/16] chore: add server port in logs

---
 main.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/main.go b/main.go
index baa3d5c..587f060 100644
--- a/main.go
+++ b/main.go
@@ -23,7 +23,7 @@ var (
 
 func main() {
 
-	log.Println("--- Server is starting ---")
+	log.Printf("--- Server is starting on port %v ---", httpsPort)
 
 	// Initializations
 	tokens.Init("./mnt/configs/tokenskey.json", debugMode)
-- 
GitLab


From 1effcdd830a92d74ab13db16bf3ee46115f318f8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20PAILHAREY?= <rpailharey@grandlyon.com>
Date: Tue, 12 Nov 2024 17:13:08 +0100
Subject: [PATCH 06/16] fix(auth): prevent too large cookie

---
 internal/auth/oauth2.go          | 15 ++++++++++++---
 internal/rootmux/rootmux_test.go |  2 +-
 internal/tokens/tokens_test.go   |  5 -----
 3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/internal/auth/oauth2.go b/internal/auth/oauth2.go
index 423df8e..3e9521d 100644
--- a/internal/auth/oauth2.go
+++ b/internal/auth/oauth2.go
@@ -106,11 +106,11 @@ func (m Manager) HandleOAuth2Callback() http.Handler {
 		}
 		////////////////////////////////////////////////
 		// UNCOMMENT THIS TO DEBUG USERINFO RESPONSE //
-		// readBody, err := ioutil.ReadAll(response.Body)
+		// readBody, err := io.ReadAll(response.Body)
 		// if err != nil {
 		// 	panic(err)
 		// }
-		// newBody := ioutil.NopCloser(bytes.NewBuffer(readBody))
+		// newBody := io.NopCloser(bytes.NewBuffer(readBody))
 		// response.Body = newBody
 		// if string(readBody) != "" {
 		// 	fmt.Printf("BODY : %q \n", readBody)
@@ -126,6 +126,15 @@ func (m Manager) HandleOAuth2Callback() http.Handler {
 			user.Roles[key] = strings.TrimPrefix(strings.Split(role, ",")[0], "CN=")
 		}
 
+		// Filter only allowed roles to reduce the cookie size
+		var filteredRoles []string
+		for _, role := range user.Roles {
+			if role == AdminRole || role == AnimatorRole {
+				filteredRoles = append(filteredRoles, role)
+			}
+		}
+		user.Roles = filteredRoles
+
 		// Check if user has the correct role
 		err = checkUserHasRole(TokenData{User: user}, []string{AdminRole, AnimatorRole})
 
@@ -145,7 +154,7 @@ func (m Manager) HandleOAuth2Callback() http.Handler {
 		}
 		tokenData := TokenData{User: user, XSRFToken: xsrfToken}
 		tokens.CreateCookie(tokenData, m.Hostname, authTokenKey, 24*time.Hour, w)
-		// Log the connexion
+		// Log the connection
 		log.Printf("| %v (%v %v) | Login success | %v", user.Login, user.Name, user.Surname, req.RemoteAddr)
 		// Redirect
 		http.Redirect(w, r, "/", http.StatusFound)
diff --git a/internal/rootmux/rootmux_test.go b/internal/rootmux/rootmux_test.go
index 1258e60..15425b9 100644
--- a/internal/rootmux/rootmux_test.go
+++ b/internal/rootmux/rootmux_test.go
@@ -247,7 +247,7 @@ func animatorTests(t *testing.T) {
 		do("GET", "/api/common/monthlyReport?year=2021&month=1", noH, "", http.StatusOK, `{"year":2021,"month":1,"subject":"[Ecolyo] Votre bilan de décembre 2020","info":"Informations du mois","image":"imagebase64","newsTitle":"","newsContent":"","question":"","link":""`)
 
 		// Try to get SGE consents (must fail)
-		do("GET", "/api/admin/consent?limit=50&page=0", xsrfHeader, "", http.StatusForbidden, "no user role among [ANIMATORS OTHER_GROUP] is in allowed roles ([ADMINS])")
+		do("GET", "/api/admin/consent?limit=50&page=0", xsrfHeader, "", http.StatusForbidden, "no user role among [ANIMATORS] is in allowed roles ([ADMINS])")
 	}
 	// Try to login (must pass)
 	do("GET", "/OAuth2Login", noH, "", http.StatusOK, "")
diff --git a/internal/tokens/tokens_test.go b/internal/tokens/tokens_test.go
index 66a24e0..66e4b5c 100644
--- a/internal/tokens/tokens_test.go
+++ b/internal/tokens/tokens_test.go
@@ -1,7 +1,6 @@
 package tokens
 
 import (
-	"fmt"
 	"testing"
 	"time"
 
@@ -13,10 +12,6 @@ type user struct {
 	Password string
 }
 
-func (u user) String() string {
-	return fmt.Sprintf("Login: %v, Password: %v", u.Login, u.Password)
-}
-
 func TestManagerCreateTokenUnStoreData(t *testing.T) {
 	key, _ := common.GenerateRandomBytes(32)
 	key2, _ := common.GenerateRandomBytes(32)
-- 
GitLab


From 97ccbfa550df46b08dab5ce27bcdbf32c95eb32d Mon Sep 17 00:00:00 2001
From: Renovate Bot <renovatebot@exemple.com>
Date: Wed, 13 Nov 2024 03:18:20 +0000
Subject: [PATCH 07/16] fix(deps): update module gorm.io/driver/mysql to v1.5.7

---
 go.mod | 4 ++--
 go.sum | 4 ++++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/go.mod b/go.mod
index 1476d8b..a71fb95 100644
--- a/go.mod
+++ b/go.mod
@@ -6,9 +6,9 @@ require (
 	github.com/go-chi/chi/v5 v5.0.11
 	github.com/google/uuid v1.5.0
 	golang.org/x/oauth2 v0.16.0
-	gorm.io/driver/mysql v1.5.2
+	gorm.io/driver/mysql v1.5.7
 	gorm.io/driver/sqlite v1.5.4
-	gorm.io/gorm v1.25.5
+	gorm.io/gorm v1.25.7
 )
 
 require (
diff --git a/go.sum b/go.sum
index b71a4a2..335505f 100644
--- a/go.sum
+++ b/go.sum
@@ -52,8 +52,12 @@ google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7
 google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
 gorm.io/driver/mysql v1.5.2 h1:QC2HRskSE75wBuOxe0+iCkyJZ+RqpudsQtqkp+IMuXs=
 gorm.io/driver/mysql v1.5.2/go.mod h1:pQLhh1Ut/WUAySdTHwBpBv6+JKcj+ua4ZFx1QQTBzb8=
+gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
+gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
 gorm.io/driver/sqlite v1.5.4 h1:IqXwXi8M/ZlPzH/947tn5uik3aYQslP9BVveoax0nV0=
 gorm.io/driver/sqlite v1.5.4/go.mod h1:qxAuCol+2r6PannQDpOP1FP6ag3mKi4esLnB/jHed+4=
 gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
 gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls=
 gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
+gorm.io/gorm v1.25.7 h1:VsD6acwRjz2zFxGO50gPO6AkNs7KKnvfzUjHQhZDz/A=
+gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
-- 
GitLab


From 06ced2415a2dc5dce6b8335d137f8177367f238f Mon Sep 17 00:00:00 2001
From: Renovate Bot <renovatebot@exemple.com>
Date: Wed, 13 Nov 2024 03:18:29 +0000
Subject: [PATCH 08/16] chore(deps): update alpine docker tag to v3.20.3

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 63a57bb..8af339c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,7 +25,7 @@ stages:
   - deploy
 
 import-convert-assets:
-  image: alpine:3.16.2
+  image: alpine:3.20.3
   stage: import-convert-assets
   before_script:
     - apk add inkscape curl
-- 
GitLab


From 61a13a0703d6850c0fbc6f860c823018f1ba3ea9 Mon Sep 17 00:00:00 2001
From: Renovate Bot <renovatebot@exemple.com>
Date: Wed, 13 Nov 2024 03:18:31 +0000
Subject: [PATCH 09/16] chore(deps): update curlimages/curl docker tag to
 v8.11.0

---
 Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dockerfile b/Dockerfile
index f4efa81..a79e9e9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -48,7 +48,7 @@ RUN chown -Rf "${UID}" ./*
 ##############################
 # STEP 2 build a small image #
 ##############################
-FROM curlimages/curl:8.00.1
+FROM curlimages/curl:8.11.0
 
 WORKDIR /app
 
-- 
GitLab


From b8eba0a1e5a69ca47a62a5f61bb6024cfe45919b Mon Sep 17 00:00:00 2001
From: Renovate Bot <renovatebot@exemple.com>
Date: Wed, 13 Nov 2024 03:18:35 +0000
Subject: [PATCH 10/16] fix(deps): update module github.com/go-chi/chi/v5 to
 v5.1.0

---
 go.mod | 2 +-
 go.sum | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/go.mod b/go.mod
index 1476d8b..ca266dc 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module forge.grandlyon.com/web-et-numerique/factory/llle_project/backoffice-serv
 go 1.18
 
 require (
-	github.com/go-chi/chi/v5 v5.0.11
+	github.com/go-chi/chi/v5 v5.1.0
 	github.com/google/uuid v1.5.0
 	golang.org/x/oauth2 v0.16.0
 	gorm.io/driver/mysql v1.5.2
diff --git a/go.sum b/go.sum
index b71a4a2..531d086 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,7 @@
 github.com/go-chi/chi/v5 v5.0.11 h1:BnpYbFZ3T3S1WMpD79r7R5ThWX40TaFB7L31Y8xqSwA=
 github.com/go-chi/chi/v5 v5.0.11/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
+github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw=
+github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
 github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
 github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-- 
GitLab


From aae2caa4555da9f4c7fe54e091465c202516628b Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Mon, 9 Dec 2024 10:53:58 +0000
Subject: [PATCH 11/16] feat: Revert 3 years consent for enedis

---
 internal/models/sgeConsent.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/internal/models/sgeConsent.go b/internal/models/sgeConsent.go
index 8df860c..e382ef0 100644
--- a/internal/models/sgeConsent.go
+++ b/internal/models/sgeConsent.go
@@ -81,7 +81,7 @@ func (dh *DataHandler) PostSgeConsent(w http.ResponseWriter, r *http.Request) {
 		log.Println(err.Error())
 		return
 	}
-	consent.EndDate = time.Now().AddDate(3, 0, 0)
+	consent.EndDate = time.Now().AddDate(1, 0, 0)
 
 	// Create a consent in SQL
 	err = dh.sqlClient.Create(&consent).Error
-- 
GitLab


From 68d363be21b5f59f64330be8d39925bcc4c4d18e Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Thu, 12 Dec 2024 17:14:04 +0100
Subject: [PATCH 12/16] Added global variable to condition GRDF call

---
 .env.template                              |  1 +
 .gitlab-ci.yml                             |  2 ++
 k8s/secrets/ecolyo-agent-server-config.yml |  1 +
 main.go                                    | 41 ++++++++++++----------
 4 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/.env.template b/.env.template
index 05ab3a8..3990d02 100644
--- a/.env.template
+++ b/.env.template
@@ -22,5 +22,6 @@ DATABASE_NAME
 
 BO_API_TOKEN
 
+FETCH_GRDF_TOKEN=true
 GRDF_CLIENT_ID
 GRDF_CLIENT_SECRET
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8af339c..a21ef17 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -142,6 +142,7 @@ deploy_rec:
     - sed -i "s/{{CLIENT_ID}}/$REC_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{CLIENT_SECRET}}/$REC_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{BO_API_TOKEN}}/$REC_BO_API_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
+    - sed -i "s/{{FETCH_GRDF_TOKEN}}/$FETCH_GRDF_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_ID}}/$GRDF_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_SECRET}}/$GRDF_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{HOSTNAME}}/ecolyo-agent-rec.apps.grandlyon.com/g" ./k8s/secrets/ecolyo-agent-server-config.yml
@@ -174,6 +175,7 @@ deploy_prod:
     - sed -i "s/{{CLIENT_ID}}/$PROD_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{CLIENT_SECRET}}/$PROD_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{BO_API_TOKEN}}/$PROD_BO_API_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
+    - sed -i "s/{{FETCH_GRDF_TOKEN}}/$FETCH_GRDF_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_ID}}/$GRDF_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_SECRET}}/$GRDF_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{HOSTNAME}}/ecolyo-agent.apps.grandlyon.com/g" ./k8s/secrets/ecolyo-agent-server-config.yml
diff --git a/k8s/secrets/ecolyo-agent-server-config.yml b/k8s/secrets/ecolyo-agent-server-config.yml
index 8beaebc..3f09d2b 100644
--- a/k8s/secrets/ecolyo-agent-server-config.yml
+++ b/k8s/secrets/ecolyo-agent-server-config.yml
@@ -20,6 +20,7 @@ stringData:
   BO_API_TOKEN: {{BO_API_TOKEN}}
   TOKEN_URL: {{TOKEN_URL}}
   USERINFO_URL: {{USERINFO_URL}}
+  FETCH_GRDF_TOKEN: {{FETCH_GRDF_TOKEN}}
   GRDF_CLIENT_ID: {{GRDF_CLIENT_ID}}
   GRDF_CLIENT_SECRET: {{GRDF_CLIENT_SECRET}}
 type: Opaque
diff --git a/main.go b/main.go
index 2ce10ee..1ff1d18 100644
--- a/main.go
+++ b/main.go
@@ -16,9 +16,10 @@ import (
 )
 
 var (
-	httpsPort  = common.IntValueFromEnv("HTTPS_PORT", 443)     // HTTPS port to serve on
-	debugMode  = common.BoolValueFromEnv("DEBUG_MODE", false)  // Debug mode, disable Secure attribute for cookies
-	mockOAuth2 = common.BoolValueFromEnv("MOCK_OAUTH2", false) // Enable mock OAuth2 login
+	httpsPort      = common.IntValueFromEnv("HTTPS_PORT", 443)         // HTTPS port to serve on
+	debugMode      = common.BoolValueFromEnv("DEBUG_MODE", false)      // Debug mode, disable Secure attribute for cookies
+	mockOAuth2     = common.BoolValueFromEnv("MOCK_OAUTH2", false)     // Enable mock OAuth2 login
+	fetchGrdfToken = common.BoolValueFromEnv("FETCH_GRDF_TOKEN", true) // HTTPS port to serve on
 )
 
 func main() {
@@ -41,23 +42,27 @@ func main() {
 		fmt.Println("Mock OAuth2 server Listening on: http://localhost" + mockOAuth2Port)
 	}
 
-	// Call the function immediately when the server starts
-	models.FetchGRDFAuthAPI()
-
-	// then call GRDF auth api every two hours
-	ticker := time.NewTicker(time.Hour * 2)
 	quit := make(chan struct{})
-	go func() {
-		for {
-			select {
-			case <-ticker.C:
-				models.FetchGRDFAuthAPI()
-			case <-quit:
-				ticker.Stop()
-				return
+
+	// If needed, we shall request a new GRDF token every 2-hours
+	if fetchGrdfToken {
+		// Call the function immediately when the server starts
+		models.FetchGRDFAuthAPI()
+
+		// then call GRDF auth api every two hours
+		ticker := time.NewTicker(time.Hour * 2)
+		go func() {
+			for {
+				select {
+				case <-ticker.C:
+					models.FetchGRDFAuthAPI()
+				case <-quit:
+					ticker.Stop()
+					return
+				}
 			}
-		}
-	}()
+		}()
+	}
 
 	// Deletes outdated consents every 24h
 	dh := models.NewDataHandler()
-- 
GitLab


From e16783cc4c36352295decea0751a518eb041a717 Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Fri, 13 Dec 2024 10:43:04 +0100
Subject: [PATCH 13/16] rec and prod behaviors

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a21ef17..b51bcd5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -142,7 +142,7 @@ deploy_rec:
     - sed -i "s/{{CLIENT_ID}}/$REC_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{CLIENT_SECRET}}/$REC_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{BO_API_TOKEN}}/$REC_BO_API_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
-    - sed -i "s/{{FETCH_GRDF_TOKEN}}/$FETCH_GRDF_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
+    - sed -i "s/{{FETCH_GRDF_TOKEN}}/$REC_FETCH_GRDF_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_ID}}/$GRDF_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_SECRET}}/$GRDF_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{HOSTNAME}}/ecolyo-agent-rec.apps.grandlyon.com/g" ./k8s/secrets/ecolyo-agent-server-config.yml
@@ -175,7 +175,7 @@ deploy_prod:
     - sed -i "s/{{CLIENT_ID}}/$PROD_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{CLIENT_SECRET}}/$PROD_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{BO_API_TOKEN}}/$PROD_BO_API_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
-    - sed -i "s/{{FETCH_GRDF_TOKEN}}/$FETCH_GRDF_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
+    - sed -i "s/{{FETCH_GRDF_TOKEN}}/$PROD_FETCH_GRDF_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_ID}}/$GRDF_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_SECRET}}/$GRDF_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{HOSTNAME}}/ecolyo-agent.apps.grandlyon.com/g" ./k8s/secrets/ecolyo-agent-server-config.yml
-- 
GitLab


From f2422f28517a771d99dc3226edfc069e1d6e1251 Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Fri, 13 Dec 2024 09:56:21 +0000
Subject: [PATCH 14/16] feat: Add the ability to deactivate GRDF token

---
 .env.template                              |  1 +
 .gitlab-ci.yml                             |  2 ++
 k8s/secrets/ecolyo-agent-server-config.yml |  1 +
 main.go                                    | 41 ++++++++++++----------
 4 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/.env.template b/.env.template
index 05ab3a8..3990d02 100644
--- a/.env.template
+++ b/.env.template
@@ -22,5 +22,6 @@ DATABASE_NAME
 
 BO_API_TOKEN
 
+FETCH_GRDF_TOKEN=true
 GRDF_CLIENT_ID
 GRDF_CLIENT_SECRET
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8af339c..b51bcd5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -142,6 +142,7 @@ deploy_rec:
     - sed -i "s/{{CLIENT_ID}}/$REC_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{CLIENT_SECRET}}/$REC_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{BO_API_TOKEN}}/$REC_BO_API_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
+    - sed -i "s/{{FETCH_GRDF_TOKEN}}/$REC_FETCH_GRDF_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_ID}}/$GRDF_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_SECRET}}/$GRDF_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{HOSTNAME}}/ecolyo-agent-rec.apps.grandlyon.com/g" ./k8s/secrets/ecolyo-agent-server-config.yml
@@ -174,6 +175,7 @@ deploy_prod:
     - sed -i "s/{{CLIENT_ID}}/$PROD_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{CLIENT_SECRET}}/$PROD_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{BO_API_TOKEN}}/$PROD_BO_API_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
+    - sed -i "s/{{FETCH_GRDF_TOKEN}}/$PROD_FETCH_GRDF_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_ID}}/$GRDF_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_SECRET}}/$GRDF_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{HOSTNAME}}/ecolyo-agent.apps.grandlyon.com/g" ./k8s/secrets/ecolyo-agent-server-config.yml
diff --git a/k8s/secrets/ecolyo-agent-server-config.yml b/k8s/secrets/ecolyo-agent-server-config.yml
index 8beaebc..3f09d2b 100644
--- a/k8s/secrets/ecolyo-agent-server-config.yml
+++ b/k8s/secrets/ecolyo-agent-server-config.yml
@@ -20,6 +20,7 @@ stringData:
   BO_API_TOKEN: {{BO_API_TOKEN}}
   TOKEN_URL: {{TOKEN_URL}}
   USERINFO_URL: {{USERINFO_URL}}
+  FETCH_GRDF_TOKEN: {{FETCH_GRDF_TOKEN}}
   GRDF_CLIENT_ID: {{GRDF_CLIENT_ID}}
   GRDF_CLIENT_SECRET: {{GRDF_CLIENT_SECRET}}
 type: Opaque
diff --git a/main.go b/main.go
index 2ce10ee..1ff1d18 100644
--- a/main.go
+++ b/main.go
@@ -16,9 +16,10 @@ import (
 )
 
 var (
-	httpsPort  = common.IntValueFromEnv("HTTPS_PORT", 443)     // HTTPS port to serve on
-	debugMode  = common.BoolValueFromEnv("DEBUG_MODE", false)  // Debug mode, disable Secure attribute for cookies
-	mockOAuth2 = common.BoolValueFromEnv("MOCK_OAUTH2", false) // Enable mock OAuth2 login
+	httpsPort      = common.IntValueFromEnv("HTTPS_PORT", 443)         // HTTPS port to serve on
+	debugMode      = common.BoolValueFromEnv("DEBUG_MODE", false)      // Debug mode, disable Secure attribute for cookies
+	mockOAuth2     = common.BoolValueFromEnv("MOCK_OAUTH2", false)     // Enable mock OAuth2 login
+	fetchGrdfToken = common.BoolValueFromEnv("FETCH_GRDF_TOKEN", true) // HTTPS port to serve on
 )
 
 func main() {
@@ -41,23 +42,27 @@ func main() {
 		fmt.Println("Mock OAuth2 server Listening on: http://localhost" + mockOAuth2Port)
 	}
 
-	// Call the function immediately when the server starts
-	models.FetchGRDFAuthAPI()
-
-	// then call GRDF auth api every two hours
-	ticker := time.NewTicker(time.Hour * 2)
 	quit := make(chan struct{})
-	go func() {
-		for {
-			select {
-			case <-ticker.C:
-				models.FetchGRDFAuthAPI()
-			case <-quit:
-				ticker.Stop()
-				return
+
+	// If needed, we shall request a new GRDF token every 2-hours
+	if fetchGrdfToken {
+		// Call the function immediately when the server starts
+		models.FetchGRDFAuthAPI()
+
+		// then call GRDF auth api every two hours
+		ticker := time.NewTicker(time.Hour * 2)
+		go func() {
+			for {
+				select {
+				case <-ticker.C:
+					models.FetchGRDFAuthAPI()
+				case <-quit:
+					ticker.Stop()
+					return
+				}
 			}
-		}
-	}()
+		}()
+	}
 
 	// Deletes outdated consents every 24h
 	dh := models.NewDataHandler()
-- 
GitLab


From 6c39cd99eaff5a8e5833fa346640432d21986ad3 Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Fri, 13 Dec 2024 11:22:27 +0100
Subject: [PATCH 15/16] feat: Upadted the CI/CD to handle boolean

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b51bcd5..2513364 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -142,7 +142,7 @@ deploy_rec:
     - sed -i "s/{{CLIENT_ID}}/$REC_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{CLIENT_SECRET}}/$REC_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{BO_API_TOKEN}}/$REC_BO_API_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
-    - sed -i "s/{{FETCH_GRDF_TOKEN}}/$REC_FETCH_GRDF_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
+    - sed -i "s/{{FETCH_GRDF_TOKEN}}/\"$REC_FETCH_GRDF_TOKEN\"/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_ID}}/$GRDF_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_SECRET}}/$GRDF_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{HOSTNAME}}/ecolyo-agent-rec.apps.grandlyon.com/g" ./k8s/secrets/ecolyo-agent-server-config.yml
@@ -175,7 +175,7 @@ deploy_prod:
     - sed -i "s/{{CLIENT_ID}}/$PROD_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{CLIENT_SECRET}}/$PROD_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{BO_API_TOKEN}}/$PROD_BO_API_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
-    - sed -i "s/{{FETCH_GRDF_TOKEN}}/$PROD_FETCH_GRDF_TOKEN/" ./k8s/secrets/ecolyo-agent-server-config.yml
+    - sed -i "s/{{FETCH_GRDF_TOKEN}}/\"$PROD_FETCH_GRDF_TOKEN\"/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_ID}}/$GRDF_CLIENT_ID/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{GRDF_CLIENT_SECRET}}/$GRDF_CLIENT_SECRET/" ./k8s/secrets/ecolyo-agent-server-config.yml
     - sed -i "s/{{HOSTNAME}}/ecolyo-agent.apps.grandlyon.com/g" ./k8s/secrets/ecolyo-agent-server-config.yml
-- 
GitLab


From ed815a67bd7aada0323fe7a76e59f431f83cf96a Mon Sep 17 00:00:00 2001
From: Pierre Ecarlat <pecarlat@grandlyon.com>
Date: Wed, 12 Feb 2025 15:26:51 +0000
Subject: [PATCH 16/16] feat: remove search consents limit

---
 internal/common/common.go | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/internal/common/common.go b/internal/common/common.go
index 7030f4e..d818a5f 100644
--- a/internal/common/common.go
+++ b/internal/common/common.go
@@ -203,12 +203,6 @@ func PageLimitFromRequest(r *http.Request) (page int, limit int, err error) {
 	if page < 0 {
 		page = 0
 	}
-	switch {
-	case limit > 100:
-		limit = 100
-	case limit < 10:
-		limit = 10
-	}
 	return page, limit, nil
 }
 
-- 
GitLab