mirror of
				https://github.com/kevinveenbirkenbach/computer-playbook.git
				synced 2025-10-31 10:19:09 +00:00 
			
		
		
		
	feat(baserow): add one-time SSO warning JavaScript
- Introduced a generic sso_warning.js.j2 template under templates/roles/web-app/templates/javascripts/ - Included this template in web-app-baserow/templates/javascript.js.j2 - Added new variable js_application_name in roles/web-app-baserow/vars/main.yml to make the warning application-specific - Implemented cookie-based logic so the warning is only shown once per user (default: 365 days) Reference: https://chatgpt.com/share/68aecdae-82d0-800f-b05e-f2cb680664f1
This commit is contained in:
		| @@ -4,6 +4,7 @@ features: | ||||
|   desktop:          true | ||||
|   central_database: true | ||||
|   logout:           true | ||||
|   javascript:       true | ||||
| docker: | ||||
|   services: | ||||
|     redis: | ||||
|   | ||||
							
								
								
									
										1
									
								
								roles/web-app-baserow/templates/javascript.js.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								roles/web-app-baserow/templates/javascript.js.j2
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| {% include 'templates/roles/web-app/templates/javascripts/sso_warning.js.j2' %} | ||||
| @@ -1,11 +1,12 @@ | ||||
| # General | ||||
| application_id:     "web-app-baserow" | ||||
| database_password:  "{{ applications | get_app_conf(application_id, 'credentials.database_password') }}" | ||||
| database_type:      "postgres" | ||||
| application_id:       "web-app-baserow" | ||||
| database_password:    "{{ applications | get_app_conf(application_id, 'credentials.database_password') }}" | ||||
| database_type:        "postgres" | ||||
| js_application_name:  "Baserow" | ||||
|  | ||||
| # Baserow | ||||
| BASEROW_PUBLIC_URL: "{{ domains | get_url(application_id, WEB_PROTOCOL) }}" | ||||
| BASEROW_VERSION:    "{{ applications | get_app_conf(application_id, 'docker.services.baserow.version') }}" | ||||
| BASEROW_IMAGE:      "{{ applications | get_app_conf(application_id, 'docker.services.baserow.image') }}" | ||||
| BASEROW_CONTAINER:  "{{ applications | get_app_conf(application_id, 'docker.services.baserow.name') }}" | ||||
| BASEROW_VOLUME:     "{{ applications | get_app_conf(application_id, 'docker.volumes.data') }}" | ||||
| BASEROW_PUBLIC_URL:   "{{ domains | get_url(application_id, WEB_PROTOCOL) }}" | ||||
| BASEROW_VERSION:      "{{ applications | get_app_conf(application_id, 'docker.services.baserow.version') }}" | ||||
| BASEROW_IMAGE:        "{{ applications | get_app_conf(application_id, 'docker.services.baserow.image') }}" | ||||
| BASEROW_CONTAINER:    "{{ applications | get_app_conf(application_id, 'docker.services.baserow.name') }}" | ||||
| BASEROW_VOLUME:       "{{ applications | get_app_conf(application_id, 'docker.volumes.data') }}" | ||||
|   | ||||
| @@ -0,0 +1,34 @@ | ||||
| // Jinja2 variable for the application name | ||||
| const appName = "{{ js_application_name }}"; | ||||
| const cookieName = appName + "SSONoticeShown"; | ||||
|  | ||||
| // Function to set a cookie with expiration (in days) | ||||
| function setCookie(name, value, days) { | ||||
|     const d = new Date(); | ||||
|     d.setTime(d.getTime() + (days*24*60*60*1000)); | ||||
|     const expires = "expires="+ d.toUTCString(); | ||||
|     document.cookie = name + "=" + value + ";" + expires + ";path=/"; | ||||
| } | ||||
|  | ||||
| // Function to read a cookie | ||||
| function getCookie(name) { | ||||
|     const cname = name + "="; | ||||
|     const decodedCookie = decodeURIComponent(document.cookie); | ||||
|     const ca = decodedCookie.split(';'); | ||||
|     for(let i = 0; i < ca.length; i++) { | ||||
|         let c = ca[i].trim(); | ||||
|         if (c.indexOf(cname) === 0) { | ||||
|             return c.substring(cname.length, c.length); | ||||
|         } | ||||
|     } | ||||
|     return ""; | ||||
| } | ||||
|  | ||||
| // Main logic: show notice only once | ||||
| window.addEventListener("DOMContentLoaded", function() { | ||||
|     if (!getCookie(cookieName)) { | ||||
|         alert("Notice: " + appName + " is not integrated into the SSO. Login is not possible."); | ||||
|         // Set cookie for 365 days | ||||
|         setCookie(cookieName, "true", 365); | ||||
|     } | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user