Compare commits
2 Commits
46b00e33f8
...
c52f60fca9
| Author | SHA1 | Date | |
|---|---|---|---|
| c52f60fca9 | |||
| f8be42e486 |
15
.gitignore
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
# Ignorer tous les fichiers logs
|
||||
**/log/
|
||||
**/logs/
|
||||
*.log
|
||||
|
||||
# Ignorer les fichiers de cache ou temporaires
|
||||
*.tmp
|
||||
*.swp
|
||||
*.bak
|
||||
|
||||
# Ignorer les fichiers spécifiques
|
||||
heimdall/config/log/
|
||||
heimdall/www/logs/
|
||||
|
||||
|
||||
2
heimdall/config/.migrations
Executable file
@@ -0,0 +1,2 @@
|
||||
01-nginx-site-confs-default
|
||||
02-default-location
|
||||
22
heimdall/config/keys/cert.crt
Executable file
@@ -0,0 +1,22 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDsTCCApmgAwIBAgIUB5SMEqlvO75Mdp2q3mkdcUfsYXkwDQYJKoZIhvcNAQEL
|
||||
BQAwaDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMREwDwYDVQQHDAhDYXJsc2Jh
|
||||
ZDEXMBUGA1UECgwOTGludXhzZXJ2ZXIuaW8xFDASBgNVBAsMC0xTSU8gU2VydmVy
|
||||
MQowCAYDVQQDDAEqMB4XDTIxMTEyMDEwMTY1M1oXDTMxMTExODEwMTY1M1owaDEL
|
||||
MAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMREwDwYDVQQHDAhDYXJsc2JhZDEXMBUG
|
||||
A1UECgwOTGludXhzZXJ2ZXIuaW8xFDASBgNVBAsMC0xTSU8gU2VydmVyMQowCAYD
|
||||
VQQDDAEqMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2VWGIt/JZHus
|
||||
E7sZvdk6JkRfjrhG8FRPOGC4FwETNgCN8F6psNk0lOsCBXKzgr9NWCGoYCC9objg
|
||||
xpaeq4r5/u+NQE2sKl62ZZFIiMndHADZtQyCe1sGoS2Fc9lGOFcAztt+3NIERqcX
|
||||
OqlJLbMmvjnTYrk+QAUl+9WVyXkyUOZGci1EMQ4DxzMdkoQrtTcJ0B7Ho7M2DR+q
|
||||
AbNh9Vrp/S0dhy01lmm4cE7bAgarF8mTem6nBdQ6fvnuqUVa0o7m36OhSNgekIbq
|
||||
s8op91pWB12WIaIcTAB3ZPK5QcRpJ/hK07MISKKloorhE5h81VSC34oFHZNpZMrb
|
||||
H90BDmRF0wIDAQABo1MwUTAdBgNVHQ4EFgQUbp8VDmWndREkce7etru5J1NfFFow
|
||||
HwYDVR0jBBgwFoAUbp8VDmWndREkce7etru5J1NfFFowDwYDVR0TAQH/BAUwAwEB
|
||||
/zANBgkqhkiG9w0BAQsFAAOCAQEAN6OufAIhlYHUc/VpP2aDnJ/0n1K2HxpW3nxO
|
||||
B8S2NAky9psMRb/0DEGI3LOb8cchxYUPDbNeeqCV7u9+hWCjz4ut6dCpqBM3McHN
|
||||
5VxSEkn/BArHmuadGSXc7iTNu65avFyZN2hWC+K/7KmAsN9fCdRRwMWT9faZh2zR
|
||||
KpQcmydV+mAxn16MAnsgbISenjs5qrOX0IcL4InaF8pjNG7SqP0IRzTiPy4CQjcc
|
||||
lBOpW0lBKKXHzEGYvcCpaiH0KjvKDcXYTSk2YvOaZuYZv7PKsISAWyw1eHbB80T1
|
||||
4JZzWqzeJ7ir0mXisW28nEGcw4CvvecUDl8qpFI8rwGr4+5Idg==
|
||||
-----END CERTIFICATE-----
|
||||
28
heimdall/config/keys/cert.key
Executable file
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDZVYYi38lke6wT
|
||||
uxm92TomRF+OuEbwVE84YLgXARM2AI3wXqmw2TSU6wIFcrOCv01YIahgIL2huODG
|
||||
lp6rivn+741ATawqXrZlkUiIyd0cANm1DIJ7WwahLYVz2UY4VwDO237c0gRGpxc6
|
||||
qUktsya+OdNiuT5ABSX71ZXJeTJQ5kZyLUQxDgPHMx2ShCu1NwnQHsejszYNH6oB
|
||||
s2H1Wun9LR2HLTWWabhwTtsCBqsXyZN6bqcF1Dp++e6pRVrSjubfo6FI2B6Qhuqz
|
||||
yin3WlYHXZYhohxMAHdk8rlBxGkn+ErTswhIoqWiiuETmHzVVILfigUdk2lkytsf
|
||||
3QEOZEXTAgMBAAECggEBAMW3JVlypz+PtwMYMpnhFiKcDybChF69BHjwnGjpJHX7
|
||||
WSV0qQFnCIv1pBgaui5XJODpdclF395RV8OyYNUEkNwZSDJYtyiwk1ShMBCpPEru
|
||||
hyBLKiVYsRZOWFsFLfmxRN3rF2WCdjtkZSCLwzQdCEEEUEc+6N/LDzwkmaj5Zgnr
|
||||
VrpzeSWM4pMlK9l0viv4tlqcUfNW0Mnn5l3Rrg3SCl5i0M83sR1LMrtr2s8r5KIj
|
||||
oEot6YjnHtf61YfEGQquxmhMm8rsgYWguf4d7ZEP0qqh4AmArqLJR7oBldCwPqa6
|
||||
7jcfD9csf6GmPEXJFYdfELUsKrSm8sOCicTreGvLVrECgYEA7V/La9EVxionYzLX
|
||||
tUdWbbez5INsi4anhXQwye9qfjU3Pbit47GIPOtLuwGZ0kauOBJeCV5DzuDCQRBw
|
||||
AI+dxPRhj6nldHLg59fmXOnj5kwkzhPWqDzAz1zr5X7XGHx3qs8PhVO7WOlsTdP9
|
||||
94FxleR5drYvig31lHaAYclVnxkCgYEA6mMtdVsPzwooCF87sS/H9kWr0dy6Jry5
|
||||
AOt5p5uFfwulnkHru3uR6gfMaramjDcqMc4Ibt/f1uKSW0Cfl0Oo5ui7tz0XVxPh
|
||||
CQRUP4MddjM7GxcAd9pvdyvNGi2rnC9WITJQmlo9YeZCt2KIM8CYEl2f9fQjQfhI
|
||||
VvwOC1oUpcsCgYAhfwMVk8ueyxQDy4jk68wmb2XTOTh39+hrzJmV5VMBvECvVQA0
|
||||
wTiYYBuvp+os4gxznSPn7oVjDBRdWhRz/9AjmtipjS/z3sId9TlsoxSlytjmu6Xu
|
||||
16Pdnx8qo1t2+Rlp4Q4vokEtqsK9uMx9wKZmoHcDaXIL6SxeZtp28hJDAQKBgDjg
|
||||
LiS/Hxvva/10FokNfildiK8ZL7a8ruvxOAka7Q8CJYM8ndZVyveOQuVWQx3dOQjy
|
||||
5Qr6mleLjVZFXTSYf4Dg0sRJN8OymDXW7hanW1vWXK5bK4rp34h8gX2rvWvd9LmD
|
||||
exmpciGyfVgAuepM/tneDDXjszaL6AnrigDpL/93AoGAJhoVBYQ20vBgTtwCvj5i
|
||||
JJVsCOjEOvgpp012Q0Wg4ec7E+7FBimtVHkF/2qdcN0CpXx47RS8PfDOAVSEDS6a
|
||||
+HMSZRRMfA/e4qApUEMohkQm9CoCno8C/ICDVsJ181GffZqgsnQ4uf3EDSFTGM8X
|
||||
RcGOvwssGGgPx0Wp2O6gPIE=
|
||||
-----END PRIVATE KEY-----
|
||||
13
heimdall/config/nginx/dhparams.pem
Executable file
@@ -0,0 +1,13 @@
|
||||
-----BEGIN DH PARAMETERS-----
|
||||
MIICCAKCAgEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
|
||||
+8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
|
||||
87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
|
||||
YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
|
||||
7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
|
||||
ssbzSibBsu/6iGtCOGEfz9zeNVs7ZRkDW7w09N75nAI4YbRvydbmyQd62R0mkff3
|
||||
7lmMsPrBhtkcrv4TCYUTknC0EwyTvEN5RPT9RFLi103TZPLiHnH1S/9croKrnJ32
|
||||
nuhtK8UiNjoNq8Uhl5sN6todv5pC1cRITgq80Gv6U93vPBsg7j/VnXwl5B0rZp4e
|
||||
8W5vUsMWTfT7eTDp5OWIV7asfV9C1p9tGHdjzx1VA0AEh/VbpX4xzHpxNciG77Qx
|
||||
iu1qHgEtnmgyqQdgCpGBMMRtx3j5ca0AOAkpmaMzy4t6Gh25PXFAADwqTs6p+Y0K
|
||||
zAqCkc3OyX3Pjsm1Wn+IpGtNtahR9EGC4caKAH5eZV9q//////////8CAQI=
|
||||
-----END DH PARAMETERS-----
|
||||
98
heimdall/config/nginx/nginx.conf
Executable file
@@ -0,0 +1,98 @@
|
||||
user abc;
|
||||
worker_processes 4;
|
||||
pid /run/nginx.pid;
|
||||
include /etc/nginx/modules/*.conf;
|
||||
|
||||
events {
|
||||
worker_connections 768;
|
||||
# multi_accept on;
|
||||
}
|
||||
|
||||
http {
|
||||
|
||||
##
|
||||
# Basic Settings
|
||||
##
|
||||
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
tcp_nodelay on;
|
||||
keepalive_timeout 65;
|
||||
types_hash_max_size 2048;
|
||||
# server_tokens off;
|
||||
|
||||
# server_names_hash_bucket_size 64;
|
||||
# server_name_in_redirect off;
|
||||
|
||||
client_max_body_size 0;
|
||||
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
##
|
||||
# Logging Settings
|
||||
##
|
||||
|
||||
access_log /config/log/nginx/access.log;
|
||||
error_log /config/log/nginx/error.log;
|
||||
|
||||
##
|
||||
# Gzip Settings
|
||||
##
|
||||
|
||||
gzip on;
|
||||
gzip_disable "msie6";
|
||||
|
||||
# gzip_vary on;
|
||||
# gzip_proxied any;
|
||||
# gzip_comp_level 6;
|
||||
# gzip_buffers 16 8k;
|
||||
# gzip_http_version 1.1;
|
||||
# gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
|
||||
|
||||
##
|
||||
# nginx-naxsi config
|
||||
##
|
||||
# Uncomment it if you installed nginx-naxsi
|
||||
##
|
||||
|
||||
#include /etc/nginx/naxsi_core.rules;
|
||||
|
||||
##
|
||||
# nginx-passenger config
|
||||
##
|
||||
# Uncomment it if you installed nginx-passenger
|
||||
##
|
||||
|
||||
#passenger_root /usr;
|
||||
#passenger_ruby /usr/bin/ruby;
|
||||
|
||||
##
|
||||
# Virtual Host Configs
|
||||
##
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
include /config/nginx/site-confs/*.conf;
|
||||
}
|
||||
|
||||
|
||||
#mail {
|
||||
# # See sample authentication script at:
|
||||
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
|
||||
#
|
||||
# # auth_http localhost/auth.php;
|
||||
# # pop3_capabilities "TOP" "USER";
|
||||
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
|
||||
#
|
||||
# server {
|
||||
# listen localhost:110;
|
||||
# protocol pop3;
|
||||
# proxy on;
|
||||
# }
|
||||
#
|
||||
# server {
|
||||
# listen localhost:143;
|
||||
# protocol imap;
|
||||
# proxy on;
|
||||
# }
|
||||
#}
|
||||
daemon off;
|
||||
84
heimdall/config/nginx/nginx.conf.sample
Executable file
@@ -0,0 +1,84 @@
|
||||
## Version 2024/05/27 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/nginx.conf.sample
|
||||
|
||||
### Based on alpine defaults
|
||||
# https://git.alpinelinux.org/aports/tree/main/nginx/nginx.conf?h=3.20-stable
|
||||
|
||||
user abc;
|
||||
|
||||
# Set number of worker processes automatically based on number of CPU cores.
|
||||
include /config/nginx/worker_processes.conf;
|
||||
|
||||
# Enables the use of JIT for regular expressions to speed-up their processing.
|
||||
pcre_jit on;
|
||||
|
||||
# Configures default error logger.
|
||||
error_log /config/log/nginx/error.log;
|
||||
|
||||
# Includes files with directives to load dynamic modules.
|
||||
include /etc/nginx/modules/*.conf;
|
||||
|
||||
# Include files with config snippets into the root context.
|
||||
include /etc/nginx/conf.d/*.conf;
|
||||
|
||||
events {
|
||||
# The maximum number of simultaneous connections that can be opened by
|
||||
# a worker process.
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
# Includes mapping of file name extensions to MIME types of responses
|
||||
# and defines the default type.
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
|
||||
# Name servers used to resolve names of upstream servers into addresses.
|
||||
# It's also needed when using tcpsocket and udpsocket in Lua modules.
|
||||
#resolver 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001;
|
||||
include /config/nginx/resolver.conf;
|
||||
|
||||
# Don't tell nginx version to the clients. Default is 'on'.
|
||||
server_tokens off;
|
||||
|
||||
# Specifies the maximum accepted body size of a client request, as
|
||||
# indicated by the request header Content-Length. If the stated content
|
||||
# length is greater than this size, then the client receives the HTTP
|
||||
# error code 413. Set to 0 to disable. Default is '1m'.
|
||||
client_max_body_size 0;
|
||||
|
||||
# Sendfile copies data between one FD and other from within the kernel,
|
||||
# which is more efficient than read() + write(). Default is off.
|
||||
sendfile on;
|
||||
|
||||
# Causes nginx to attempt to send its HTTP response head in one packet,
|
||||
# instead of using partial frames. Default is 'off'.
|
||||
tcp_nopush on;
|
||||
|
||||
# all ssl related config moved to ssl.conf
|
||||
# included in server blocks where listen 443 is defined
|
||||
|
||||
# Enable gzipping of responses.
|
||||
#gzip on;
|
||||
|
||||
# Set the Vary HTTP header as defined in the RFC 2616. Default is 'off'.
|
||||
gzip_vary on;
|
||||
|
||||
# Helper variable for proxying websockets.
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
# Enable http2 by default for all servers
|
||||
http2 on;
|
||||
|
||||
# Sets the path, format, and configuration for a buffered log write.
|
||||
access_log /config/log/nginx/access.log;
|
||||
|
||||
# Includes virtual hosts configs.
|
||||
include /etc/nginx/http.d/*.conf;
|
||||
include /config/nginx/site-confs/*.conf;
|
||||
}
|
||||
|
||||
daemon off;
|
||||
pid /run/nginx.pid;
|
||||
3
heimdall/config/nginx/resolver.conf
Executable file
@@ -0,0 +1,3 @@
|
||||
# This file is auto-generated only on first start, based on the container's /etc/resolv.conf file. Feel free to modify it as you wish.
|
||||
|
||||
resolver 127.0.0.11 valid=30s;
|
||||
43
heimdall/config/nginx/site-confs/default.conf
Executable file
@@ -0,0 +1,43 @@
|
||||
## Version 2018/03/06 - Changelog: https://github.com/linuxserver/docker-heimdall/commits/master/root/defaults/default
|
||||
|
||||
server {
|
||||
listen 80 default_server;
|
||||
|
||||
listen 443 ssl;
|
||||
|
||||
root /app/www/public;
|
||||
index index.php index.html index.htm;
|
||||
|
||||
server_name _;
|
||||
|
||||
ssl_certificate /config/keys/cert.crt;
|
||||
ssl_certificate_key /config/keys/cert.key;
|
||||
|
||||
client_max_body_size 0;
|
||||
|
||||
error_page 599 = @noauth;
|
||||
|
||||
location / {
|
||||
if (!-f /config/nginx/.htpasswd) {
|
||||
return 599;
|
||||
}
|
||||
auth_basic "Restricted";
|
||||
auth_basic_user_file /config/nginx/.htpasswd;
|
||||
try_files $uri $uri/ /index.php?$args;
|
||||
}
|
||||
|
||||
location @noauth {
|
||||
try_files $uri $uri/ /index.php?$args;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||
# With php5-cgi alone:
|
||||
fastcgi_pass 127.0.0.1:9000;
|
||||
# With php5-fpm:
|
||||
#fastcgi_pass unix:/var/run/php5-fpm.sock;
|
||||
fastcgi_index index.php;
|
||||
include /etc/nginx/fastcgi_params;
|
||||
|
||||
}
|
||||
}
|
||||
44
heimdall/config/nginx/site-confs/default.conf.sample
Executable file
@@ -0,0 +1,44 @@
|
||||
## Version 2024/07/16 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/site-confs/default.conf.sample
|
||||
|
||||
server {
|
||||
listen 80 default_server;
|
||||
listen [::]:80 default_server;
|
||||
listen 443 ssl default_server;
|
||||
listen [::]:443 ssl default_server;
|
||||
|
||||
server_name _;
|
||||
|
||||
include /config/nginx/ssl.conf;
|
||||
|
||||
set $root /app/www/public;
|
||||
if (!-d /app/www/public) {
|
||||
set $root /config/www;
|
||||
}
|
||||
root $root;
|
||||
index index.html index.htm index.php;
|
||||
|
||||
location / {
|
||||
# enable for basic auth
|
||||
#auth_basic "Restricted";
|
||||
#auth_basic_user_file /config/nginx/.htpasswd;
|
||||
|
||||
try_files $uri $uri/ /index.html /index.htm /index.php$is_args$args;
|
||||
}
|
||||
|
||||
location ~ ^(.+\.php)(.*)$ {
|
||||
# enable the next two lines for http auth
|
||||
#auth_basic "Restricted";
|
||||
#auth_basic_user_file /config/nginx/.htpasswd;
|
||||
|
||||
fastcgi_split_path_info ^(.+\.php)(.*)$;
|
||||
if (!-f $document_root$fastcgi_script_name) { return 404; }
|
||||
fastcgi_pass 127.0.0.1:9000;
|
||||
fastcgi_index index.php;
|
||||
include /etc/nginx/fastcgi_params;
|
||||
}
|
||||
|
||||
# deny access to .htaccess/.htpasswd files
|
||||
location ~ /\.ht {
|
||||
deny all;
|
||||
}
|
||||
}
|
||||
39
heimdall/config/nginx/ssl.conf
Executable file
@@ -0,0 +1,39 @@
|
||||
## Version 2022/08/20 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/ssl.conf.sample
|
||||
|
||||
### Mozilla Recommendations
|
||||
# generated 2022-08-05, Mozilla Guideline v5.6, nginx 1.17.7, OpenSSL 1.1.1k, intermediate configuration
|
||||
# https://ssl-config.mozilla.org/#server=nginx&version=1.17.7&config=intermediate&openssl=1.1.1k&guideline=5.6
|
||||
|
||||
ssl_certificate /config/keys/cert.crt;
|
||||
ssl_certificate_key /config/keys/cert.key;
|
||||
ssl_session_timeout 1d;
|
||||
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
|
||||
ssl_session_tickets off;
|
||||
|
||||
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
|
||||
ssl_dhparam /config/nginx/dhparams.pem;
|
||||
|
||||
# intermediate configuration
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
|
||||
ssl_prefer_server_ciphers off;
|
||||
|
||||
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
|
||||
#add_header Strict-Transport-Security "max-age=63072000" always;
|
||||
|
||||
# OCSP stapling
|
||||
#ssl_stapling on;
|
||||
#ssl_stapling_verify on;
|
||||
|
||||
# verify chain of trust of OCSP response using Root CA and Intermediate certs
|
||||
#ssl_trusted_certificate /config/keys/cert.crt;
|
||||
|
||||
# Optional additional headers
|
||||
#add_header Cache-Control "no-transform" always;
|
||||
#add_header Content-Security-Policy "upgrade-insecure-requests; frame-ancestors 'self'";
|
||||
#add_header Permissions-Policy "interest-cohort=()";
|
||||
#add_header Referrer-Policy "same-origin" always;
|
||||
#add_header X-Content-Type-Options "nosniff" always;
|
||||
#add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
#add_header X-UA-Compatible "IE=Edge" always;
|
||||
#add_header X-XSS-Protection "1; mode=block" always;
|
||||
39
heimdall/config/nginx/ssl.conf.sample
Executable file
@@ -0,0 +1,39 @@
|
||||
## Version 2023/08/13 - Changelog: https://github.com/linuxserver/docker-baseimage-alpine-nginx/commits/master/root/defaults/nginx/ssl.conf.sample
|
||||
|
||||
### Mozilla Recommendations
|
||||
# generated 2023-06-25, Mozilla Guideline v5.7, nginx 1.24.0, OpenSSL 3.1.1, intermediate configuration
|
||||
# https://ssl-config.mozilla.org/#server=nginx&version=1.24.0&config=intermediate&openssl=3.1.1&guideline=5.7
|
||||
|
||||
ssl_certificate /config/keys/cert.crt;
|
||||
ssl_certificate_key /config/keys/cert.key;
|
||||
ssl_session_timeout 1d;
|
||||
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
|
||||
ssl_session_tickets off;
|
||||
|
||||
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
|
||||
ssl_dhparam /config/nginx/dhparams.pem;
|
||||
|
||||
# intermediate configuration
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
|
||||
ssl_prefer_server_ciphers off;
|
||||
|
||||
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
|
||||
#add_header Strict-Transport-Security "max-age=63072000" always;
|
||||
|
||||
# OCSP stapling
|
||||
#ssl_stapling on;
|
||||
#ssl_stapling_verify on;
|
||||
|
||||
# verify chain of trust of OCSP response using Root CA and Intermediate certs
|
||||
#ssl_trusted_certificate /config/keys/cert.crt;
|
||||
|
||||
# Optional additional headers
|
||||
#add_header Cache-Control "no-transform" always;
|
||||
#add_header Content-Security-Policy "upgrade-insecure-requests; frame-ancestors 'self'" always;
|
||||
#add_header Permissions-Policy "interest-cohort=()" always;
|
||||
#add_header Referrer-Policy "same-origin" always;
|
||||
#add_header X-Content-Type-Options "nosniff" always;
|
||||
#add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
#add_header X-UA-Compatible "IE=Edge" always;
|
||||
#add_header X-XSS-Protection "1; mode=block" always;
|
||||
3
heimdall/config/nginx/worker_processes.conf
Executable file
@@ -0,0 +1,3 @@
|
||||
# This file is auto-generated only on first start, based on the cpu cores detected. Feel free to change it to any other number or to auto to let nginx handle it automatically.
|
||||
|
||||
worker_processes 2;
|
||||
3
heimdall/config/php/php-local.ini
Executable file
@@ -0,0 +1,3 @@
|
||||
; Edit this file to override php.ini directives and restart the container
|
||||
|
||||
date.timezone = Europe/Paris
|
||||
5
heimdall/config/php/www2.conf
Executable file
@@ -0,0 +1,5 @@
|
||||
; Edit this file to override www.conf and php-fpm.conf directives and restart the container
|
||||
|
||||
; Pool name
|
||||
[www]
|
||||
|
||||
31
heimdall/config/www/.env
Executable file
@@ -0,0 +1,31 @@
|
||||
APP_NAME=Heimdall
|
||||
APP_ENV=local
|
||||
APP_KEY=base64:b4dz4c5W2PVJo6dxJJsE4PNo3JgK+K/M0MDHJ1qGHFY=
|
||||
APP_DEBUG=true
|
||||
APP_LOG_LEVEL=debug
|
||||
APP_URL=http://localhost
|
||||
|
||||
DB_CONNECTION=sqlite
|
||||
DB_DATABASE=app.sqlite
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
QUEUE_DRIVER=database
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_DRIVER=smtp
|
||||
MAIL_HOST=smtp.mailtrap.io
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
|
||||
PUSHER_APP_ID=
|
||||
PUSHER_APP_KEY=
|
||||
PUSHER_APP_SECRET=
|
||||
PUSHER_APP_CLUSTER=mt1
|
||||
5
heimdall/config/www/SupportedApps/AMP/AMP.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\AMP;
|
||||
|
||||
class AMP extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/AMP/amp.png
Executable file
|
After Width: | Height: | Size: 6.5 KiB |
10
heimdall/config/www/SupportedApps/AMP/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "65f59ec6b1ecd6170d5044474043cca9560a8071",
|
||||
"name": "AMP",
|
||||
"website": "https://cubecoders.com/AMP",
|
||||
"license": "Proprietary",
|
||||
"description": "AMP is short for Application Management Panel. It's our next-generation server administration software built for both users, and service providers. It supports both Windows and Linux based servers and allows you to manage all your game servers from a single web interface.",
|
||||
"enhanced": false,
|
||||
"tile_background": "light",
|
||||
"icon": "amp.png"
|
||||
}
|
||||
5
heimdall/config/www/SupportedApps/AVMFritzbox/AVMFritzbox.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\AVMFritzbox;
|
||||
|
||||
class AVMFritzbox extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/AVMFritzbox/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "e8354374b262e6f1055e7412d11f24a164a50f79",
|
||||
"name": "AVM Fritzbox",
|
||||
"website": "www.avm.de",
|
||||
"license": "GNU General Public License v2.0 only",
|
||||
"description": "\"The\" Fritzbox, stylised as FRITZ!Box, is a series of residential gateway devices produced by the German company AVM GmbH. \r\nFRITZ!OS is the FRITZ!Box operating system and can be easily controlled via your browser. User-friendly menus, easy-to-understand wizards, and the optional advanced mode come in handy in all scenarios.",
|
||||
"enhanced": false,
|
||||
"tile_background": "light",
|
||||
"icon": "avmfritzbox.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/AVMFritzbox/avmfritzbox.png
Executable file
|
After Width: | Height: | Size: 13 KiB |
35
heimdall/config/www/SupportedApps/AWX/AWX.php
Executable file
@@ -0,0 +1,35 @@
|
||||
<?php namespace App\SupportedApps\AWX;
|
||||
|
||||
class AWX extends \App\SupportedApps implements \App\EnhancedApps {
|
||||
|
||||
public $config;
|
||||
|
||||
//protected $login_first = true; // Uncomment if api requests need to be authed first
|
||||
//protected $method = 'POST'; // Uncomment if requests to the API should be set by POST
|
||||
|
||||
function __construct() {
|
||||
//$this->jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set
|
||||
}
|
||||
|
||||
public function test()
|
||||
{
|
||||
$test = parent::appTest($this->url('status'));
|
||||
echo $test->status;
|
||||
}
|
||||
|
||||
public function livestats()
|
||||
{
|
||||
$status = 'inactive';
|
||||
$res = parent::execute($this->url('status'));
|
||||
$details = json_decode($res->getBody());
|
||||
|
||||
$data = [];
|
||||
return parent::getLiveStats($status, $data);
|
||||
|
||||
}
|
||||
public function url($endpoint)
|
||||
{
|
||||
$api_url = parent::normaliseurl($this->config->url).$endpoint;
|
||||
return $api_url;
|
||||
}
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/AWX/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "47bf44c0ec908654f16bacf131107a5aac3ae7b4",
|
||||
"name": "AWX",
|
||||
"website": "https://github.com/ansible/awx",
|
||||
"license": "Apache License 2.0",
|
||||
"description": "AWX provides a web-based user interface, REST API, and task engine built on top of Ansible. It is the upstream project for Tower, a commercial derivative of AWX.",
|
||||
"enhanced": true,
|
||||
"tile_background": "dark",
|
||||
"icon": "awx.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/AWX/awx.png
Executable file
|
After Width: | Height: | Size: 14 KiB |
19
heimdall/config/www/SupportedApps/AWX/config.blade.php
Executable file
@@ -0,0 +1,19 @@
|
||||
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')</h2>
|
||||
<div class="items">
|
||||
<div class="input">
|
||||
<label>{{ strtoupper(__('app.url')) }}</label>
|
||||
{!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.username') }}</label>
|
||||
{!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.password') }}</label>
|
||||
{!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
10
heimdall/config/www/SupportedApps/AWX/livestats.blade.php
Executable file
@@ -0,0 +1,10 @@
|
||||
<ul class="livestats">
|
||||
<li>
|
||||
<span class="title">Queue</span>
|
||||
<strong>{!! $queue_size !!}</strong>
|
||||
</li>
|
||||
<li>
|
||||
<span class="title">Speed</span>
|
||||
<strong>{!! $current_speed !!}</strong>
|
||||
</li>
|
||||
</ul>
|
||||
52
heimdall/config/www/SupportedApps/AdGuardHome/AdGuardHome.php
Executable file
@@ -0,0 +1,52 @@
|
||||
<?php namespace App\SupportedApps\AdGuardHome;
|
||||
|
||||
class AdGuardHome extends \App\SupportedApps implements \App\EnhancedApps {
|
||||
|
||||
public $config;
|
||||
|
||||
//protected $login_first = true; // Uncomment if api requests need to be authed first
|
||||
//protected $method = 'POST'; // Uncomment if requests to the API should be set by POST
|
||||
|
||||
function __construct() {
|
||||
//$this->jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set
|
||||
}
|
||||
|
||||
public function test()
|
||||
{
|
||||
$test = parent::appTest($this->url('/control/stats'));
|
||||
echo $test->status;
|
||||
}
|
||||
|
||||
public function livestats()
|
||||
{
|
||||
$status = 'inactive';
|
||||
$res = parent::execute($this->url('/control/stats'));
|
||||
$details = json_decode($res->getBody());
|
||||
|
||||
$data = [];
|
||||
if($details) {
|
||||
// format has been changed in AdguardHome v0.99.0
|
||||
if (is_array($details->dns_queries)) {
|
||||
$data['dns_queries'] = number_format(array_sum($details->dns_queries));
|
||||
$data['blocked_filtering'] = number_format(array_sum($details->blocked_filtering));
|
||||
} else {
|
||||
$data['dns_queries'] = number_format($details->dns_queries);
|
||||
$data['blocked_filtering'] = number_format($details->blocked_filtering);
|
||||
}
|
||||
}
|
||||
|
||||
return parent::getLiveStats($status, $data);
|
||||
}
|
||||
public function url($endpoint)
|
||||
{
|
||||
$api_url = parent::normaliseurl($this->config->url);
|
||||
$username = $this->config->username;
|
||||
$password = $this->config->password;
|
||||
$rebuild_url = str_replace('http://', 'http://'.$username.':'.$password.'@', $api_url);
|
||||
$rebuild_url = str_replace('https://', 'https://'.$username.':'.$password.'@', $rebuild_url);
|
||||
$rebuild_url = rtrim($rebuild_url, '/');
|
||||
|
||||
$api_url = $rebuild_url.$endpoint;
|
||||
return $api_url;
|
||||
}
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/AdGuardHome/adguardhome.png
Executable file
|
After Width: | Height: | Size: 3.6 KiB |
10
heimdall/config/www/SupportedApps/AdGuardHome/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "140902edbcc424c09736af28ab2de604c3bde936",
|
||||
"name": "AdGuard Home",
|
||||
"website": "https://github.com/AdguardTeam/AdGuardHome",
|
||||
"license": "GNU General Public License v3.0 only",
|
||||
"description": "AdGuard Home is a network-wide software for blocking ads & tracking. After you set it up, it'll cover ALL your home devices, and you don't need any client-side software for that.\r\n\r\nIt operates as a DNS server that re-routes tracking domains to a \"black hole,\" thus preventing your devices from connecting to those servers. It's based on software we use for our public AdGuard DNS servers -- both share a lot of common code.",
|
||||
"enhanced": true,
|
||||
"tile_background": "light",
|
||||
"icon": "adguardhome.png"
|
||||
}
|
||||
18
heimdall/config/www/SupportedApps/AdGuardHome/config.blade.php
Executable file
@@ -0,0 +1,18 @@
|
||||
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')</h2>
|
||||
<div class="items">
|
||||
<div class="input">
|
||||
<label>{{ strtoupper(__('app.url')) }}</label>
|
||||
{!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.username') }}</label>
|
||||
{!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.password') }}</label>
|
||||
{!! Form::password('config[password]', array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
|
||||
</div>
|
||||
</div>
|
||||
10
heimdall/config/www/SupportedApps/AdGuardHome/livestats.blade.php
Executable file
@@ -0,0 +1,10 @@
|
||||
<ul class="livestats">
|
||||
<li>
|
||||
<span class="title">Queries</span>
|
||||
<strong>{!! $dns_queries !!}</strong>
|
||||
</li>
|
||||
<li>
|
||||
<span class="title">Blocked</span>
|
||||
<strong>{!! $blocked_filtering !!}</strong>
|
||||
</li>
|
||||
</ul>
|
||||
5
heimdall/config/www/SupportedApps/Adminer/Adminer.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\Adminer;
|
||||
|
||||
class Adminer extends \App\SupportedApps
|
||||
{
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Adminer/adminer.png
Executable file
|
After Width: | Height: | Size: 14 KiB |
10
heimdall/config/www/SupportedApps/Adminer/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "653caf8bdf55d6a99d77ceacd79f622353cd821a",
|
||||
"name": "Adminer",
|
||||
"website": "https://www.adminer.org",
|
||||
"license": "Apache License 2.0",
|
||||
"description": "Adminer (formerly phpMinAdmin) is a full-featured database management tool written in PHP. Conversely to phpMyAdmin, it consists of a single file ready to deploy to the target server. Adminer is available for MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, Firebird, SimpleDB, Elasticsearch and MongoDB.",
|
||||
"enhanced": false,
|
||||
"tile_background": "light",
|
||||
"icon": "adminer.svg"
|
||||
}
|
||||
5
heimdall/config/www/SupportedApps/Airsonic/Airsonic.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\Airsonic;
|
||||
|
||||
class Airsonic extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Airsonic/airsonic.png
Executable file
|
After Width: | Height: | Size: 3.9 KiB |
10
heimdall/config/www/SupportedApps/Airsonic/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "317f16f137fe0fd9eaf67dd6e203e50c0c1bf319",
|
||||
"name": "Airsonic",
|
||||
"website": "https://airsonic.github.io/",
|
||||
"license": "GNU General Public License v3.0 only",
|
||||
"description": "Airsonic is a free, web-based media streamer, providing ubiquitious access to your music. Use it to share your music with friends, or to listen to your own music while at work.",
|
||||
"enhanced": false,
|
||||
"tile_background": "dark",
|
||||
"icon": "airsonic.png"
|
||||
}
|
||||
54
heimdall/config/www/SupportedApps/AlarmPI/AlarmPI.php
Executable file
@@ -0,0 +1,54 @@
|
||||
<?php namespace App\SupportedApps\AlarmPI;
|
||||
|
||||
class AlarmPI extends \App\SupportedApps implements \App\EnhancedApps {
|
||||
|
||||
public $config;
|
||||
|
||||
//protected $login_first = true; // Uncomment if api requests need to be authed first
|
||||
//protected $method = 'POST'; // Uncomment if requests to the API should be set by POST
|
||||
|
||||
function __construct() {
|
||||
//$this->jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set
|
||||
}
|
||||
|
||||
public function test()
|
||||
{
|
||||
// $test = parent::appTest($this->url('getSensors.json'), $this->attrs);
|
||||
$res = parent::execute($this->url('getSensors.json'), $this->attrs);
|
||||
echo $res->getBody();
|
||||
}
|
||||
|
||||
public function livestats()
|
||||
{
|
||||
$status = 'inactive';
|
||||
|
||||
$res = parent::execute($this->url('getSensors.json'), $this->attrs);
|
||||
$details = json_decode($res->getBody());
|
||||
$activesensors = 0;
|
||||
|
||||
foreach ($details->sensors as $key => $value) {
|
||||
if ($value->enabled && $value->alert){
|
||||
$activesensors += 1;
|
||||
}
|
||||
}
|
||||
|
||||
$data = [];
|
||||
if ($details->triggered){
|
||||
$alarmstatus = 'Intruder';
|
||||
} else if ($details->alarmArmed){
|
||||
$alarmstatus = 'Armed';
|
||||
} else {
|
||||
$alarmstatus = 'Disarmed';
|
||||
}
|
||||
$data['alarm_status'] = $alarmstatus;
|
||||
$data['alarm_sensors'] = $activesensors;
|
||||
return parent::getLiveStats($status, $data);
|
||||
|
||||
}
|
||||
public function url($endpoint)
|
||||
{
|
||||
$this->attrs = ['auth'=> [$this->config->username, $this->config->password, 'Basic']];
|
||||
$api_url = parent::normaliseurl($this->config->url).$endpoint;
|
||||
return $api_url;
|
||||
}
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/AlarmPI/alarmpi.png
Executable file
|
After Width: | Height: | Size: 4.6 KiB |
10
heimdall/config/www/SupportedApps/AlarmPI/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "4a1349c03398a3e66f6efdf6395fb689d80f83fa",
|
||||
"name": "AlarmPI",
|
||||
"website": "https://github.com/bkbilly/AlarmPI",
|
||||
"license": "MIT License",
|
||||
"description": "AlarmPI is a home security system based on Raspberry PI. It supports wired sensors (PIR, Magnetic etc.) and wireless through MQTT or Hikvision.",
|
||||
"enhanced": true,
|
||||
"tile_background": "dark",
|
||||
"icon": "alarmpi.png"
|
||||
}
|
||||
19
heimdall/config/www/SupportedApps/AlarmPI/config.blade.php
Executable file
@@ -0,0 +1,19 @@
|
||||
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')</h2>
|
||||
<div class="items">
|
||||
<div class="input">
|
||||
<label>{{ strtoupper(__('app.url')) }}</label>
|
||||
{!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.username') }}</label>
|
||||
{!! Form::text('config[username]', (isset($item) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.password') }}</label>
|
||||
{!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
10
heimdall/config/www/SupportedApps/AlarmPI/livestats.blade.php
Executable file
@@ -0,0 +1,10 @@
|
||||
<ul class="livestats">
|
||||
<li>
|
||||
<span class="title">Status</span>
|
||||
<strong>{!! $alarm_status !!}</strong>
|
||||
</li>
|
||||
<li>
|
||||
<span class="title">Sensors</span>
|
||||
<strong>{!! $alarm_sensors !!}</strong>
|
||||
</li>
|
||||
</ul>
|
||||
5
heimdall/config/www/SupportedApps/Alertmanager/Alertmanager.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\Alertmanager;
|
||||
|
||||
class Alertmanager extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Alertmanager/alertmanager.png
Executable file
|
After Width: | Height: | Size: 3.4 KiB |
10
heimdall/config/www/SupportedApps/Alertmanager/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "9fe84adc4eb8248be3322c8754a0cf6219d122d6",
|
||||
"name": "Alertmanager",
|
||||
"website": "https://prometheus.io/docs/alerting/alertmanager/",
|
||||
"license": "Apache License 2.0",
|
||||
"description": "The Alertmanager handles alerts sent by client applications such as the Prometheus server. It takes care of deduplicating, grouping, and routing them to the correct receiver integrations such as email, PagerDuty, or OpsGenie. It also takes care of silencing and inhibition of alerts.",
|
||||
"enhanced": false,
|
||||
"tile_background": "light",
|
||||
"icon": "alertmanager.png"
|
||||
}
|
||||
65
heimdall/config/www/SupportedApps/ArchiSteamFarm/ArchiSteamFarm.php
Executable file
@@ -0,0 +1,65 @@
|
||||
<?php namespace App\SupportedApps\ArchiSteamFarm;
|
||||
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ArchiSteamFarm extends \App\SupportedApps implements \App\EnhancedApps {
|
||||
|
||||
public $config;
|
||||
|
||||
//protected $login_first = true; // Uncomment if api requests need to be authed first
|
||||
//protected $method = 'POST'; // Uncomment if requests to the API should be set by POST
|
||||
|
||||
function __construct() {
|
||||
//$this->jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set
|
||||
}
|
||||
|
||||
public function test()
|
||||
{
|
||||
if(!isset($this->config->password))
|
||||
{
|
||||
echo "Invalid password";
|
||||
return;
|
||||
}
|
||||
|
||||
$test = parent::appTest($this->url('status?password='.$this->config->password));
|
||||
echo $test->status;
|
||||
}
|
||||
|
||||
public function livestats()
|
||||
{
|
||||
if(!isset($this->config->password))
|
||||
return parent::getLiveStats("Inactive", []);
|
||||
$status = 'inactive';
|
||||
$res = parent::execute($this->url('api/bot/asf?password='.$this->config->password));
|
||||
$details = json_decode($res->getBody());
|
||||
|
||||
$totalSecondsLeft = 0;
|
||||
$cardToFarmLeft = 0;
|
||||
foreach ($details->Result as $bot) {
|
||||
foreach ($bot->CardsFarmer->GamesToFarm as $game) {
|
||||
$cardToFarmLeft += $game->CardsRemaining;
|
||||
}
|
||||
if(preg_match("@([0-9].*).([0-9]+):([0-9]+):([0-9]+)@", $bot->CardsFarmer->TimeRemaining, $matches))
|
||||
{
|
||||
$totalSecondsLeft += $matches[1] * 24 * 60 * 60; // Days
|
||||
$totalSecondsLeft += $matches[2] * 60 * 60; // Hours
|
||||
$totalSecondsLeft += $matches[3] * 60; // Minutes
|
||||
$totalSecondsLeft += $matches[4]; // Seconds
|
||||
}
|
||||
}
|
||||
|
||||
$d = Carbon::now();
|
||||
$d->addSeconds($totalSecondsLeft);
|
||||
$data = [
|
||||
"time_left" => $d->diffForHumans(null, true, true, 3),
|
||||
"cards_left" => $cardToFarmLeft,
|
||||
];
|
||||
return parent::getLiveStats($status, $data);
|
||||
|
||||
}
|
||||
public function url($endpoint)
|
||||
{
|
||||
$api_url = parent::normaliseurl($this->config->url).$endpoint;
|
||||
return $api_url;
|
||||
}
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/ArchiSteamFarm/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "7779bfb41003301f1b395c0691002423773d68c1",
|
||||
"name": "ArchiSteamFarm",
|
||||
"website": "https://github.com/JustArchiNET/ArchiSteamFarm",
|
||||
"license": "Apache License 2.0",
|
||||
"description": "ASF is a C# application with primary purpose of idling Steam cards from multiple accounts simultaneously. Unlike Idle Master which works only for one account at given time, while requiring Steam client running in the background and launching additional processes imitating \"game playing\" status, ASF doesn't require any Steam client running in the background, doesn't launch any additional processes and is made to handle unlimited Steam accounts at once. In addition to that, it's meant to be run on servers or other desktop-less machines, and features full cross-OS support, which makes it possible to launch on any operating system with .NET Core runtime, such as Windows, Linux and OS X. ASF is possible thanks to gigantic amount of work done in marvelous SteamKit2 library.\r\n\r\nToday, ASF is one of the most versatile Steam power tools, allowing you to make use of many features that were implemented over time. Apart from idling Steam cards, which remains the primary focus, ASF includes bunch of features on its own, such as a possibility to use it as Steam authenticator or chat logger. In addition to that, ASF includes plugin system, thanks to which anybody can further extend it to his/her needs.",
|
||||
"enhanced": true,
|
||||
"tile_background": "dark",
|
||||
"icon": "archisteamfarm.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/ArchiSteamFarm/archisteamfarm.png
Executable file
|
After Width: | Height: | Size: 36 KiB |
15
heimdall/config/www/SupportedApps/ArchiSteamFarm/config.blade.php
Executable file
@@ -0,0 +1,15 @@
|
||||
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')</h2>
|
||||
<div class="items">
|
||||
<div class="input">
|
||||
<label>{{ strtoupper(__('app.url')) }}</label>
|
||||
{!! Form::text('config[override_url]', (isset($item) && isset($item->getconfig()->override_url) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.password') }}</label>
|
||||
{!! Form::text('config[password]', (isset($item) && isset($item->getconfig()->password) ? $item->getconfig()->password : null), array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
19
heimdall/config/www/SupportedApps/ArchiSteamFarm/livestats.blade.php
Executable file
@@ -0,0 +1,19 @@
|
||||
<ul class="livestats">
|
||||
@if(isset($time_left))
|
||||
<li>
|
||||
<span class="title">Time</span>
|
||||
<strong>{{ $time_left }}</strong>
|
||||
</li>
|
||||
@else
|
||||
<li>
|
||||
<span class="title">Connection failed</span>
|
||||
<strong></strong>
|
||||
</li>
|
||||
@endif
|
||||
@if(isset($cards_left))
|
||||
<li>
|
||||
<span class="title">Cards</span>
|
||||
<strong>{{ $cards_left }}</strong>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
5
heimdall/config/www/SupportedApps/ArchiveBox/ArchiveBox.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\ArchiveBox;
|
||||
|
||||
class ArchiveBox extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/ArchiveBox/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "b74f349cf434a529c0fe8589315b5956a4562097",
|
||||
"name": "ArchiveBox",
|
||||
"website": "https://github.com/pirate/ArchiveBox",
|
||||
"license": "MIT License",
|
||||
"description": "The open-source self-hosted web archive. ArchiveBox takes a list of website URLs you want to archive, and creates a local, static, browsable HTML clone of the content from those websites (it saves HTML, JS, media files, PDFs, images and more).",
|
||||
"enhanced": false,
|
||||
"tile_background": "light",
|
||||
"icon": "archivebox.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/ArchiveBox/archivebox.png
Executable file
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\ArchiveTeamWarrior;
|
||||
|
||||
class ArchiveTeamWarrior extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/ArchiveTeamWarrior/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "5eef559f19eadb9593bafbd3ca6155dc6721a0d7",
|
||||
"name": "ArchiveTeam Warrior",
|
||||
"website": "https://www.archiveteam.org/index.php?title=ArchiveTeam_Warrior",
|
||||
"license": "The Unlicense",
|
||||
"description": "The Archive Team Warrior is a virtual archiving appliance. You can run it to help with the ArchiveTeam archiving efforts. It will download sites and upload them to their archive.",
|
||||
"enhanced": false,
|
||||
"tile_background": "light",
|
||||
"icon": "archiveteamwarrior.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/ArchiveTeamWarrior/archiveteamwarrior.png
Executable file
|
After Width: | Height: | Size: 8.6 KiB |
93
heimdall/config/www/SupportedApps/AriaNg/AriaNg.php
Executable file
@@ -0,0 +1,93 @@
|
||||
<?php namespace App\SupportedApps\AriaNg;
|
||||
|
||||
class AriaNg extends \App\SupportedApps implements \App\EnhancedApps {
|
||||
|
||||
public $config;
|
||||
|
||||
//protected $login_first = true; // Uncomment if api requests need to be authed first
|
||||
protected $method = 'POST'; // Uncomment if requests to the API should be set by POST
|
||||
|
||||
function __construct() {
|
||||
$this->jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set
|
||||
}
|
||||
|
||||
public function test()
|
||||
{
|
||||
$attrs = $this->newRequestAttrs('aria2.getVersion');
|
||||
$test = parent::appTest($this->url('jsonrpc'), $attrs);
|
||||
if ($test->code === 200) {
|
||||
$data = json_decode($test->response);
|
||||
if (isset($data->result) && isset($data->result->version)) {
|
||||
$version = $data->result->version;
|
||||
$test->status = "Connected to Aria2 v$version";
|
||||
}
|
||||
else {
|
||||
$test->status ="Unknown Aria2 version";
|
||||
}
|
||||
}
|
||||
echo $test->status;
|
||||
}
|
||||
|
||||
public function livestats()
|
||||
{
|
||||
$status = 'inactive';
|
||||
$attrs = $this->newRequestAttrs('aria2.getGlobalStat');
|
||||
$res = parent::execute($this->url('jsonrpc'), $attrs);
|
||||
|
||||
if ($res == null) {
|
||||
//Log::debug('Aria2 connection failed');
|
||||
return '';
|
||||
}
|
||||
|
||||
$details = json_decode($res->getBody());
|
||||
if (!isset($details->result)) {
|
||||
//Log::debug('Failed to fetch data from Aria2');
|
||||
return '';
|
||||
}
|
||||
|
||||
$downloadSpeed = $details->result->downloadSpeed;
|
||||
$uploadSpeed = $details->result->uploadSpeed;
|
||||
|
||||
$active = $details->result->numActive;
|
||||
$stopped = $details->result->numStopped;
|
||||
$waiting = $details->result->numWaiting;
|
||||
|
||||
if ($active > 0) {
|
||||
$status = 'active';
|
||||
}
|
||||
|
||||
$data = [];
|
||||
$data['download_rate'] = format_bytes($downloadSpeed, false, ' <span>', '/s</span>');
|
||||
$data['upload_rate'] = format_bytes($uploadSpeed, false, ' <span>', '/s</span>');
|
||||
$data['running_count'] = ($active + $waiting) ?? 0;
|
||||
$data['stopped_count'] = $stopped ?? 0;
|
||||
|
||||
return parent::getLiveStats($status, $data);
|
||||
}
|
||||
|
||||
private function newRequestAttrs($rpcMethod)
|
||||
{
|
||||
$body = [
|
||||
'jsonrpc' => '2.0',
|
||||
'id' => 'qwer',
|
||||
'method' => $rpcMethod
|
||||
];
|
||||
if (isset($this->config->password)) {
|
||||
$body['params'] = ['token:'.$this->config->password];
|
||||
}
|
||||
|
||||
$attrs = [
|
||||
'body' => json_encode($body),
|
||||
'cookies' => $this->jar,
|
||||
'headers' => ['Content-Type' => 'application/json', 'Accept' => 'application/json']
|
||||
];
|
||||
|
||||
return $attrs;
|
||||
}
|
||||
|
||||
public function url($endpoint)
|
||||
{
|
||||
$api_url = parent::normaliseurl($this->config->url).$endpoint;
|
||||
return $api_url;
|
||||
}
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/AriaNg/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "a0f88a6334b03ff11dc56d1b627f122ccacb75ce",
|
||||
"name": "AriaNg",
|
||||
"website": "https://github.com/mayswind/AriaNg",
|
||||
"license": "MIT License",
|
||||
"description": "AriaNg is a modern web frontend making aria2 easier to use. AriaNg is written in pure html & javascript, thus it does not need any compilers or runtime environment. You can just put AriaNg in your web server and open it in your browser. AriaNg uses responsive layout, and supports any desktop or mobile devices.",
|
||||
"enhanced": true,
|
||||
"tile_background": "dark",
|
||||
"icon": "ariang.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/AriaNg/ariang.png
Executable file
|
After Width: | Height: | Size: 18 KiB |
14
heimdall/config/www/SupportedApps/AriaNg/config.blade.php
Executable file
@@ -0,0 +1,14 @@
|
||||
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')</h2>
|
||||
<div class="items">
|
||||
<div class="input">
|
||||
<label>{{ strtoupper(__('app.url')) }} (http://HOST:PORT)</label>
|
||||
{!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.password') }} (secret token)</label>
|
||||
{!! Form::password('config[password]', (isset($item) ? $item->getconfig()->password: null), array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
|
||||
</div>
|
||||
</div>
|
||||
4
heimdall/config/www/SupportedApps/AriaNg/livestats.blade.php
Executable file
@@ -0,0 +1,4 @@
|
||||
<ul class="livestats">
|
||||
<li><span class="title">RUN: {{ $running_count}}</span><strong>{!! $download_rate !!}</strong></li>
|
||||
<li><span class="title">DONE: {{ $stopped_count }}</span><strong>{!! $upload_rate !!}</strong></li>
|
||||
</ul>
|
||||
48
heimdall/config/www/SupportedApps/Artifactory/Artifactory.php
Executable file
@@ -0,0 +1,48 @@
|
||||
<?php namespace App\SupportedApps\Artifactory;
|
||||
|
||||
class Artifactory extends \App\SupportedApps implements \App\EnhancedApps {
|
||||
|
||||
public $config;
|
||||
|
||||
//protected $login_first = true; // Uncomment if api requests need to be authed first
|
||||
//protected $method = 'POST'; // Uncomment if requests to the API should be set by POST
|
||||
|
||||
function __construct() {
|
||||
//$this->jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set
|
||||
}
|
||||
|
||||
public function test()
|
||||
{
|
||||
$attrs = [
|
||||
'headers' => ['X-JFrog-Art-Api' => $this->config->apiKey]
|
||||
];
|
||||
echo $this->config->apiKey;
|
||||
$test = parent::appTest($this->url('api/storageinfo'), $attrs);
|
||||
|
||||
echo $test->status;
|
||||
}
|
||||
|
||||
public function livestats()
|
||||
{
|
||||
$status = 'inactive';
|
||||
$attrs = [
|
||||
'headers' => ['X-JFrog-Art-Api' => $this->config->apiKey]
|
||||
];
|
||||
$res = parent::execute($this->url('api/storageinfo'), $attrs);
|
||||
$details = json_decode($res->getBody());
|
||||
|
||||
$data = [];
|
||||
if($details) {
|
||||
$data['artifacts_size'] = $details->binariesSummary->artifactsSize;
|
||||
$data['artifacts_count'] = $details->binariesSummary->artifactsCount;
|
||||
$status = 'active';
|
||||
}
|
||||
return parent::getLiveStats($status, $data);
|
||||
|
||||
}
|
||||
public function url($endpoint)
|
||||
{
|
||||
$api_url = parent::normaliseurl($this->config->url).$endpoint;
|
||||
return $api_url;
|
||||
}
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/Artifactory/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "4950589b19623304e3adb649d9eee6a3bf70c35b",
|
||||
"name": "Artifactory",
|
||||
"website": "https://jfrog.com/open-source/",
|
||||
"license": "MIT License",
|
||||
"description": "Universal Repository Manager, OSS version",
|
||||
"enhanced": true,
|
||||
"tile_background": "light",
|
||||
"icon": "artifactory.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Artifactory/artifactory.png
Executable file
|
After Width: | Height: | Size: 7.0 KiB |
14
heimdall/config/www/SupportedApps/Artifactory/config.blade.php
Executable file
@@ -0,0 +1,14 @@
|
||||
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')</h2>
|
||||
<div class="items">
|
||||
<div class="input">
|
||||
<label>{{ strtoupper(__('app.url')) }}</label>
|
||||
{!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>Api Key</label>
|
||||
{!! Form::input('password', 'config[apiKey]', (isset($item) ? $item->getconfig()->apiKey : null), array('placeholder' => "Api Key", 'data-config' => 'apiKey', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
|
||||
</div>
|
||||
</div>
|
||||
10
heimdall/config/www/SupportedApps/Artifactory/livestats.blade.php
Executable file
@@ -0,0 +1,10 @@
|
||||
<ul class="livestats">
|
||||
<li>
|
||||
<span class="title">Artifacts<br/>Size</span>
|
||||
<strong>{!! $artifacts_size !!}</strong>
|
||||
</li>
|
||||
<li>
|
||||
<span class="title">Artifacts<br/>Count</span>
|
||||
<strong>{!! $artifacts_count !!}</strong>
|
||||
</li>
|
||||
</ul>
|
||||
5
heimdall/config/www/SupportedApps/AsrockRackIPMI/AsrockRackIPMI.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\AsrockRackIPMI;
|
||||
|
||||
class AsrockRackIPMI extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/AsrockRackIPMI/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "fa8a2fb9dfd946ec30d5e6b2ee69e24f8a252c5b",
|
||||
"name": "Asrock Rack IPMI",
|
||||
"website": "https://www.asrockrack.com/support/faq.de.asp?id=28",
|
||||
"license": "Commercial",
|
||||
"description": "Asrock Rack IPMI is an embedded server management technology by Asrock Rack.",
|
||||
"enhanced": false,
|
||||
"tile_background": "light",
|
||||
"icon": "asrockrackipmi.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/AsrockRackIPMI/asrockrackipmi.png
Executable file
|
After Width: | Height: | Size: 4.5 KiB |
5
heimdall/config/www/SupportedApps/Bacula/Bacula.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\Bacula;
|
||||
|
||||
class Bacula extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/Bacula/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "808ff47f28ddce2652860f5da59a4c62a7e285dd",
|
||||
"name": "Bacula",
|
||||
"website": "https://www.bacula.org/",
|
||||
"license": "GNU Affero General Public License v3.0",
|
||||
"description": "Bacula is a set of Open Source, computer programs that permit you (or the system administrator) to manage backup, recovery, and verification of computer data across a network of computers of different kinds.",
|
||||
"enhanced": false,
|
||||
"tile_background": "light",
|
||||
"icon": "bacula.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Bacula/bacula.png
Executable file
|
After Width: | Height: | Size: 6.4 KiB |
5
heimdall/config/www/SupportedApps/Baikal/Baikal.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\Baikal;
|
||||
|
||||
class Baikal extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/Baikal/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "2577aa56d31c9817a26e412e90d419f70ebc6353",
|
||||
"name": "Baïkal",
|
||||
"website": "https://sabre.io/baikal/",
|
||||
"license": "GNU General Public License v3.0 only",
|
||||
"description": "Baïkal is a lightweight CalDAV+CardDAV server. It offers an extensive web interface with easy management of users, address books and calendars. It is fast and simple to install and only needs a basic php capable server. The data can be stored in a MySQL or a SQLite database.",
|
||||
"enhanced": false,
|
||||
"tile_background": "dark",
|
||||
"icon": "baikal.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Baikal/baikal.png
Executable file
|
After Width: | Height: | Size: 2.3 KiB |
5
heimdall/config/www/SupportedApps/Bastillion/Bastillion.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\Bastillion;
|
||||
|
||||
class Bastillion extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/Bastillion/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "c07ac2e365e175d304c1cd409bcfc288ff18594f",
|
||||
"name": "Bastillion",
|
||||
"website": "https://www.bastillion.io",
|
||||
"license": "GNU Affero General Public License v3.0 or later",
|
||||
"description": "Bastillion is an open-source web-based SSH console that centrally manages administrative access to systems. A bastion host for administrators with features that promote infrastructure security, including key management and auditing.",
|
||||
"enhanced": false,
|
||||
"tile_background": "dark",
|
||||
"icon": "bastillion.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Bastillion/bastillion.png
Executable file
|
After Width: | Height: | Size: 4.0 KiB |
50
heimdall/config/www/SupportedApps/Bazarr/Bazarr.php
Executable file
@@ -0,0 +1,50 @@
|
||||
<?php namespace App\SupportedApps\Bazarr;
|
||||
|
||||
class Bazarr extends \App\SupportedApps implements \App\EnhancedApps {
|
||||
|
||||
public $config;
|
||||
|
||||
//protected $login_first = true; // Uncomment if api requests need to be authed first
|
||||
//protected $method = 'POST'; // Uncomment if requests to the API should be set by POST
|
||||
|
||||
function __construct() {
|
||||
//$this->jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set
|
||||
}
|
||||
|
||||
public function test()
|
||||
{
|
||||
$attrs = [
|
||||
'headers' => ['Accept' => 'application/json']
|
||||
];
|
||||
$test = parent::appTest($this->url('systemstatus'), $attrs);
|
||||
echo $test->status;
|
||||
}
|
||||
|
||||
public function livestats()
|
||||
{
|
||||
$status = 'inactive';
|
||||
$data = [];
|
||||
$attrs = [
|
||||
'headers' => ['Accept' => 'application/json']
|
||||
];
|
||||
|
||||
|
||||
$badges = json_decode(parent::execute($this->url('badges'), $attrs)->getBody());
|
||||
|
||||
$data = [];
|
||||
|
||||
if($badges) {
|
||||
$data['movies'] = $badges->movies ?? 0;
|
||||
$data['series'] = $badges->episodes ?? 0;
|
||||
}
|
||||
|
||||
return parent::getLiveStats($status, $data);
|
||||
|
||||
}
|
||||
|
||||
public function url($endpoint)
|
||||
{
|
||||
$api_url = parent::normaliseurl($this->config->url).'api/'.$endpoint.'?apikey='.$this->config->apikey;
|
||||
return $api_url;
|
||||
}
|
||||
}
|
||||
27
heimdall/config/www/SupportedApps/Bazarr/app.json
Executable file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"appid": "085f0b437f9bf9c98bb68b745c8dcf323a7e0499",
|
||||
"name": "Bazarr",
|
||||
"website": "https://github.com/morpheus65535/bazarr",
|
||||
"license": "GNU General Public License v3.0 only",
|
||||
"description": "Bazarr is a companion application to Sonarr and Radarr. It manage and download subtitles based on your requirements. You defined your preferences by TV show or movies and Bazarr take care of everything for you.",
|
||||
"enhanced": true,
|
||||
"tile_background": "dark",
|
||||
"icon": "bazarr.png",
|
||||
"config": {
|
||||
"type": "apikey",
|
||||
"stat1": {
|
||||
"name": "missing series",
|
||||
"url": ":url:/api/episodes/wanted?apikey=:apikey:",
|
||||
"key": "total",
|
||||
"filter": "none",
|
||||
"updateOnChange": "No"
|
||||
},
|
||||
"stat2": {
|
||||
"name": "missing movies",
|
||||
"url": ":url:/api/movies/wanted?apikey=:apikey:",
|
||||
"key": "total",
|
||||
"filter": "none",
|
||||
"updateOnChange": "No"
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Bazarr/bazarr.png
Executable file
|
After Width: | Height: | Size: 6.3 KiB |
15
heimdall/config/www/SupportedApps/Bazarr/config.blade.php
Executable file
@@ -0,0 +1,15 @@
|
||||
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')</h2>
|
||||
<div class="items">
|
||||
<div class="input">
|
||||
<label>{{ strtoupper(__('app.url')) }}</label>
|
||||
{!! Form::text('config[override_url]', (isset($item) && isset($item->getconfig()->override_url) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>{{ __('app.apps.apikey') }}</label>
|
||||
{!! Form::text('config[apikey]', (isset($item) && isset($item->getconfig()->apikey) ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
10
heimdall/config/www/SupportedApps/Bazarr/livestats.blade.php
Executable file
@@ -0,0 +1,10 @@
|
||||
<ul class="livestats">
|
||||
<li>
|
||||
<span class="title">Movies</span>
|
||||
<strong>{!! $movies !!}</strong>
|
||||
</li>
|
||||
<li>
|
||||
<span class="title">Episodes</span>
|
||||
<strong>{!! $series !!}</strong>
|
||||
</li>
|
||||
</ul>
|
||||
5
heimdall/config/www/SupportedApps/Bitwarden/Bitwarden.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\Bitwarden;
|
||||
|
||||
class Bitwarden extends \App\SupportedApps
|
||||
{
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/Bitwarden/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "8a846dca305866d821748c007cf6b64adf00ea22",
|
||||
"name": "Bitwarden",
|
||||
"website": "https://bitwarden.com",
|
||||
"license": "GNU Affero General Public License v3.0",
|
||||
"description": "Open source password management solutions for individuals, teams, and business organizations.",
|
||||
"enhanced": false,
|
||||
"tile_background": "dark",
|
||||
"icon": "bitwarden.svg"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Bitwarden/bitwarden.png
Executable file
|
After Width: | Height: | Size: 1.9 KiB |
5
heimdall/config/www/SupportedApps/Booksonic/Booksonic.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\Booksonic;
|
||||
|
||||
class Booksonic extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/Booksonic/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "091d3909d7e0bde850659125a13712c0122a6493",
|
||||
"name": "Booksonic",
|
||||
"website": "http://booksonic.org/",
|
||||
"license": "GPL",
|
||||
"description": "Booksonic is a server and an app for streaming your audiobooks to any pc or android phone. Most of the functionality is also available on other platforms that have apps for subsonic.",
|
||||
"enhanced": false,
|
||||
"tile_background": "dark",
|
||||
"icon": "booksonic.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Booksonic/booksonic.png
Executable file
|
After Width: | Height: | Size: 39 KiB |
65
heimdall/config/www/SupportedApps/Bookstack/Bookstack.php
Executable file
@@ -0,0 +1,65 @@
|
||||
<?php namespace App\SupportedApps\Bookstack;
|
||||
|
||||
class Bookstack extends \App\SupportedApps implements \App\EnhancedApps {
|
||||
|
||||
public $config;
|
||||
|
||||
//protected $login_first = true; // Uncomment if api requests need to be authed first
|
||||
//protected $method = 'POST'; // Uncomment if requests to the API should be set by POST
|
||||
|
||||
function __construct() {
|
||||
//$this->jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set
|
||||
}
|
||||
|
||||
public function getHeaders()
|
||||
{
|
||||
$api_token = $this->config->api_token.":".$this->config->api_secret;
|
||||
|
||||
$attrs['headers'] = ['Authorization' => 'Token '.$api_token];
|
||||
return $attrs;
|
||||
}
|
||||
|
||||
public function test()
|
||||
{
|
||||
$test = parent::appTest($this->url('/api/shelves?count=0'), $this->getHeaders());
|
||||
echo $test->status;
|
||||
}
|
||||
|
||||
public function livestats()
|
||||
{
|
||||
$status = 'inactive';
|
||||
|
||||
$attrs = $this->getHeaders();
|
||||
|
||||
$data = ['visiblestats' => []];
|
||||
|
||||
foreach($this->config->availablestats as $stat) {
|
||||
if (!isset(self::getAvailableStats()[$stat])) continue;
|
||||
|
||||
$res = parent::execute($this->url('/api/'.$stat.'?count=0'), $attrs);
|
||||
$details = json_decode($res->getBody());
|
||||
|
||||
$newstat = new \stdClass();
|
||||
$newstat->title = self::getAvailableStats()[$stat];
|
||||
$newstat->value = isset($details->total) ? number_format($details->total) : 'N/A';
|
||||
|
||||
$data['visiblestats'][] = $newstat;
|
||||
}
|
||||
|
||||
return parent::getLiveStats($status, $data);
|
||||
}
|
||||
|
||||
public function url($endpoint)
|
||||
{
|
||||
$api_url = parent::normaliseurl($this->config->url).$endpoint;
|
||||
return $api_url;
|
||||
}
|
||||
|
||||
public static function getAvailableStats() {
|
||||
return [
|
||||
'shelves'=>'Shelves',
|
||||
'books'=>'Books',
|
||||
'chapters'=>'Chapters',
|
||||
];
|
||||
}
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/Bookstack/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "348c49dd03dddd418929316668d2e67bf2d9ae88",
|
||||
"name": "Bookstack",
|
||||
"website": "https://www.bookstackapp.com/",
|
||||
"license": "MIT License",
|
||||
"description": "BookStack is a simple, self-hosted, easy-to-use platform for organising and storing information.",
|
||||
"enhanced": true,
|
||||
"tile_background": "dark",
|
||||
"icon": "bookstack.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Bookstack/bookstack.png
Executable file
|
After Width: | Height: | Size: 17 KiB |
23
heimdall/config/www/SupportedApps/Bookstack/config.blade.php
Executable file
@@ -0,0 +1,23 @@
|
||||
<h2>{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')</h2>
|
||||
<div class="items">
|
||||
<div class="input">
|
||||
<label>{{ strtoupper(__('app.url')) }}</label>
|
||||
{!! Form::text('config[override_url]', isset($item) ? ($item->getConfig()->override_url ?? null) : null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>Token ID</label>
|
||||
{!! Form::text('config[api_token]', null, array('placeholder' => 'Token ID', 'data-config' => 'api_token', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>Token Secret</label>
|
||||
{!! Form::text('config[api_secret]', null, array('placeholder' => 'Token Secret', 'data-config' => 'api_secret', 'class' => 'form-control config-item')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<label>Stats to show</label>
|
||||
{!! Form::select('config[availablestats][]', App\SupportedApps\Bookstack\Bookstack::getAvailableStats(), isset($item) ? ($item->getConfig()->availablestats ?? null) : null, array('multiple'=>'multiple')) !!}
|
||||
</div>
|
||||
<div class="input">
|
||||
<button style="margin-top: 32px;" class="btn test" id="test_config">Test</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
8
heimdall/config/www/SupportedApps/Bookstack/livestats.blade.php
Executable file
@@ -0,0 +1,8 @@
|
||||
<ul class="livestats">
|
||||
@foreach ($visiblestats as $stat)
|
||||
<li>
|
||||
<span class="title">{!! $stat->title !!}</span>
|
||||
<strong>{!! $stat->value !!}</strong>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
5
heimdall/config/www/SupportedApps/Box/Box.php
Executable file
@@ -0,0 +1,5 @@
|
||||
<?php namespace App\SupportedApps\Box;
|
||||
|
||||
class Box extends \App\SupportedApps {
|
||||
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/Box/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "c7d8a6d722a1ec9a16fae165177c418d4fd63175",
|
||||
"name": "Box",
|
||||
"website": "box.com",
|
||||
"license": "Commercial",
|
||||
"description": "The company focuses on cloud content management and file sharing service for businesses.",
|
||||
"enhanced": false,
|
||||
"tile_background": "dark",
|
||||
"icon": "box.png"
|
||||
}
|
||||
BIN
heimdall/config/www/SupportedApps/Box/box.png
Executable file
|
After Width: | Height: | Size: 106 KiB |
7
heimdall/config/www/SupportedApps/CUPS/CUPS.php
Executable file
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
namespace App\SupportedApps\CUPS;
|
||||
|
||||
class CUPS extends \App\SupportedApps
|
||||
{
|
||||
}
|
||||
10
heimdall/config/www/SupportedApps/CUPS/app.json
Executable file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"appid": "ba8ed4dc9e438b22c9456a78a2c09652955be42c",
|
||||
"name": "CUPS",
|
||||
"website": "https://www.cups.org",
|
||||
"license": "GNU General Public License v1.0 or later",
|
||||
"description": "The standards-based, open source printing system developed by Apple for iOS®, iPadOS®, and macOS®. CUPS uses IPP Everywhere™ to support printing to local and network printers.",
|
||||
"enhanced": false,
|
||||
"tile_background": "light",
|
||||
"icon": "cups.svg"
|
||||
}
|
||||