generate 4get config from env variables
This commit is contained in:
		| @@ -2,14 +2,14 @@ FROM alpine:latest | ||||
| WORKDIR /var/www/html/4get | ||||
|  | ||||
| RUN apk update && apk upgrade | ||||
| RUN apk add   apache2-ssl php82-fileinfo php82-openssl php82-iconv php82-common php82-dom php82-curl curl php82-pecl-apcu php82-apache2 imagemagick php82-pecl-imagick | ||||
| RUN apk add php apache2-ssl php82-fileinfo php82-openssl php82-iconv php82-common php82-dom php82-curl curl php82-pecl-apcu php82-apache2 imagemagick php82-pecl-imagick php-mbstring | ||||
|  | ||||
| COPY ./apache/httpd.conf /etc/apache2/httpd.conf | ||||
| COPY ./apache/conf.d/ssl.conf /etc/apache2/conf.d/ssl.conf | ||||
| COPY . . | ||||
|  | ||||
| RUN chmod 777 /var/www/html/4get/icons | ||||
|  | ||||
| VOLUME ["/etc/4get/certs"] | ||||
| EXPOSE 80 | ||||
| EXPOSE 443 | ||||
|  | ||||
|   | ||||
							
								
								
									
										19
									
								
								apache/conf.d/ssl.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								apache/conf.d/ssl.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| LoadModule ssl_module modules/mod_ssl.so | ||||
| LoadModule socache_shmcb_module modules/mod_socache_shmcb.so | ||||
|  | ||||
| SSLRandomSeed startup file:/dev/urandom 512 | ||||
| SSLRandomSeed connect builtin | ||||
|  | ||||
| Listen 443 | ||||
|  | ||||
| SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES:!ADH | ||||
| SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES:!ADH | ||||
| SSLHonorCipherOrder on | ||||
|  | ||||
| SSLProtocol all -SSLv3 | ||||
| SSLProxyProtocol all -SSLv3 | ||||
|  | ||||
| SSLPassPhraseDialog  builtin | ||||
|  | ||||
| SSLSessionCache        "shmcb:/var/cache/mod_ssl/scache(512000)" | ||||
| SSLSessionCacheTimeout  300 | ||||
| @@ -1,3 +1,4 @@ | ||||
| # example docker-compose.yaml | ||||
| version: "3.7" | ||||
|  | ||||
| services: | ||||
| @@ -5,8 +6,8 @@ services: | ||||
|     image: luuul/4get:latest | ||||
|     restart: always | ||||
|     environment: | ||||
|       - FOURGET_SERVER_NAME=beak.chat | ||||
|       - FOURGET_SERVER_ADMIN_EMAIL="you@example.com" | ||||
|       - FOURGET_VERSION=6 | ||||
|       - FOURGET_SERVER_NAME=4get.ca | ||||
|  | ||||
|     ports: | ||||
|       - "80:80" | ||||
| @@ -15,3 +16,4 @@ services: | ||||
|     volumes: | ||||
|       - /etc/letsencrypt/live/domain.tld:/etc/4get/certs | ||||
|       - ./banners:/var/www/html/4get/banner | ||||
|       - ./captcha:/var/www/html/4get/data/captcha | ||||
|   | ||||
| @@ -14,6 +14,10 @@ if [ ! -f /etc/4get/certs/cert.pem ] || [ ! -f /etc/4get/certs/chain.pem ] || [ | ||||
|         mv /etc/apache2/httpd.conf_temp /etc/apache2/httpd.conf | ||||
| fi | ||||
|  | ||||
|  | ||||
| php82 ./docker/gen_config.php | ||||
|  | ||||
|  | ||||
| echo "4get is running" | ||||
| exec httpd -DFOREGROUND | ||||
|  | ||||
|   | ||||
							
								
								
									
										74
									
								
								docker/gen_config.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								docker/gen_config.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
|  <?php | ||||
|  | ||||
| include "/var/www/html/4get/data/config.php"; | ||||
|  | ||||
| $refl = new ReflectionClass('config'); | ||||
| $config = ($refl->getConstants()); | ||||
|  | ||||
| $env = getenv(); | ||||
| $fourget_env = array_filter($env, function($v, $k) { | ||||
|         return str_starts_with($k, "FOURGET"); | ||||
| }, ARRAY_FILTER_USE_BOTH); | ||||
|  | ||||
|  | ||||
| foreach($fourget_env as $key => $val)  { | ||||
|         $target_key = preg_replace('/^FOURGET_/', '', $key); | ||||
|         $config[$target_key] = $val; | ||||
| }; | ||||
|  | ||||
| function type_to_string($n) { | ||||
|         $type = gettype($n); | ||||
|         if ($type === "NULL") { | ||||
|                 return "null"; | ||||
|         } | ||||
|         if ($type === "boolean") { | ||||
|                 return $n ? 'true' : 'false'; | ||||
|         } | ||||
|         if ($type === "string") { | ||||
|                 return "\"$n\""; | ||||
|         } | ||||
|         if ($type === "array") { | ||||
|                 return json_encode($n); | ||||
|         } | ||||
|         return $n; | ||||
| } | ||||
|  | ||||
|  | ||||
| function detect_captcha_dirs() { | ||||
|         $captcha_dir = "/var/www/html/4get/data/captcha/"; | ||||
|         $categories = (array_map(function ($n) { | ||||
|                 return explode("/", $n)[7]; | ||||
|         }, glob($captcha_dir . "*"))); | ||||
|  | ||||
|  | ||||
|         $result = array_map(function($category) { | ||||
|                 return [$category, count(glob("/var/www/html/4get/data/captcha/" . $category . "/*" ))]; | ||||
|         }, $categories); | ||||
|  | ||||
|         return $result; | ||||
| } | ||||
|  | ||||
|  | ||||
| $special_keys = ["CAPTCHA_DATASET"]; | ||||
|  | ||||
| $output = "<?php\n // This file was generated by docker/gen_config.php\n"; | ||||
|  | ||||
| $output = $output . "class config {\n"; | ||||
| foreach(($config) as $key => $val){ | ||||
|         if(!in_array($key, $special_keys)) { | ||||
| $output = $output . "\tconst " . $key . " = " . type_to_string($val) . ";\n"; | ||||
| continue; | ||||
|         } | ||||
|  | ||||
|  | ||||
| if($key === "CAPTCHA_DATASET") { | ||||
|         $output = $output . "\tconst " . $key . " = " . type_to_string(detect_captcha_dirs()) . ";\n"; | ||||
|         } | ||||
|  | ||||
| } | ||||
|  | ||||
| $output = $output . "}\n"; | ||||
| $output = $output . "?>"; | ||||
|  | ||||
| file_put_contents("./data/config.php", $output); | ||||
| ?> | ||||
		Reference in New Issue
	
	Block a user