From 3d3407dedf7d492a85b1f80eed736cf4ab65025c Mon Sep 17 00:00:00 2001 From: NathanFallet Date: Sun, 14 Apr 2024 16:51:18 +0200 Subject: [PATCH] feat: upload files --- groupeminaste-backend/build.gradle.kts | 2 +- .../controllers/files/FilesController.kt | 36 +++++++++++++ .../controllers/files/FilesRouter.kt | 21 ++++++++ .../controllers/files/IFilesController.kt | 21 ++++++++ .../controllers/web/IWebController.kt | 5 ++ .../controllers/web/WebController.kt | 8 +-- .../groupeminaste/plugins/Koin.kt | 40 +++++++++++++++ .../groupeminaste/plugins/Routing.kt | 2 + .../usecases/files/IListFilesUseCase.kt | 6 +++ .../usecases/files/IUploadFileUseCase.kt | 7 +++ .../usecases/files/ListFilesUseCase.kt | 13 +++++ .../usecases/files/UploadFileUseCase.kt | 22 ++++++++ .../web/GetAdminMenuForCallUseCase.kt | 2 +- .../src/commonMain/resources/application.conf | 11 ++++ .../resources/application.test.conf | 7 +++ .../resources/i18n/Messages_en.properties | 2 + .../resources/templates/admin/files/list.ftl | 51 +++++++++++++++++++ helm/groupeminaste/templates/deployment.yaml | 36 +++++++++++++ helm/groupeminaste/templates/secret.yaml | 4 ++ helm/groupeminaste/values.yaml | 6 +++ 20 files changed, 297 insertions(+), 5 deletions(-) create mode 100644 groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/FilesController.kt create mode 100644 groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/FilesRouter.kt create mode 100644 groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/IFilesController.kt create mode 100644 groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/IListFilesUseCase.kt create mode 100644 groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/IUploadFileUseCase.kt create mode 100644 groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/ListFilesUseCase.kt create mode 100644 groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/UploadFileUseCase.kt create mode 100644 groupeminaste-backend/src/commonMain/resources/templates/admin/files/list.ftl diff --git a/groupeminaste-backend/build.gradle.kts b/groupeminaste-backend/build.gradle.kts index 651c47d..76f3d95 100644 --- a/groupeminaste-backend/build.gradle.kts +++ b/groupeminaste-backend/build.gradle.kts @@ -90,7 +90,7 @@ kotlin { implementation("me.nathanfallet.ktorx:ktor-routers-admin:$ktorxVersion") implementation("me.nathanfallet.ktorx:ktor-routers-admin-locale:$ktorxVersion") implementation("me.nathanfallet.ktorx:ktor-sentry:$ktorxVersion") - implementation("me.nathanfallet.cloudflare:cloudflare-api-client:4.2.3") + implementation("me.nathanfallet.cloudflare:cloudflare-api-client:4.3.0-alpha1") implementation("com.mysql:mysql-connector-j:8.0.33") implementation("at.favre.lib:bcrypt:0.9.0") diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/FilesController.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/FilesController.kt new file mode 100644 index 0000000..978ad2c --- /dev/null +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/FilesController.kt @@ -0,0 +1,36 @@ +package me.nathanfallet.groupeminaste.controllers.files + +import io.ktor.http.* +import io.ktor.http.content.* +import io.ktor.server.application.* +import io.ktor.server.request.* +import kotlinx.datetime.Clock +import me.nathanfallet.cloudflare.models.r2.Object +import me.nathanfallet.groupeminaste.usecases.files.IListFilesUseCase +import me.nathanfallet.groupeminaste.usecases.files.IUploadFileUseCase +import me.nathanfallet.ktorx.models.responses.RedirectResponse + +class FilesController( + private val listFilesUseCase: IListFilesUseCase, + private val uploadFileUseCase: IUploadFileUseCase, +) : IFilesController { + + override suspend fun list(): List = + emptyList() //listFilesUseCase() // To get fixed in cloudflare-api-client + + override suspend fun upload(call: ApplicationCall): RedirectResponse { + val multipart = call.receiveMultipart() + multipart.forEachPart { part -> + if (part is PartData.FileItem) { + uploadFileUseCase( + part.originalFileName ?: "file-${Clock.System.now()}", + part.streamProvider(), + part.contentType ?: ContentType.Application.OctetStream + ) + } + part.dispose() + } + return RedirectResponse("files") + } + +} diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/FilesRouter.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/FilesRouter.kt new file mode 100644 index 0000000..a15c8df --- /dev/null +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/FilesRouter.kt @@ -0,0 +1,21 @@ +package me.nathanfallet.groupeminaste.controllers.files + +import me.nathanfallet.groupeminaste.controllers.models.AdminUnitRouter +import me.nathanfallet.groupeminaste.usecases.web.IGetAdminMenuForCallUseCase +import me.nathanfallet.ktorx.usecases.localization.IGetLocaleForCallUseCase +import me.nathanfallet.usecases.localization.ITranslateUseCase + +class FilesRouter( + controller: IFilesController, + getLocaleForCallUseCase: IGetLocaleForCallUseCase, + translateUseCase: ITranslateUseCase, + getAdminMenuForCallUseCase: IGetAdminMenuForCallUseCase, +) : AdminUnitRouter( + controller, + IFilesController::class, + getLocaleForCallUseCase, + translateUseCase, + getAdminMenuForCallUseCase, + route = "files" +) + diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/IFilesController.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/IFilesController.kt new file mode 100644 index 0000000..8c4cb45 --- /dev/null +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/files/IFilesController.kt @@ -0,0 +1,21 @@ +package me.nathanfallet.groupeminaste.controllers.files + +import io.ktor.server.application.* +import me.nathanfallet.cloudflare.models.r2.Object +import me.nathanfallet.ktorx.controllers.IUnitController +import me.nathanfallet.ktorx.models.annotations.AdminTemplateMapping +import me.nathanfallet.ktorx.models.annotations.ListModelPath +import me.nathanfallet.ktorx.models.annotations.Path +import me.nathanfallet.ktorx.models.responses.RedirectResponse + +interface IFilesController : IUnitController { + + @AdminTemplateMapping("admin/files/list.ftl") + @ListModelPath + suspend fun list(): List + + @AdminTemplateMapping("admin/files/list.ftl") + @Path("POST", "/") + suspend fun upload(call: ApplicationCall): RedirectResponse + +} diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/web/IWebController.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/web/IWebController.kt index 61a5598..0d32602 100644 --- a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/web/IWebController.kt +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/web/IWebController.kt @@ -3,6 +3,7 @@ package me.nathanfallet.groupeminaste.controllers.web import me.nathanfallet.groupeminaste.models.application.GetInTouchPayload import me.nathanfallet.ktorx.controllers.IUnitController import me.nathanfallet.ktorx.models.annotations.Path +import me.nathanfallet.ktorx.models.annotations.PathParameter import me.nathanfallet.ktorx.models.annotations.Payload import me.nathanfallet.ktorx.models.annotations.TemplateMapping import me.nathanfallet.ktorx.models.responses.RedirectResponse @@ -21,4 +22,8 @@ interface IWebController : IUnitController { @Path("POST", "/getintouch") suspend fun getInTouch(@Payload payload: GetInTouchPayload) + @TemplateMapping("public/home.ftl") + @Path("GET", "/infos/{file}") + suspend fun infos(@PathParameter file: String): RedirectResponse + } diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/web/WebController.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/web/WebController.kt index 958ebac..4749538 100644 --- a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/web/WebController.kt +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/controllers/web/WebController.kt @@ -26,8 +26,10 @@ class WebController( "https://discord.gg/PeTpuCWnqs", true ) - override suspend fun getInTouch(payload: GetInTouchPayload) { - getInTouchUseCase(payload) - } + override suspend fun getInTouch(payload: GetInTouchPayload) = getInTouchUseCase(payload) + + override suspend fun infos(file: String) = RedirectResponse( + "https://cdn.groupe-minaste.org/$file", true + ) } diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/plugins/Koin.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/plugins/Koin.kt index 4f9be19..b934cb9 100644 --- a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/plugins/Koin.kt +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/plugins/Koin.kt @@ -1,12 +1,19 @@ package me.nathanfallet.groupeminaste.plugins import io.ktor.server.application.* +import me.nathanfallet.cloudflare.client.CloudflareClient +import me.nathanfallet.cloudflare.client.ICloudflareClient +import me.nathanfallet.cloudflare.r2.IR2Client +import me.nathanfallet.cloudflare.r2.R2Client import me.nathanfallet.groupeminaste.controllers.auth.AuthController import me.nathanfallet.groupeminaste.controllers.auth.AuthRouter import me.nathanfallet.groupeminaste.controllers.auth.IAuthController import me.nathanfallet.groupeminaste.controllers.dashboard.DashboardController import me.nathanfallet.groupeminaste.controllers.dashboard.DashboardRouter import me.nathanfallet.groupeminaste.controllers.dashboard.IDashboardController +import me.nathanfallet.groupeminaste.controllers.files.FilesController +import me.nathanfallet.groupeminaste.controllers.files.FilesRouter +import me.nathanfallet.groupeminaste.controllers.files.IFilesController import me.nathanfallet.groupeminaste.controllers.projects.* import me.nathanfallet.groupeminaste.controllers.web.IWebController import me.nathanfallet.groupeminaste.controllers.web.WebController @@ -31,6 +38,10 @@ import me.nathanfallet.groupeminaste.services.jwt.IJWTService import me.nathanfallet.groupeminaste.services.jwt.JWTService import me.nathanfallet.groupeminaste.usecases.application.* import me.nathanfallet.groupeminaste.usecases.auth.* +import me.nathanfallet.groupeminaste.usecases.files.IListFilesUseCase +import me.nathanfallet.groupeminaste.usecases.files.IUploadFileUseCase +import me.nathanfallet.groupeminaste.usecases.files.ListFilesUseCase +import me.nathanfallet.groupeminaste.usecases.files.UploadFileUseCase import me.nathanfallet.groupeminaste.usecases.users.GetUserForCallUseCase import me.nathanfallet.groupeminaste.usecases.web.GetAdminMenuForCallUseCase import me.nathanfallet.groupeminaste.usecases.web.IGetAdminMenuForCallUseCase @@ -101,6 +112,18 @@ fun Application.configureKoin() { environment.config.property("discord.getInTouch").getString() ) } + single { + CloudflareClient( + environment.config.property("cloudflare.token").getString() + ) + } + single { + R2Client( + environment.config.property("cloudflare.id").getString(), + environment.config.property("cloudflare.secret").getString(), + environment.config.property("cloudflare.account").getString() + ) + } } val repositoryModule = module { // Application @@ -130,6 +153,21 @@ fun Application.configureKoin() { single { ClearSessionForCallUseCase() } single { LoginUseCase(get(), get()) } + // Files + single { + ListFilesUseCase( + get(), + environment.config.property("cloudflare.bucket").getString() + ) + } + single { + UploadFileUseCase( + get(), + get(), + environment.config.property("cloudflare.bucket").getString() + ) + } + // Web single { GetAdminMenuForCallUseCase(get(), get(), get()) } @@ -185,6 +223,7 @@ fun Application.configureKoin() { ) } single { DashboardController() } + single { FilesController(get(), get()) } // Auth single { AuthController(get(), get(), get()) } @@ -216,6 +255,7 @@ fun Application.configureKoin() { single { WebRouter(get(), get()) } single { AuthRouter(get(), get()) } single { DashboardRouter(get(), get(), get(), get()) } + single { FilesRouter(get(), get(), get(), get()) } single { ProjectsRouter(get(), get(), get(), get()) } single { ProjectLinksRouter(get(), get(), get(), get(), get()) } } diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/plugins/Routing.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/plugins/Routing.kt index 8825f62..5a19af7 100644 --- a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/plugins/Routing.kt +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/plugins/Routing.kt @@ -8,6 +8,7 @@ import io.swagger.v3.oas.models.OpenAPI import io.swagger.v3.oas.models.servers.Server import me.nathanfallet.groupeminaste.controllers.auth.AuthRouter import me.nathanfallet.groupeminaste.controllers.dashboard.DashboardRouter +import me.nathanfallet.groupeminaste.controllers.files.FilesRouter import me.nathanfallet.groupeminaste.controllers.projects.ProjectLinksRouter import me.nathanfallet.groupeminaste.controllers.projects.ProjectsRouter import me.nathanfallet.groupeminaste.controllers.web.WebRouter @@ -34,6 +35,7 @@ fun Application.configureRouting() { get(), get(), get(), + get(), get(), get(), OpenAPIRouter(), // OpenAPI should be last diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/IListFilesUseCase.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/IListFilesUseCase.kt new file mode 100644 index 0000000..2b94320 --- /dev/null +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/IListFilesUseCase.kt @@ -0,0 +1,6 @@ +package me.nathanfallet.groupeminaste.usecases.files + +import me.nathanfallet.cloudflare.models.r2.Object +import me.nathanfallet.usecases.base.IUnitSuspendUseCase + +interface IListFilesUseCase : IUnitSuspendUseCase> diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/IUploadFileUseCase.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/IUploadFileUseCase.kt new file mode 100644 index 0000000..40b3658 --- /dev/null +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/IUploadFileUseCase.kt @@ -0,0 +1,7 @@ +package me.nathanfallet.groupeminaste.usecases.files + +import io.ktor.http.* +import me.nathanfallet.cloudflare.models.r2.InputStream +import me.nathanfallet.usecases.base.ITripleSuspendUseCase + +interface IUploadFileUseCase : ITripleSuspendUseCase diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/ListFilesUseCase.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/ListFilesUseCase.kt new file mode 100644 index 0000000..e71654e --- /dev/null +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/ListFilesUseCase.kt @@ -0,0 +1,13 @@ +package me.nathanfallet.groupeminaste.usecases.files + +import me.nathanfallet.cloudflare.models.r2.Object +import me.nathanfallet.cloudflare.r2.IR2Client + +class ListFilesUseCase( + private val r2Client: IR2Client, + private val bucket: String, +) : IListFilesUseCase { + + override suspend fun invoke(): List = r2Client.listObjectsV2(bucket).contents + +} diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/UploadFileUseCase.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/UploadFileUseCase.kt new file mode 100644 index 0000000..07d84a6 --- /dev/null +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/files/UploadFileUseCase.kt @@ -0,0 +1,22 @@ +package me.nathanfallet.groupeminaste.usecases.files + +import io.ktor.http.* +import me.nathanfallet.cloudflare.client.ICloudflareClient +import me.nathanfallet.cloudflare.models.r2.InputStream +import me.nathanfallet.cloudflare.r2.IR2Client + +class UploadFileUseCase( + private val r2Client: IR2Client, + private val cloudflareClient: ICloudflareClient, + private val bucket: String, +) : IUploadFileUseCase { + + override suspend fun invoke(input1: String, input2: InputStream, input3: ContentType) { + r2Client.putObject(bucket, input1, input2, input3) + cloudflareClient.zones.purgeCache( + "72356ace5c6fddc79486e6aedab34eb7", + listOf("https://cdn.groupe-minaste.org/${input1.removePrefix("/")}") + ) + } + +} diff --git a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/web/GetAdminMenuForCallUseCase.kt b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/web/GetAdminMenuForCallUseCase.kt index 2f9ce30..98154d4 100644 --- a/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/web/GetAdminMenuForCallUseCase.kt +++ b/groupeminaste-backend/src/commonMain/kotlin/me/nathanfallet/groupeminaste/usecases/web/GetAdminMenuForCallUseCase.kt @@ -16,7 +16,7 @@ class GetAdminMenuForCallUseCase( override suspend fun invoke(input: ApplicationCall): List { requireUserForCallUseCase(input) as User val locale = getLocaleForCallUseCase(input) - return listOf("dashboard", "projects") + return listOf("dashboard", "projects", "files") .map { WebMenu( it, diff --git a/groupeminaste-backend/src/commonMain/resources/application.conf b/groupeminaste-backend/src/commonMain/resources/application.conf index 012a325..bf3b506 100644 --- a/groupeminaste-backend/src/commonMain/resources/application.conf +++ b/groupeminaste-backend/src/commonMain/resources/application.conf @@ -35,3 +35,14 @@ discord { getInTouch = "" getInTouch = ${?DISCORD_GET_IN_TOUCH} } +cloudflare { + account = "" + token = "" + id = "" + secret = "" + bucket = "groupeminaste" + account = ${?CLOUDFLARE_ACCOUNT} + token = ${?CLOUDFLARE_TOKEN} + id = ${?CLOUDFLARE_ID} + secret = ${?CLOUDFLARE_SECRET} +} diff --git a/groupeminaste-backend/src/commonMain/resources/application.test.conf b/groupeminaste-backend/src/commonMain/resources/application.test.conf index 3b8cbb4..1ba8dc9 100644 --- a/groupeminaste-backend/src/commonMain/resources/application.test.conf +++ b/groupeminaste-backend/src/commonMain/resources/application.test.conf @@ -27,3 +27,10 @@ email { discord { getInTouch = "" } +cloudflare { + account = "" + token = "" + id = "" + secret = "" + bucket = "groupeminaste" +} diff --git a/groupeminaste-backend/src/commonMain/resources/i18n/Messages_en.properties b/groupeminaste-backend/src/commonMain/resources/i18n/Messages_en.properties index 1cd7bb4..9b06236 100644 --- a/groupeminaste-backend/src/commonMain/resources/i18n/Messages_en.properties +++ b/groupeminaste-backend/src/commonMain/resources/i18n/Messages_en.properties @@ -61,3 +61,5 @@ admin_links_url=URL admin_links_view=View links for this project home_contact_confirmation=Thank you for your message! We will get back to you as soon as possible. home_contact_back=Go back to home +admin_menu_files=Files +admin_files_key=File URL diff --git a/groupeminaste-backend/src/commonMain/resources/templates/admin/files/list.ftl b/groupeminaste-backend/src/commonMain/resources/templates/admin/files/list.ftl new file mode 100644 index 0000000..c3a5b58 --- /dev/null +++ b/groupeminaste-backend/src/commonMain/resources/templates/admin/files/list.ftl @@ -0,0 +1,51 @@ +<#import "../template.ftl" as template> +<@template.page> +
+
+
+
+
+
+ +
+
+
+
+
+ + + + + + + + <#list items as file> + + + + + + +
+
+
+
+
+ + + + diff --git a/helm/groupeminaste/templates/deployment.yaml b/helm/groupeminaste/templates/deployment.yaml index 26b5c3f..315b581 100644 --- a/helm/groupeminaste/templates/deployment.yaml +++ b/helm/groupeminaste/templates/deployment.yaml @@ -97,6 +97,42 @@ spec: key: email-password - name: DISCORD_GET_IN_TOUCH value: {{ .Values.discord.getInTouch }} + - name: CLOUDFLARE_ACCOUNT + valueFrom: + secretKeyRef: + {{ if not .Values.existingSecret -}} + name: {{ include "groupeminaste.fullname" . }} + {{- else }} + name: {{ .Values.existingSecret }} + {{- end }} + key: cloudflare-account + - name: CLOUDFLARE_TOKEN + valueFrom: + secretKeyRef: + {{ if not .Values.existingSecret -}} + name: {{ include "groupeminaste.fullname" . }} + {{- else }} + name: {{ .Values.existingSecret }} + {{- end }} + key: cloudflare-token + - name: CLOUDFLARE_ID + valueFrom: + secretKeyRef: + {{ if not .Values.existingSecret -}} + name: {{ include "groupeminaste.fullname" . }} + {{- else }} + name: {{ .Values.existingSecret }} + {{- end }} + key: cloudflare-id + - name: CLOUDFLARE_SECRET + valueFrom: + secretKeyRef: + {{ if not .Values.existingSecret -}} + name: {{ include "groupeminaste.fullname" . }} + {{- else }} + name: {{ .Values.existingSecret }} + {{- end }} + key: cloudflare-secret livenessProbe: {{- toYaml .Values.livenessProbe | nindent 12 }} readinessProbe: diff --git a/helm/groupeminaste/templates/secret.yaml b/helm/groupeminaste/templates/secret.yaml index a52185a..c7ec99b 100644 --- a/helm/groupeminaste/templates/secret.yaml +++ b/helm/groupeminaste/templates/secret.yaml @@ -18,4 +18,8 @@ data: {{ end }} jwt-secret: {{ .Values.jwt.secret | b64enc | quote }} email-password: {{ .Values.email.password | b64enc | quote }} + cloudflare-account: {{ .Values.cloudflare.account | b64enc | quote }} + cloudflare-token: {{ .Values.cloudflare.token | b64enc | quote }} + cloudflare-id: {{ .Values.cloudflare.id | b64enc | quote }} + cloudflare-secret: {{ .Values.cloudflare.secret | b64enc | quote }} {{ end }} diff --git a/helm/groupeminaste/values.yaml b/helm/groupeminaste/values.yaml index 1f6ba8b..0a4b8da 100644 --- a/helm/groupeminaste/values.yaml +++ b/helm/groupeminaste/values.yaml @@ -150,6 +150,12 @@ email: discord: getInTouch: '' +cloudflare: + account: '' + token: '' + id: '' + secret: '' + # MySQL configuration mysql: