diff --git a/heimdall/config/.migrations b/heimdall/config/.migrations new file mode 100755 index 0000000..588a613 --- /dev/null +++ b/heimdall/config/.migrations @@ -0,0 +1,2 @@ +01-nginx-site-confs-default +02-default-location diff --git a/heimdall/config/keys/cert.crt b/heimdall/config/keys/cert.crt new file mode 100755 index 0000000..229a8be --- /dev/null +++ b/heimdall/config/keys/cert.crt @@ -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----- diff --git a/heimdall/config/keys/cert.key b/heimdall/config/keys/cert.key new file mode 100755 index 0000000..b454610 --- /dev/null +++ b/heimdall/config/keys/cert.key @@ -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----- diff --git a/heimdall/config/nginx/dhparams.pem b/heimdall/config/nginx/dhparams.pem new file mode 100755 index 0000000..eed4c41 --- /dev/null +++ b/heimdall/config/nginx/dhparams.pem @@ -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----- \ No newline at end of file diff --git a/heimdall/config/nginx/nginx.conf b/heimdall/config/nginx/nginx.conf new file mode 100755 index 0000000..476fd8f --- /dev/null +++ b/heimdall/config/nginx/nginx.conf @@ -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; diff --git a/heimdall/config/nginx/nginx.conf.sample b/heimdall/config/nginx/nginx.conf.sample new file mode 100755 index 0000000..e57699a --- /dev/null +++ b/heimdall/config/nginx/nginx.conf.sample @@ -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; diff --git a/heimdall/config/nginx/resolver.conf b/heimdall/config/nginx/resolver.conf new file mode 100755 index 0000000..1ae22e7 --- /dev/null +++ b/heimdall/config/nginx/resolver.conf @@ -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; diff --git a/heimdall/config/nginx/site-confs/default.conf b/heimdall/config/nginx/site-confs/default.conf new file mode 100755 index 0000000..4c431da --- /dev/null +++ b/heimdall/config/nginx/site-confs/default.conf @@ -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; + + } +} diff --git a/heimdall/config/nginx/site-confs/default.conf.sample b/heimdall/config/nginx/site-confs/default.conf.sample new file mode 100755 index 0000000..626004d --- /dev/null +++ b/heimdall/config/nginx/site-confs/default.conf.sample @@ -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; + } +} diff --git a/heimdall/config/nginx/ssl.conf b/heimdall/config/nginx/ssl.conf new file mode 100755 index 0000000..2cc2368 --- /dev/null +++ b/heimdall/config/nginx/ssl.conf @@ -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; diff --git a/heimdall/config/nginx/ssl.conf.sample b/heimdall/config/nginx/ssl.conf.sample new file mode 100755 index 0000000..f1483ad --- /dev/null +++ b/heimdall/config/nginx/ssl.conf.sample @@ -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; diff --git a/heimdall/config/nginx/worker_processes.conf b/heimdall/config/nginx/worker_processes.conf new file mode 100755 index 0000000..94de038 --- /dev/null +++ b/heimdall/config/nginx/worker_processes.conf @@ -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; diff --git a/heimdall/config/php/php-local.ini b/heimdall/config/php/php-local.ini new file mode 100755 index 0000000..8087616 --- /dev/null +++ b/heimdall/config/php/php-local.ini @@ -0,0 +1,3 @@ +; Edit this file to override php.ini directives and restart the container + +date.timezone = Europe/Paris diff --git a/heimdall/config/php/www2.conf b/heimdall/config/php/www2.conf new file mode 100755 index 0000000..13fc59d --- /dev/null +++ b/heimdall/config/php/www2.conf @@ -0,0 +1,5 @@ +; Edit this file to override www.conf and php-fpm.conf directives and restart the container + +; Pool name +[www] + diff --git a/heimdall/config/www/.env b/heimdall/config/www/.env new file mode 100755 index 0000000..fa545ab --- /dev/null +++ b/heimdall/config/www/.env @@ -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 diff --git a/heimdall/config/www/SupportedApps/AMP/AMP.php b/heimdall/config/www/SupportedApps/AMP/AMP.php new file mode 100755 index 0000000..6b5a8de --- /dev/null +++ b/heimdall/config/www/SupportedApps/AMP/AMP.php @@ -0,0 +1,5 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/AWX/app.json b/heimdall/config/www/SupportedApps/AWX/app.json new file mode 100755 index 0000000..d691f67 --- /dev/null +++ b/heimdall/config/www/SupportedApps/AWX/app.json @@ -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" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/AWX/awx.png b/heimdall/config/www/SupportedApps/AWX/awx.png new file mode 100755 index 0000000..084864e Binary files /dev/null and b/heimdall/config/www/SupportedApps/AWX/awx.png differ diff --git a/heimdall/config/www/SupportedApps/AWX/config.blade.php b/heimdall/config/www/SupportedApps/AWX/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/AWX/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/AWX/livestats.blade.php b/heimdall/config/www/SupportedApps/AWX/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/AWX/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/AdGuardHome/AdGuardHome.php b/heimdall/config/www/SupportedApps/AdGuardHome/AdGuardHome.php new file mode 100755 index 0000000..9d95545 --- /dev/null +++ b/heimdall/config/www/SupportedApps/AdGuardHome/AdGuardHome.php @@ -0,0 +1,52 @@ +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; + } +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/AdGuardHome/adguardhome.png b/heimdall/config/www/SupportedApps/AdGuardHome/adguardhome.png new file mode 100755 index 0000000..ff33d08 Binary files /dev/null and b/heimdall/config/www/SupportedApps/AdGuardHome/adguardhome.png differ diff --git a/heimdall/config/www/SupportedApps/AdGuardHome/app.json b/heimdall/config/www/SupportedApps/AdGuardHome/app.json new file mode 100755 index 0000000..b024be3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/AdGuardHome/app.json @@ -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" +} diff --git a/heimdall/config/www/SupportedApps/AdGuardHome/config.blade.php b/heimdall/config/www/SupportedApps/AdGuardHome/config.blade.php new file mode 100755 index 0000000..421641f --- /dev/null +++ b/heimdall/config/www/SupportedApps/AdGuardHome/config.blade.php @@ -0,0 +1,18 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::password('config[password]', array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/AdGuardHome/livestats.blade.php b/heimdall/config/www/SupportedApps/AdGuardHome/livestats.blade.php new file mode 100755 index 0000000..ec3d696 --- /dev/null +++ b/heimdall/config/www/SupportedApps/AdGuardHome/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Adminer/Adminer.php b/heimdall/config/www/SupportedApps/Adminer/Adminer.php new file mode 100755 index 0000000..e484f90 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Adminer/Adminer.php @@ -0,0 +1,5 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/AlarmPI/alarmpi.png b/heimdall/config/www/SupportedApps/AlarmPI/alarmpi.png new file mode 100755 index 0000000..d34d857 Binary files /dev/null and b/heimdall/config/www/SupportedApps/AlarmPI/alarmpi.png differ diff --git a/heimdall/config/www/SupportedApps/AlarmPI/app.json b/heimdall/config/www/SupportedApps/AlarmPI/app.json new file mode 100755 index 0000000..b81a15f --- /dev/null +++ b/heimdall/config/www/SupportedApps/AlarmPI/app.json @@ -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" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/AlarmPI/config.blade.php b/heimdall/config/www/SupportedApps/AlarmPI/config.blade.php new file mode 100755 index 0000000..3527523 --- /dev/null +++ b/heimdall/config/www/SupportedApps/AlarmPI/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', (isset($item) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/AlarmPI/livestats.blade.php b/heimdall/config/www/SupportedApps/AlarmPI/livestats.blade.php new file mode 100755 index 0000000..135f679 --- /dev/null +++ b/heimdall/config/www/SupportedApps/AlarmPI/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Alertmanager/Alertmanager.php b/heimdall/config/www/SupportedApps/Alertmanager/Alertmanager.php new file mode 100755 index 0000000..92841e8 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Alertmanager/Alertmanager.php @@ -0,0 +1,5 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/ArchiSteamFarm/app.json b/heimdall/config/www/SupportedApps/ArchiSteamFarm/app.json new file mode 100755 index 0000000..55f0c9a --- /dev/null +++ b/heimdall/config/www/SupportedApps/ArchiSteamFarm/app.json @@ -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" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/ArchiSteamFarm/archisteamfarm.png b/heimdall/config/www/SupportedApps/ArchiSteamFarm/archisteamfarm.png new file mode 100755 index 0000000..810ba16 Binary files /dev/null and b/heimdall/config/www/SupportedApps/ArchiSteamFarm/archisteamfarm.png differ diff --git a/heimdall/config/www/SupportedApps/ArchiSteamFarm/config.blade.php b/heimdall/config/www/SupportedApps/ArchiSteamFarm/config.blade.php new file mode 100755 index 0000000..c92e58a --- /dev/null +++ b/heimdall/config/www/SupportedApps/ArchiSteamFarm/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! 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')) !!} +
+
+ + {!! 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')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/ArchiSteamFarm/livestats.blade.php b/heimdall/config/www/SupportedApps/ArchiSteamFarm/livestats.blade.php new file mode 100755 index 0000000..6faa867 --- /dev/null +++ b/heimdall/config/www/SupportedApps/ArchiSteamFarm/livestats.blade.php @@ -0,0 +1,19 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/ArchiveBox/ArchiveBox.php b/heimdall/config/www/SupportedApps/ArchiveBox/ArchiveBox.php new file mode 100755 index 0000000..b399d45 --- /dev/null +++ b/heimdall/config/www/SupportedApps/ArchiveBox/ArchiveBox.php @@ -0,0 +1,5 @@ +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, ' ', '/s'); + $data['upload_rate'] = format_bytes($uploadSpeed, false, ' ', '/s'); + $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; + } +} diff --git a/heimdall/config/www/SupportedApps/AriaNg/app.json b/heimdall/config/www/SupportedApps/AriaNg/app.json new file mode 100755 index 0000000..3050699 --- /dev/null +++ b/heimdall/config/www/SupportedApps/AriaNg/app.json @@ -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" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/AriaNg/ariang.png b/heimdall/config/www/SupportedApps/AriaNg/ariang.png new file mode 100755 index 0000000..3bf663f Binary files /dev/null and b/heimdall/config/www/SupportedApps/AriaNg/ariang.png differ diff --git a/heimdall/config/www/SupportedApps/AriaNg/config.blade.php b/heimdall/config/www/SupportedApps/AriaNg/config.blade.php new file mode 100755 index 0000000..2cca94e --- /dev/null +++ b/heimdall/config/www/SupportedApps/AriaNg/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::password('config[password]', (isset($item) ? $item->getconfig()->password: null), array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/AriaNg/livestats.blade.php b/heimdall/config/www/SupportedApps/AriaNg/livestats.blade.php new file mode 100755 index 0000000..af5af46 --- /dev/null +++ b/heimdall/config/www/SupportedApps/AriaNg/livestats.blade.php @@ -0,0 +1,4 @@ + diff --git a/heimdall/config/www/SupportedApps/Artifactory/Artifactory.php b/heimdall/config/www/SupportedApps/Artifactory/Artifactory.php new file mode 100755 index 0000000..da7b608 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Artifactory/Artifactory.php @@ -0,0 +1,48 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/Artifactory/app.json b/heimdall/config/www/SupportedApps/Artifactory/app.json new file mode 100755 index 0000000..a2a4147 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Artifactory/app.json @@ -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" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Artifactory/artifactory.png b/heimdall/config/www/SupportedApps/Artifactory/artifactory.png new file mode 100755 index 0000000..f3e14fe Binary files /dev/null and b/heimdall/config/www/SupportedApps/Artifactory/artifactory.png differ diff --git a/heimdall/config/www/SupportedApps/Artifactory/config.blade.php b/heimdall/config/www/SupportedApps/Artifactory/config.blade.php new file mode 100755 index 0000000..1f7f3cd --- /dev/null +++ b/heimdall/config/www/SupportedApps/Artifactory/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::input('password', 'config[apiKey]', (isset($item) ? $item->getconfig()->apiKey : null), array('placeholder' => "Api Key", 'data-config' => 'apiKey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Artifactory/livestats.blade.php b/heimdall/config/www/SupportedApps/Artifactory/livestats.blade.php new file mode 100755 index 0000000..8dcd85d --- /dev/null +++ b/heimdall/config/www/SupportedApps/Artifactory/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/AsrockRackIPMI/AsrockRackIPMI.php b/heimdall/config/www/SupportedApps/AsrockRackIPMI/AsrockRackIPMI.php new file mode 100755 index 0000000..1bfd497 --- /dev/null +++ b/heimdall/config/www/SupportedApps/AsrockRackIPMI/AsrockRackIPMI.php @@ -0,0 +1,5 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/Bazarr/app.json b/heimdall/config/www/SupportedApps/Bazarr/app.json new file mode 100755 index 0000000..c67c2ea --- /dev/null +++ b/heimdall/config/www/SupportedApps/Bazarr/app.json @@ -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" + } + } +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Bazarr/bazarr.png b/heimdall/config/www/SupportedApps/Bazarr/bazarr.png new file mode 100755 index 0000000..7ba609c Binary files /dev/null and b/heimdall/config/www/SupportedApps/Bazarr/bazarr.png differ diff --git a/heimdall/config/www/SupportedApps/Bazarr/config.blade.php b/heimdall/config/www/SupportedApps/Bazarr/config.blade.php new file mode 100755 index 0000000..7e8b1a6 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Bazarr/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! 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')) !!} +
+
+ + {!! 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')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Bazarr/livestats.blade.php b/heimdall/config/www/SupportedApps/Bazarr/livestats.blade.php new file mode 100755 index 0000000..dabf7cc --- /dev/null +++ b/heimdall/config/www/SupportedApps/Bazarr/livestats.blade.php @@ -0,0 +1,10 @@ + diff --git a/heimdall/config/www/SupportedApps/Bitwarden/Bitwarden.php b/heimdall/config/www/SupportedApps/Bitwarden/Bitwarden.php new file mode 100755 index 0000000..525e87e --- /dev/null +++ b/heimdall/config/www/SupportedApps/Bitwarden/Bitwarden.php @@ -0,0 +1,5 @@ +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', + ]; + } +} diff --git a/heimdall/config/www/SupportedApps/Bookstack/app.json b/heimdall/config/www/SupportedApps/Bookstack/app.json new file mode 100755 index 0000000..db94506 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Bookstack/app.json @@ -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" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Bookstack/bookstack.png b/heimdall/config/www/SupportedApps/Bookstack/bookstack.png new file mode 100755 index 0000000..949b055 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Bookstack/bookstack.png differ diff --git a/heimdall/config/www/SupportedApps/Bookstack/config.blade.php b/heimdall/config/www/SupportedApps/Bookstack/config.blade.php new file mode 100755 index 0000000..4516546 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Bookstack/config.blade.php @@ -0,0 +1,23 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item) ? ($item->getConfig()->override_url ?? null) : null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[api_token]', null, array('placeholder' => 'Token ID', 'data-config' => 'api_token', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[api_secret]', null, array('placeholder' => 'Token Secret', 'data-config' => 'api_secret', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::select('config[availablestats][]', App\SupportedApps\Bookstack\Bookstack::getAvailableStats(), isset($item) ? ($item->getConfig()->availablestats ?? null) : null, array('multiple'=>'multiple')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Bookstack/livestats.blade.php b/heimdall/config/www/SupportedApps/Bookstack/livestats.blade.php new file mode 100755 index 0000000..503a959 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Bookstack/livestats.blade.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Box/Box.php b/heimdall/config/www/SupportedApps/Box/Box.php new file mode 100755 index 0000000..62e73df --- /dev/null +++ b/heimdall/config/www/SupportedApps/Box/Box.php @@ -0,0 +1,5 @@ +url(self::ENDPOINT)); + echo $test->status; + } + + public function livestats() + { + $result = parent::execute($this->url(self::ENDPOINT)); + $services = json_decode($result->getBody()); + + $results = [ + self::STATUS_PASSING => 0, + self::STATUS_WARNING => 0, + self::STATUS_ERROR => 0, + self::STATUS_CRITICAL => 0, + ]; + + foreach ($services as $service) { + $overallStatus = ucfirst(strtolower($service->overall_status ?? '')); + + if (isset($results[$overallStatus])) { + $results[$overallStatus]++; + } + } + + if ($results[self::STATUS_CRITICAL] > 0) { + $status = self::STATUS_CRITICAL; + } elseif ($results[self::STATUS_ERROR] > 0) { + $status = self::STATUS_ERROR; + } elseif ($results[self::STATUS_WARNING] > 0) { + $status = self::STATUS_WARNING; + } else { + $status = self::STATUS_PASSING; + } + + $data['status_output'] = $status; + $data['count_output'] = $results[$status]; + + return parent::getLiveStats('inactive', $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Cabot/app.json b/heimdall/config/www/SupportedApps/Cabot/app.json new file mode 100755 index 0000000..d4cab1e --- /dev/null +++ b/heimdall/config/www/SupportedApps/Cabot/app.json @@ -0,0 +1,10 @@ +{ + "appid": "36cf09d76e7173b82ef23504aae37c05784b0215", + "name": "Cabot", + "website": "https://cabotapp.com", + "license": "MIT License", + "description": "Self-hosted watchdog for your websites and infrastructure.", + "enhanced": true, + "tile_background": "light", + "icon": "cabot.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Cabot/cabot.png b/heimdall/config/www/SupportedApps/Cabot/cabot.png new file mode 100755 index 0000000..09e9c6a Binary files /dev/null and b/heimdall/config/www/SupportedApps/Cabot/cabot.png differ diff --git a/heimdall/config/www/SupportedApps/Cabot/config.blade.php b/heimdall/config/www/SupportedApps/Cabot/config.blade.php new file mode 100755 index 0000000..6f527d8 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Cabot/config.blade.php @@ -0,0 +1,10 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Cabot/livestats.blade.php b/heimdall/config/www/SupportedApps/Cabot/livestats.blade.php new file mode 100755 index 0000000..93bb30f --- /dev/null +++ b/heimdall/config/www/SupportedApps/Cabot/livestats.blade.php @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/CalibreWeb/CalibreWeb.php b/heimdall/config/www/SupportedApps/CalibreWeb/CalibreWeb.php new file mode 100755 index 0000000..7adc224 --- /dev/null +++ b/heimdall/config/www/SupportedApps/CalibreWeb/CalibreWeb.php @@ -0,0 +1,5 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/Cockpit/app.json b/heimdall/config/www/SupportedApps/Cockpit/app.json new file mode 100755 index 0000000..648d4d2 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Cockpit/app.json @@ -0,0 +1,10 @@ +{ + "appid": "e4475bc2121ed1ffd1e742c7c2521ca0f16cef93", + "name": "Cockpit", + "website": "https://cockpit-project.org/", + "license": "GNU Lesser General Public License v2.1 only", + "description": "Cockpit is an interactive server admin interface. It is easy to use and very lightweight. Cockpit interacts directly with the operating system from a real Linux session in a browser.", + "enhanced": true, + "tile_background": "dark", + "icon": "cockpit.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Cockpit/cockpit.png b/heimdall/config/www/SupportedApps/Cockpit/cockpit.png new file mode 100755 index 0000000..74813fc Binary files /dev/null and b/heimdall/config/www/SupportedApps/Cockpit/cockpit.png differ diff --git a/heimdall/config/www/SupportedApps/Cockpit/config.blade.php b/heimdall/config/www/SupportedApps/Cockpit/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Cockpit/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Cockpit/livestats.blade.php b/heimdall/config/www/SupportedApps/Cockpit/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Cockpit/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/CockpitCMS/CockpitCMS.php b/heimdall/config/www/SupportedApps/CockpitCMS/CockpitCMS.php new file mode 100755 index 0000000..6be9f82 --- /dev/null +++ b/heimdall/config/www/SupportedApps/CockpitCMS/CockpitCMS.php @@ -0,0 +1,5 @@ + + + + + + + + + + + + + + + + + diff --git a/heimdall/config/www/SupportedApps/CouchPotato/CouchPotato.php b/heimdall/config/www/SupportedApps/CouchPotato/CouchPotato.php new file mode 100755 index 0000000..6ced4ca --- /dev/null +++ b/heimdall/config/www/SupportedApps/CouchPotato/CouchPotato.php @@ -0,0 +1,40 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('app.available')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $data = []; + + $movies = json_decode(parent::execute($this->url('movie.list'))->getBody()); + $collect = collect($movies->movies); + $missing = $collect->where('status', '!=', 'done'); + if($missing) { + $data['missing'] = $missing->count() ?? 0; + } + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).'api/'.$this->config->apikey.'/'.$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/CouchPotato/app.json b/heimdall/config/www/SupportedApps/CouchPotato/app.json new file mode 100755 index 0000000..2e57036 --- /dev/null +++ b/heimdall/config/www/SupportedApps/CouchPotato/app.json @@ -0,0 +1,10 @@ +{ + "appid": "8629d759d41163a10142fabb192a49dc33d4b959", + "name": "CouchPotato", + "website": "https://couchpota.to/", + "license": "GNU General Public License v3.0 only", + "description": "Download movies automatically, easily and in the best quality as soon as they are released, via usenet or torrents.", + "enhanced": true, + "tile_background": "dark", + "icon": "couchpotato.png" +} diff --git a/heimdall/config/www/SupportedApps/CouchPotato/config.blade.php b/heimdall/config/www/SupportedApps/CouchPotato/config.blade.php new file mode 100755 index 0000000..c557e0d --- /dev/null +++ b/heimdall/config/www/SupportedApps/CouchPotato/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', (isset($item) ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/CouchPotato/couchpotato.png b/heimdall/config/www/SupportedApps/CouchPotato/couchpotato.png new file mode 100755 index 0000000..10f9427 Binary files /dev/null and b/heimdall/config/www/SupportedApps/CouchPotato/couchpotato.png differ diff --git a/heimdall/config/www/SupportedApps/CouchPotato/livestats.blade.php b/heimdall/config/www/SupportedApps/CouchPotato/livestats.blade.php new file mode 100755 index 0000000..187e38b --- /dev/null +++ b/heimdall/config/www/SupportedApps/CouchPotato/livestats.blade.php @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/CryptPad/CryptPad.php b/heimdall/config/www/SupportedApps/CryptPad/CryptPad.php new file mode 100755 index 0000000..312fb16 --- /dev/null +++ b/heimdall/config/www/SupportedApps/CryptPad/CryptPad.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function login() + { + $password = $this->config->password; + $attrs = [ + 'body' => '{"method": "auth.login", "params": ["'.$password.'"], "id": 1}', + 'cookies' => $this->jar, + 'headers' => ['content-type' => 'application/json', 'Accept' => 'application/json'] + ]; + return parent::appTest($this->url('json'), $attrs); + } + + public function test() + { + $test = $this->login(); + if($test->code === 200) { + $data = json_decode($test->response); + if(!isset($data->result) || is_null($data->result) || $data->result == false) { + $test->status = 'Failed: Invalid Credentials'; + } + } + echo $test->status; + + } + + public function livestats() + { + $test = $this->login(); + $status = 'inactive'; + $attrs = [ + 'body' => '{"method": "web.update_ui", "params": [["none"], {}], "id": 1}', + 'cookies' => $this->jar, + 'headers' => ['content-type' => 'application/json', 'Accept' => 'application/json'] + ]; + $res = parent::execute($this->url('json'), $attrs); + $details = json_decode($res->getBody()); + + $data = []; + + if($details) { + $states = $details->result->filters->state; + $download_rate = $details->result->stats->download_rate ?? 0; + $upload_rate = $details->result->stats->upload_rate ?? 0; + $data['download_rate'] = format_bytes($download_rate, false, ' ', '/s'); + $data['upload_rate'] = format_bytes($upload_rate, false, ' ', '/s'); + $data['seed_count'] = self::getState($states, 'Seeding'); + $data['leech_count'] = self::getState($states, 'Downloading'); + $status = (self::getState($states, 'Active') > 0) ? 'active' : 'inactive'; + } + + return parent::getLiveStats($status, $data); + + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } + + protected static function getState(array $states, string $wantedState, int $default = 0): int { + $state = Arr::first($states, function (array $state) use ($wantedState) { + return $state[0] == $wantedState; + }); + + return Arr::get($state, 1, $default); + } +} diff --git a/heimdall/config/www/SupportedApps/Deluge/app.json b/heimdall/config/www/SupportedApps/Deluge/app.json new file mode 100755 index 0000000..228c97a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Deluge/app.json @@ -0,0 +1,49 @@ +{ + "appid": "bc28bfa49a73fd2384cbecd6572ea72d0166aa28", + "name": "Deluge", + "website": "https://deluge-torrent.org/", + "license": "GNU General Public License v3.0 only", + "description": "Deluge is a BitTorrent client written in Python. Deluge is cross-platform, using a front and back end architecture where libtorrent, a software library written in C++ which provides the application's networking logic, is connected to one of various front ends through the project's own Python bindings", + "enhanced": true, + "config": { + "auth_payload": { + "method": "auth.login", + "id": 1, + "params": [":password:"] + }, + "type": "apikey", + "stats": [{ + "name": "Queue", + "url": ":url:api?output=json&apikey=:apikey:&mode=queue", + "key": "queue.sizeleft", + "filter": "size", + "updateOnChange": "Yes", + "suffix": "" + }, { + "name": "Speed", + "url": ":url:api?output=json&apikey=:apikey:&mode=queue", + "key": "queue.speed", + "filter": "speed", + "updateOnChange": "Yes", + "suffix": "" + }], + "stat1": { + "name": "Queue", + "url": ":url:api?output=json&apikey=:apikey:&mode=queue", + "key": "queue.sizeleft", + "filter": "size", + "updateOnChange": "Yes", + "suffix": "" + }, + "stat2": { + "name": "Speed", + "url": ":url:api?output=json&apikey=:apikey:&mode=queue", + "key": "queue.speed", + "filter": "speed", + "updateOnChange": "Yes", + "suffix": "" + } + }, + "tile_background": "dark", + "icon": "deluge.png" +} diff --git a/heimdall/config/www/SupportedApps/Deluge/config.blade.php b/heimdall/config/www/SupportedApps/Deluge/config.blade.php new file mode 100755 index 0000000..a1f96ca --- /dev/null +++ b/heimdall/config/www/SupportedApps/Deluge/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::input('password', 'config[password]', (isset($item) ? $item->getconfig()->password : null), array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Deluge/deluge.png b/heimdall/config/www/SupportedApps/Deluge/deluge.png new file mode 100755 index 0000000..8b288c7 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Deluge/deluge.png differ diff --git a/heimdall/config/www/SupportedApps/Deluge/livestats.blade.php b/heimdall/config/www/SupportedApps/Deluge/livestats.blade.php new file mode 100755 index 0000000..5e32adf --- /dev/null +++ b/heimdall/config/www/SupportedApps/Deluge/livestats.blade.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Dillinger/Dillinger.php b/heimdall/config/www/SupportedApps/Dillinger/Dillinger.php new file mode 100755 index 0000000..e5c3dd9 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Dillinger/Dillinger.php @@ -0,0 +1,5 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/DokuWiki/app.json b/heimdall/config/www/SupportedApps/DokuWiki/app.json new file mode 100755 index 0000000..544e272 --- /dev/null +++ b/heimdall/config/www/SupportedApps/DokuWiki/app.json @@ -0,0 +1,10 @@ +{ + "appid": "a17f1a47dbc391814d321ae33ad51c0c7695a08d", + "name": "DokuWiki", + "website": "https://www.dokuwiki.org/", + "license": "GNU General Public License v2.0 only", + "description": "DokuWiki is a simple to use and highly versatile Open Source wiki software that doesn't require a database.", + "enhanced": true, + "tile_background": "dark", + "icon": "dokuwiki.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/DokuWiki/config.blade.php b/heimdall/config/www/SupportedApps/DokuWiki/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/DokuWiki/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/DokuWiki/dokuwiki.png b/heimdall/config/www/SupportedApps/DokuWiki/dokuwiki.png new file mode 100755 index 0000000..9691b09 Binary files /dev/null and b/heimdall/config/www/SupportedApps/DokuWiki/dokuwiki.png differ diff --git a/heimdall/config/www/SupportedApps/DokuWiki/livestats.blade.php b/heimdall/config/www/SupportedApps/DokuWiki/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/DokuWiki/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Domoticz/Domoticz.php b/heimdall/config/www/SupportedApps/Domoticz/Domoticz.php new file mode 100755 index 0000000..1e1c5a7 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Domoticz/Domoticz.php @@ -0,0 +1,41 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('type=command¶m=getversion')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('type=devices&rid='.$this->config->deviceidx)); + $details = json_decode($res->getBody()); + + $data = []; + + if($details) { + $data['today'] = $details->result[0]->CounterToday ?? 0; + $data['usage'] = $details->result[0]->Usage ?? 0; + } + + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).'json.htm?'.$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Domoticz/app.json b/heimdall/config/www/SupportedApps/Domoticz/app.json new file mode 100755 index 0000000..f2b8181 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Domoticz/app.json @@ -0,0 +1,10 @@ +{ + "appid": "17ea5305bc5cb99da61e121542864bb15e280f30", + "name": "Domoticz", + "website": "https://www.domoticz.com/", + "license": "GNU General Public License v3.0 only", + "description": "Open source Home Automation System", + "enhanced": true, + "tile_background": "dark", + "icon": "domoticz.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Domoticz/config.blade.php b/heimdall/config/www/SupportedApps/Domoticz/config.blade.php new file mode 100755 index 0000000..a2bf61f --- /dev/null +++ b/heimdall/config/www/SupportedApps/Domoticz/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[deviceidx]', (isset($item) ? $item->getconfig()->deviceidx : null), array('placeholder' => "Device Idx from Devices page", 'data-config' => 'deviceidx', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Domoticz/domoticz.png b/heimdall/config/www/SupportedApps/Domoticz/domoticz.png new file mode 100755 index 0000000..35090c8 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Domoticz/domoticz.png differ diff --git a/heimdall/config/www/SupportedApps/Domoticz/livestats.blade.php b/heimdall/config/www/SupportedApps/Domoticz/livestats.blade.php new file mode 100755 index 0000000..f385583 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Domoticz/livestats.blade.php @@ -0,0 +1,10 @@ + diff --git a/heimdall/config/www/SupportedApps/Dozzle/Dozzle.php b/heimdall/config/www/SupportedApps/Dozzle/Dozzle.php new file mode 100755 index 0000000..8f061c5 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Dozzle/Dozzle.php @@ -0,0 +1,5 @@ +{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable') +
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/ESPHome/esphome.png b/heimdall/config/www/SupportedApps/ESPHome/esphome.png new file mode 100755 index 0000000..0609f8e Binary files /dev/null and b/heimdall/config/www/SupportedApps/ESPHome/esphome.png differ diff --git a/heimdall/config/www/SupportedApps/ESPHome/livestats.blade.php b/heimdall/config/www/SupportedApps/ESPHome/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/ESPHome/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Element/Element.php b/heimdall/config/www/SupportedApps/Element/Element.php new file mode 100755 index 0000000..9e4d8ad --- /dev/null +++ b/heimdall/config/www/SupportedApps/Element/Element.php @@ -0,0 +1,5 @@ +url('System/Info'), $this->getAttrs()); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('/emby/Items/Counts'), $this->getAttrs()); + $result = json_decode($res->getBody()); + $details = ['visiblestats'=>[]]; + foreach($this->config->availablestats as $stat) { + $newstat = new \stdClass(); + $newstat->title = self::getAvailableStats()[$stat]; + $newstat->value = $result->{$stat}; + $details['visiblestats'][] = $newstat; + } + return parent::getLiveStats($status, $details); + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } + + private function getAttrs() { + return [ + 'headers' => [ + 'X-Emby-Token' => $this->config->password, + ] + ]; + } + + public static function getAvailableStats() { + return [ + 'MovieCount'=>'Movies', + 'SeriesCount'=>'Series', + 'EpisodeCount'=>'Episodes', + 'GameCount'=>'Games', + 'ArtistCount'=>'Artists', + 'ProgramCount'=>'Programs', + 'GameSystemCount'=>'GameSystems', + 'TrailerCount'=>'Trailers', + 'SongCount'=>'Songs', + 'AlbumCount'=>'Albums', + 'MusicVideoCount'=>'MusicVideos', + 'BoxSetCount'=>'BoxSets', + 'BookCount'=>'Books', + 'ItemCount'=>'Items', + ]; + } +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Emby/app.json b/heimdall/config/www/SupportedApps/Emby/app.json new file mode 100755 index 0000000..14bf77e --- /dev/null +++ b/heimdall/config/www/SupportedApps/Emby/app.json @@ -0,0 +1,29 @@ +{ + "appid": "3021fea57e9b932f14822d47e47d163f47812ef1", + "name": "Emby", + "website": "https://emby.media/", + "license": "Proprietary", + "description": "Emby (formerly Media Browser) is a media server designed to organize, play, and stream audio and video to a variety of devices.", + "enhanced": true, + "tile_background": "dark", + "icon": "emby.png", + "config": { + "type": "apikey", + "stat1": { + "name": "Movies", + "url": ":url:emby/Items/Counts?api_key=:apikey:", + "key": "MovieCount", + "filter": "none", + "updateOnChange": "No", + "suffix": "" + }, + "stat2": { + "name": "Series", + "url": ":url:emby/Items/Counts?api_key=:apikey:", + "key": "SeriesCount", + "filter": "none", + "updateOnChange": "No", + "suffix": "" + } + } +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Emby/config.blade.php b/heimdall/config/www/SupportedApps/Emby/config.blade.php new file mode 100755 index 0000000..f0921af --- /dev/null +++ b/heimdall/config/www/SupportedApps/Emby/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item)?$item->getConfig()->override_url:null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[password]', isset($item)?$item->getConfig()->password:null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::select('config[availablestats][]', App\SupportedApps\Emby\Emby::getAvailableStats(), isset($item) ? ($item->getConfig()->availablestats ?? null) : null, array('multiple'=>'multiple')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Emby/emby.png b/heimdall/config/www/SupportedApps/Emby/emby.png new file mode 100755 index 0000000..aae9097 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Emby/emby.png differ diff --git a/heimdall/config/www/SupportedApps/Emby/livestats.blade.php b/heimdall/config/www/SupportedApps/Emby/livestats.blade.php new file mode 100755 index 0000000..53ac67b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Emby/livestats.blade.php @@ -0,0 +1,8 @@ + diff --git a/heimdall/config/www/SupportedApps/EmbyStat/EmbyStat.php b/heimdall/config/www/SupportedApps/EmbyStat/EmbyStat.php new file mode 100755 index 0000000..6bc75fe --- /dev/null +++ b/heimdall/config/www/SupportedApps/EmbyStat/EmbyStat.php @@ -0,0 +1,5 @@ + + + + + + + + + + + + + + diff --git a/heimdall/config/www/SupportedApps/FoldingHome/FoldingHome.php b/heimdall/config/www/SupportedApps/FoldingHome/FoldingHome.php new file mode 100755 index 0000000..9815d2c --- /dev/null +++ b/heimdall/config/www/SupportedApps/FoldingHome/FoldingHome.php @@ -0,0 +1,81 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $this->setSID(); + $test = parent::appTest($this->url($this->updateURI())); + echo $test->status; + } + public function livestats() + { + $status = 'inactive'; + $this->setSID(); + $res = parent::execute($this->url($this->updateURI())); + $details = json_decode($res->getBody(), true); + $status = $details[1][1][0]["status"]; + $progress = isset($details[1][1][0]["percentdone"]) ? $details[1][1][0]["percentdone"] : "N/A"; + $eta = isset($details[1][1][0]["eta"]) ? $details[1][1][0]["eta"] : "N/A"; + + $data = [ + "status" => $status, + "progress" => $progress, + "eta" => $eta + ]; + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } + public function setSID() + { + if (empty($this->sid)) { + $rand = mt_rand() / mt_getrandmax(); + $res = parent::execute($this->url('api/session?_='.$rand), [], [], 'PUT'); + $this->sid = (string) $res->getBody(); + + $query_data = [ + 'sid' => $this->sid, + 'update_id' => 0, + 'update_rate' => 1, + 'update_path' => '/api/basic', + '_' => time() + ]; + $res2 = parent::execute($this->url('api/updates/set'), ['query' => $query_data]); + $query_data2 = [ + 'sid' => $this->sid, + 'update_id' => 1, + 'update_rate' => 1, + 'update_path' => '/api/slots', + '_' => time() + ]; + $res3 = parent::execute($this->url('api/updates/set'), ['query' => $query_data2]); + $query_data3 = [ + 'sid' => $this->sid, + '_' => time() + ]; + $res4 = parent::execute($this->url('api/configured'), ['query' => $query_data3]); + } + } + public function updateURI() + { + $query_url = 'api/updates?sid='; + $query_url .= $this->sid; + $query_url .= '&_='; + $query_url .= time(); + return $query_url; + } +} diff --git a/heimdall/config/www/SupportedApps/FoldingHome/app.json b/heimdall/config/www/SupportedApps/FoldingHome/app.json new file mode 100755 index 0000000..e7bd5bc --- /dev/null +++ b/heimdall/config/www/SupportedApps/FoldingHome/app.json @@ -0,0 +1,10 @@ +{ + "appid": "d4f480701f176a366bb9175ce282f80d18da5122", + "name": "Folding@Home", + "website": "https://foldingathome.org/", + "license": "Proprietary", + "description": "Folding@home is a project focused on disease research. The problems we’re solving require so many computer calcul­ations – and we need your help to find the cures!\r\nAccess the your F@H webUI directly from Heimdall.", + "enhanced": true, + "tile_background": "dark", + "icon": "foldingathome.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/FoldingHome/config.blade.php b/heimdall/config/www/SupportedApps/FoldingHome/config.blade.php new file mode 100755 index 0000000..4505127 --- /dev/null +++ b/heimdall/config/www/SupportedApps/FoldingHome/config.blade.php @@ -0,0 +1,11 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/FoldingHome/foldingathome.png b/heimdall/config/www/SupportedApps/FoldingHome/foldingathome.png new file mode 100755 index 0000000..576ad69 Binary files /dev/null and b/heimdall/config/www/SupportedApps/FoldingHome/foldingathome.png differ diff --git a/heimdall/config/www/SupportedApps/FoldingHome/livestats.blade.php b/heimdall/config/www/SupportedApps/FoldingHome/livestats.blade.php new file mode 100755 index 0000000..c7f30e1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/FoldingHome/livestats.blade.php @@ -0,0 +1,10 @@ + diff --git a/heimdall/config/www/SupportedApps/Freenas/Freenas.php b/heimdall/config/www/SupportedApps/Freenas/Freenas.php new file mode 100755 index 0000000..76403c7 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Freenas/Freenas.php @@ -0,0 +1,93 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('core/ping'), $this->attrs); + if($test->code === 200) { + $data = $test->response; + if($test->response != '"pong"') { + $test->status = 'Failed: '.$data; + } + } + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $data = []; + + $res = parent::execute($this->url('system/info'), $this->attrs); + $details = json_decode($res->getBody()); + $seconds = $details->uptime_seconds ?? 0; + $data['uptime'] = $this->uptime($seconds); + + $res = parent::execute($this->url('alert/list'), $this->attrs); + $details = json_decode($res->getBody(), true); + $data['alert_tot'] = $this->alerts($details); + + 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).'api/v2.0/'.$endpoint; + return $api_url; + } + + public function uptime($inputSeconds) + { + // Adapted from https://stackoverflow.com/questions/8273804/convert-seconds-into-days-hours-minutes-and-seconds + + $res = ''; + $secondsInAMinute = 60; + $secondsInAnHour = 60 * $secondsInAMinute; + $secondsInADay = 24 * $secondsInAnHour; + + // extract days + $days = floor($inputSeconds / $secondsInADay); + + // extract hours + $hourSeconds = $inputSeconds % $secondsInADay; + $hours = floor($hourSeconds / $secondsInAnHour); + + // extract minutes + $minuteSeconds = $hourSeconds % $secondsInAnHour; + $minutes = floor($minuteSeconds / $secondsInAMinute); + + // extract the remaining seconds + $remainingSeconds = $minuteSeconds % $secondsInAMinute; + $seconds = ceil($remainingSeconds); + + //$res = strval($days).'d '.strval($hours).':'.sprintf('%02d', $minutes).':'.sprintf('%02d', $seconds); + if($days > 0) { + $res = strval($days).'d '.strval($hours).':'.sprintf('%02d', $minutes); + } else { + $res = strval($hours).':'.sprintf('%02d', $minutes).':'.sprintf('%02d', $seconds); + } + return $res; + } + + public function alerts($alert) + { + $count = 0; + foreach($alert as $key => $value) + { + if ($value["dismissed"] == false) $count += 1; + } + return strval($count); + } +} diff --git a/heimdall/config/www/SupportedApps/Freenas/app.json b/heimdall/config/www/SupportedApps/Freenas/app.json new file mode 100755 index 0000000..372db71 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Freenas/app.json @@ -0,0 +1,10 @@ +{ + "appid": "3d258071fa9cd41a85627f6bf7fc6998c3a8f5cf", + "name": "Freenas", + "website": "https://www.freenas.org/", + "license": "BSD-2-Clause", + "description": "FreeNAS is an embedded open source network-attached storage (NAS) operating system based on FreeBSD.", + "enhanced": true, + "tile_background": "light", + "icon": "freenas.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Freenas/config.blade.php b/heimdall/config/www/SupportedApps/Freenas/config.blade.php new file mode 100755 index 0000000..7848502 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Freenas/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', (isset($item) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::password('config[password]', array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item', 'type' => 'password')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Freenas/freenas.png b/heimdall/config/www/SupportedApps/Freenas/freenas.png new file mode 100755 index 0000000..8fb6608 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Freenas/freenas.png differ diff --git a/heimdall/config/www/SupportedApps/Freenas/livestats.blade.php b/heimdall/config/www/SupportedApps/Freenas/livestats.blade.php new file mode 100755 index 0000000..262c2d6 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Freenas/livestats.blade.php @@ -0,0 +1,10 @@ + diff --git a/heimdall/config/www/SupportedApps/FreshRSS/FreshRSS.php b/heimdall/config/www/SupportedApps/FreshRSS/FreshRSS.php new file mode 100755 index 0000000..d203022 --- /dev/null +++ b/heimdall/config/www/SupportedApps/FreshRSS/FreshRSS.php @@ -0,0 +1,89 @@ + false, + "timeout" => 15, + "connect_timeout" => 15, + "verify" => false, + ]; + + public function test() + { + $attrs = [ + "body" => "api_key=" . $this->getApiKey(), + "headers" => [ + "Content-Type" => "application/x-www-form-urlencoded", + ], + ]; + + $res = parent::execute( + $this->url("api/fever.php?api"), + $attrs, + $this->clientVars, + "POST" + ); + + if ($res->getStatusCode() == 200) { + $data = json_decode($res->getBody()); + if ($data != null && $data->auth === 1) { + echo "Welcome " . + $this->config->username . + ", you are connected to API v" . + $data->api_version; + } + } + } + + public function livestats() + { + $status = "inactive"; + $data = []; + + $attrs = [ + "body" => "api_key=" . $this->getApiKey(), + "headers" => [ + "Content-Type" => "application/x-www-form-urlencoded", + ], + ]; + + $res = parent::execute( + $this->url("api/fever.php?api&unread_item_ids"), + $attrs, + $this->clientVars, + "POST" + ); + if ($res->getStatusCode() == 200) { + $body = json_decode($res->getBody()); + if ($body->auth === 1) { + if ($body->unread_item_ids != "") { + $data["unread"] = count( + explode(",", $body->unread_item_ids) + ); + } else { + $data["unread"] = 0; + } + } + } + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url) . $endpoint; + return $api_url; + } + + public function getApiKey() + { + return md5($this->config->username . ":" . $this->config->apikey); + } +} diff --git a/heimdall/config/www/SupportedApps/FreshRSS/app.json b/heimdall/config/www/SupportedApps/FreshRSS/app.json new file mode 100755 index 0000000..ec0a388 --- /dev/null +++ b/heimdall/config/www/SupportedApps/FreshRSS/app.json @@ -0,0 +1,10 @@ +{ + "appid": "5c68de7acdaff4da4f680545bb51a847840c81da", + "name": "FreshRSS", + "website": "https://freshrss.org", + "license": "GNU Affero General Public License v3.0", + "description": "FreshRSS is a self-hosted RSS feed aggregator. It is lightweight, easy to work with, powerful and customizable.", + "enhanced": true, + "tile_background": "dark", + "icon": "freshrss.svg" +} diff --git a/heimdall/config/www/SupportedApps/FreshRSS/config.blade.php b/heimdall/config/www/SupportedApps/FreshRSS/config.blade.php new file mode 100755 index 0000000..4b1e7bc --- /dev/null +++ b/heimdall/config/www/SupportedApps/FreshRSS/config.blade.php @@ -0,0 +1,18 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::text('config[username]', isset($item) ? $item->getconfig()->username : null, ['placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item']) !!} +
+
+ + {!! Form::text('config[apikey]', isset($item) ? $item->getconfig()->apikey : null, ['placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item']) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/FreshRSS/freshrss.png b/heimdall/config/www/SupportedApps/FreshRSS/freshrss.png new file mode 100755 index 0000000..6c76658 Binary files /dev/null and b/heimdall/config/www/SupportedApps/FreshRSS/freshrss.png differ diff --git a/heimdall/config/www/SupportedApps/FreshRSS/livestats.blade.php b/heimdall/config/www/SupportedApps/FreshRSS/livestats.blade.php new file mode 100755 index 0000000..728f368 --- /dev/null +++ b/heimdall/config/www/SupportedApps/FreshRSS/livestats.blade.php @@ -0,0 +1,7 @@ + diff --git a/heimdall/config/www/SupportedApps/Frigate/Frigate.php b/heimdall/config/www/SupportedApps/Frigate/Frigate.php new file mode 100755 index 0000000..710585f --- /dev/null +++ b/heimdall/config/www/SupportedApps/Frigate/Frigate.php @@ -0,0 +1,5 @@ +url('solar_api/GetAPIVersion.cgi')); + echo $test->status; + } + + public function livestats() + { + $status = 'active'; + + $attrs['query'] = ['Scope' => 'System']; + $res = parent::execute($this->url('solar_api/v1/GetInverterRealtimeData.cgi'), $attrs); + $details = json_decode($res->getBody()); + + $data = []; + $data['PAC'] = 0; + foreach( $details->Body->Data->PAC->Values as $key => $pac){ + $data['PAC'] += $pac; + } + $data['PAC_UNIT'] = $details->Body->Data->PAC->Unit; + + $data['DAY_ENERGY'] = 0; + foreach( $details->Body->Data->DAY_ENERGY->Values as $key => $ev){ + $data['DAY_ENERGY'] += $ev; + } + $data['DAY_ENERGY_UNIT'] = $details->Body->Data->DAY_ENERGY->Unit; + + return parent::getLiveStats($status, $data); + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Fronius/app.json b/heimdall/config/www/SupportedApps/Fronius/app.json new file mode 100755 index 0000000..fcbc128 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Fronius/app.json @@ -0,0 +1,10 @@ +{ + "appid": "36211c66ecd5984827673c89373ae184f06c000f", + "name": "Fronius", + "website": "https://www.fronius.com", + "license": "MIT License", + "description": "This app allows to monitor the electrical production of the photovoltaic panels connected to a Fronius inverter.\r\n\r\nThe enhanced app connects to the inverter API and shows the current production of the system, as well as the daily production.", + "enhanced": true, + "tile_background": "dark", + "icon": "fronius.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Fronius/config.blade.php b/heimdall/config/www/SupportedApps/Fronius/config.blade.php new file mode 100755 index 0000000..53f26e1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Fronius/config.blade.php @@ -0,0 +1,10 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Fronius/fronius.png b/heimdall/config/www/SupportedApps/Fronius/fronius.png new file mode 100755 index 0000000..f1f399c Binary files /dev/null and b/heimdall/config/www/SupportedApps/Fronius/fronius.png differ diff --git a/heimdall/config/www/SupportedApps/Fronius/livestats.blade.php b/heimdall/config/www/SupportedApps/Fronius/livestats.blade.php new file mode 100755 index 0000000..67f2740 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Fronius/livestats.blade.php @@ -0,0 +1,10 @@ + diff --git a/heimdall/config/www/SupportedApps/Funkwhale/Funkwhale.php b/heimdall/config/www/SupportedApps/Funkwhale/Funkwhale.php new file mode 100755 index 0000000..e739be4 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Funkwhale/Funkwhale.php @@ -0,0 +1,5 @@ + + + +image/svg+xml + + + + + + + + + + + + + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Ghost/Ghost.php b/heimdall/config/www/SupportedApps/Ghost/Ghost.php new file mode 100755 index 0000000..5394584 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Ghost/Ghost.php @@ -0,0 +1,93 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + $this->authorized = false; + } + + public function test() { + try { + $this->auth(); + echo "Successfully communicated with the API"; + } catch (Exception $err) { + echo "Error connecting to Ghost: ".$err->getMessage(); + } + } + + public function auth() { + if ($this->authorized) { + return; + } + + $this->authorized = false; + + $attrs = [ + 'cookies' => $this->jar, + 'headers' => ['content-type' => 'application/json'] + ]; + $body["username"] = $this->config->username; + $body["password"] = $this->config->password; + $vars = [ + 'http_errors' => false, + 'timeout' => 5, + 'body' => json_encode($body) + ]; + + $result = parent::execute($this->url('ghost/api/v3/admin/session'), $attrs, $vars, 'POST'); + + if (null === $result) { + throw new Exception("Error contacting the API"); + } + + if ($result->getStatusCode() !== 201) { + switch ($result->getStatusCode()) { + case 404: + throw new Exception("User is not found"); + case 422: + throw new Exception("Invalid credentials"); + } + + throw new Exception("Unknown error"); + } + + $this->authorized = true; + return $result; +} + + public function livestats() { + $status = 'inactive'; + + $this->auth(); + + $attrs = [ + 'cookies' => $this->jar, + 'headers' => ['content-type' => 'application/json'] + ]; + $result = parent::execute($this->url('ghost/api/v3/admin/posts/'), $attrs, []); + if (null === $result) { + throw new Exception("Could not connect to Ghost"); + } + + $response = json_decode($result->getBody()); + $posts = $response->posts; + $statuses = array_count_values(array_column($posts, 'status')); + + $data = [ + 'draft' => isset($statuses['draft']) ? $statuses['draft'] : 0, + 'scheduled' => isset($statuses['scheduled']) ? $statuses['scheduled'] : 0, + 'published' => isset($statuses['published']) ? $statuses['published'] : 0 + ]; + $status = 'active'; + return parent::getLiveStats($status, $data); + + } + + public function url($endpoint) { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Ghost/app.json b/heimdall/config/www/SupportedApps/Ghost/app.json new file mode 100755 index 0000000..3a53ece --- /dev/null +++ b/heimdall/config/www/SupportedApps/Ghost/app.json @@ -0,0 +1,10 @@ +{ + "appid": "c4745785181de931cfd5bd79294cb1687d82aea9", + "name": "Ghost", + "website": "https://github.com/tryghost/ghost", + "license": "MIT License", + "description": "Fiercely independent, professional publishing. A fully open source, powerful platform for building and running modern publications, we power serious blogs, magazines and journalism from DuckDuckGo to OpenAI & Sky News.", + "enhanced": true, + "tile_background": "light", + "icon": "ghost.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Ghost/config.blade.php b/heimdall/config/www/SupportedApps/Ghost/config.blade.php new file mode 100755 index 0000000..f03eda1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Ghost/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::password('config[password]', array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Ghost/ghost.png b/heimdall/config/www/SupportedApps/Ghost/ghost.png new file mode 100755 index 0000000..27748f7 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Ghost/ghost.png differ diff --git a/heimdall/config/www/SupportedApps/Ghost/livestats.blade.php b/heimdall/config/www/SupportedApps/Ghost/livestats.blade.php new file mode 100755 index 0000000..549f2ee --- /dev/null +++ b/heimdall/config/www/SupportedApps/Ghost/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/GitHub/GitHub.php b/heimdall/config/www/SupportedApps/GitHub/GitHub.php new file mode 100755 index 0000000..794c5d9 --- /dev/null +++ b/heimdall/config/www/SupportedApps/GitHub/GitHub.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + if (!empty($this->config->health_apikey)) { + $test = parent::appTest( + $this->url( + "/-/readiness?token=" . + $this->config->health_apikey . + "&all=1" + ) + ); + echo $test->status; + } else { + echo "Health API key missing!"; + } + } + + public function livestats() + { + $status = "inactive"; + $data = []; + + if (!empty($this->config->health_apikey)) { + $res1 = parent::execute( + $this->url( + "/-/readiness?token=" . + $this->config->health_apikey . + "&all=1" + ) + ); + $details1 = json_decode($res1->getBody()); + if ($details1) { + $data["status"] = $details1->status; + $status = $details1->status; + } + } + + if (!empty($this->config->private_apikey)) { + $call_header["headers"] = [ + "PRIVATE-TOKEN" => $this->config->private_apikey, + ]; + $res2 = parent::execute( + $this->url("/api/v4/application/statistics"), + $call_header + ); + $details2 = json_decode($res2->getBody()); + if ( + $details2 && + isset($details2->projects) && + isset($details2->active_users) + ) { + $data["count_projects"] = $details2->projects; + $data["count_users"] = $details2->active_users; + } + } + + return parent::getLiveStats($status, $data); + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url) . $endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/GitLab/app.json b/heimdall/config/www/SupportedApps/GitLab/app.json new file mode 100755 index 0000000..fed2fb3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/GitLab/app.json @@ -0,0 +1,10 @@ +{ + "appid": "322f31631de66bcf71bd6c199b41606d516fe3f9", + "name": "GitLab", + "website": "https://gitlab.com", + "license": "MIT License", + "description": "From project planning and source code management to CI/CD and monitoring, GitLab is a single application for the entire DevOps lifecycle.", + "enhanced": true, + "tile_background": "dark", + "icon": "gitlab.svg" +} diff --git a/heimdall/config/www/SupportedApps/GitLab/config.blade.php b/heimdall/config/www/SupportedApps/GitLab/config.blade.php new file mode 100755 index 0000000..ae37638 --- /dev/null +++ b/heimdall/config/www/SupportedApps/GitLab/config.blade.php @@ -0,0 +1,17 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
{{ __('app.apps.only_admin_account') }}
+
+
+ + Admin Area » Monitoring » Health Check + {!! Form::text('config[health_apikey]', isset($item) ? $item->getconfig()->health_apikey : null, ['placeholder' => 'Health Token', 'data-config' => 'health_apikey', 'id' => 'health_apikey', 'class' => 'form-control config-item']) !!} +
+
+ + User Settings » Access Tokens + {!! Form::text('config[private_apikey]', isset($item) ? $item->getconfig()->private_apikey : null, ['placeholder' => __('app.apps.apikey'), 'data-config' => 'private_apikey', 'id' => 'private_apikey', 'class' => 'form-control config-item']) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/GitLab/gitlab.png b/heimdall/config/www/SupportedApps/GitLab/gitlab.png new file mode 100755 index 0000000..d8b8fef Binary files /dev/null and b/heimdall/config/www/SupportedApps/GitLab/gitlab.png differ diff --git a/heimdall/config/www/SupportedApps/GitLab/livestats.blade.php b/heimdall/config/www/SupportedApps/GitLab/livestats.blade.php new file mode 100755 index 0000000..aaa687c --- /dev/null +++ b/heimdall/config/www/SupportedApps/GitLab/livestats.blade.php @@ -0,0 +1,14 @@ + diff --git a/heimdall/config/www/SupportedApps/Gitea/Gitea.php b/heimdall/config/www/SupportedApps/Gitea/Gitea.php new file mode 100755 index 0000000..cd30773 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Gitea/Gitea.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + //echo $this->url('lineup.json?show=found'); + $test = parent::appTest($this->url('lineup.json?show=found')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('lineup.json?show=found')); + $details = json_decode($res->getBody()); + + $data = []; + + if($details) { + $channel_count = count($details); + $data['number_of_channels'] = number_format($channel_count); + $status = 'active'; + } + + $res = parent::execute($this->url('tuners.html')); + $tunersBody = $res->getBody(); + if($tunersBody) { + $exp = "/\\s*([^<]+)<\/td>\\s*([^<]+)<\/td><\/tr>/mi"; + preg_match_all($exp, $tunersBody, $matches, PREG_SET_ORDER, 0);; + $inUse = 0; + $totalTuners = 0; + $match_count = count($matches); + for ($i = 0; $i < $match_count; $i++) { + if (count($matches[$i]) >= 2) { + if ($matches[$i][2] != "none" && $matches[$i][2] != "not in use") { + $inUse++; + } + } + $totalTuners++; + } + $data['tuners_in_use'] = number_format($inUse); + $data['tuners_total'] = number_format($totalTuners); + $status = 'active'; + } + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/HDHomeRun/app.json b/heimdall/config/www/SupportedApps/HDHomeRun/app.json new file mode 100755 index 0000000..7990394 --- /dev/null +++ b/heimdall/config/www/SupportedApps/HDHomeRun/app.json @@ -0,0 +1,10 @@ +{ + "appid": "8fe021dbb159e76695ab080421f68fac90579b0c", + "name": "HDHomeRun", + "website": "https://www.silicondust.com/", + "license": "Proprietary", + "description": "The DVR reimagined. Watch and Record all of your favorite live TV. Your way.", + "enhanced": true, + "tile_background": "dark", + "icon": "hdhomerun.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/HDHomeRun/config.blade.php b/heimdall/config/www/SupportedApps/HDHomeRun/config.blade.php new file mode 100755 index 0000000..5b88f16 --- /dev/null +++ b/heimdall/config/www/SupportedApps/HDHomeRun/config.blade.php @@ -0,0 +1,11 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+ +
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/HDHomeRun/hdhomerun.png b/heimdall/config/www/SupportedApps/HDHomeRun/hdhomerun.png new file mode 100755 index 0000000..d09e40a Binary files /dev/null and b/heimdall/config/www/SupportedApps/HDHomeRun/hdhomerun.png differ diff --git a/heimdall/config/www/SupportedApps/HDHomeRun/livestats.blade.php b/heimdall/config/www/SupportedApps/HDHomeRun/livestats.blade.php new file mode 100755 index 0000000..61fe39e --- /dev/null +++ b/heimdall/config/www/SupportedApps/HDHomeRun/livestats.blade.php @@ -0,0 +1,10 @@ + diff --git a/heimdall/config/www/SupportedApps/Handbrake.zip b/heimdall/config/www/SupportedApps/Handbrake.zip new file mode 100755 index 0000000..923fe2a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Handbrake.zip @@ -0,0 +1,88 @@ + + + + + + Page not found · GitHub Pages + + + + +
+ +

404

+

File not found

+ +

+ The site configured at this address does not + contain the requested file. +

+ +

+ If this is your site, make sure that the filename case matches the URL.
+ For root URLs (like http://example.com/) you must provide an + index.html file. +

+ +

+ Read the full documentation + for more information about using GitHub Pages. +

+ +
+ GitHub Status — + @githubstatus +
+ + + + +
+ + diff --git a/heimdall/config/www/SupportedApps/Handbrake/Handbrake.php b/heimdall/config/www/SupportedApps/Handbrake/Handbrake.php new file mode 100755 index 0000000..c65312d --- /dev/null +++ b/heimdall/config/www/SupportedApps/Handbrake/Handbrake.php @@ -0,0 +1,5 @@ +url('health')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('health')); + + if ($res->getStatusCode() > 299) { + $data = [ + 'error' => true, + 'statusCode' => $res->getStatusCode(), + 'items' => 0, + 'users' => 0, + ]; + return parent::getLiveStats($status, $data); + } + + $details = json_decode($res->getBody()); + + $data = [ + 'error' => false, + 'statusCode' => $res->getStatusCode(), + 'items' => $details->items, + 'users' => $details->users, + ]; + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url) . $endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Heimdall/app.json b/heimdall/config/www/SupportedApps/Heimdall/app.json new file mode 100755 index 0000000..2ef606c --- /dev/null +++ b/heimdall/config/www/SupportedApps/Heimdall/app.json @@ -0,0 +1,10 @@ +{ + "appid": "b2005b3bb19b3916425998c0edd72b97667ec1fc", + "name": "Heimdall", + "website": "https://heimdall.site/", + "license": "MIT License", + "description": "As the name suggests Heimdall Application Dashboard is a dashboard for all your web applications. It doesn't need to be limited to applications though, you can add links to anything you like.\r\nHeimdall is an elegant solution to organise all your web applications. It’s dedicated to this purpose so you won’t lose your links in a sea of bookmarks.\r\nWhy not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.", + "enhanced": true, + "tile_background": "dark", + "icon": "heimdall.png" +} diff --git a/heimdall/config/www/SupportedApps/Heimdall/config.blade.php b/heimdall/config/www/SupportedApps/Heimdall/config.blade.php new file mode 100755 index 0000000..216f377 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Heimdall/config.blade.php @@ -0,0 +1,11 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Heimdall/livestats.blade.php b/heimdall/config/www/SupportedApps/Heimdall/livestats.blade.php new file mode 100755 index 0000000..6381a34 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Heimdall/livestats.blade.php @@ -0,0 +1,17 @@ + diff --git a/heimdall/config/www/SupportedApps/HomeAssistant/HomeAssistant.php b/heimdall/config/www/SupportedApps/HomeAssistant/HomeAssistant.php new file mode 100755 index 0000000..1cd3af6 --- /dev/null +++ b/heimdall/config/www/SupportedApps/HomeAssistant/HomeAssistant.php @@ -0,0 +1,35 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/HomeAssistant/app.json b/heimdall/config/www/SupportedApps/HomeAssistant/app.json new file mode 100755 index 0000000..373c1ba --- /dev/null +++ b/heimdall/config/www/SupportedApps/HomeAssistant/app.json @@ -0,0 +1,10 @@ +{ + "appid": "5c81a4f5ee23ebffa0724a22a040c54e6cb9d7c5", + "name": "HomeAssistant", + "website": "https://www.home-assistant.io/", + "license": "Apache License 2.0", + "description": "Open source home automation that puts local control and privacy first. Powered by a worldwide community of tinkerers and DIY enthusiasts.", + "enhanced": true, + "tile_background": "dark", + "icon": "homeassistant.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/HomeAssistant/config.blade.php b/heimdall/config/www/SupportedApps/HomeAssistant/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/HomeAssistant/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/HomeAssistant/homeassistant.png b/heimdall/config/www/SupportedApps/HomeAssistant/homeassistant.png new file mode 100755 index 0000000..6f77c74 Binary files /dev/null and b/heimdall/config/www/SupportedApps/HomeAssistant/homeassistant.png differ diff --git a/heimdall/config/www/SupportedApps/HomeAssistant/homeassistant.svg b/heimdall/config/www/SupportedApps/HomeAssistant/homeassistant.svg new file mode 100755 index 0000000..73b25a8 --- /dev/null +++ b/heimdall/config/www/SupportedApps/HomeAssistant/homeassistant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/HomeAssistant/livestats.blade.php b/heimdall/config/www/SupportedApps/HomeAssistant/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/HomeAssistant/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Homebridge/Homebridge.php b/heimdall/config/www/SupportedApps/Homebridge/Homebridge.php new file mode 100755 index 0000000..da1c1b6 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Homebridge/Homebridge.php @@ -0,0 +1,35 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/Homebridge/app.json b/heimdall/config/www/SupportedApps/Homebridge/app.json new file mode 100755 index 0000000..d2a1920 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Homebridge/app.json @@ -0,0 +1,10 @@ +{ + "appid": "7d9fd30322f354d733c7c3b1b395f1655d12beb0", + "name": "Homebridge", + "website": "https://homebridge.io/", + "license": "Apache License 2.0", + "description": "Homebridge is a lightweight NodeJS server you can run on your home network that emulates the iOS HomeKit API. It supports Plugins, which are community-contributed modules that provide a basic bridge from HomeKit to various 3rd-party APIs provided by manufacturers of \"smart home\" devices.\r\n\r\nSince Siri supports devices added through HomeKit, this means that with Homebridge you can ask Siri to control devices that don't have any support for HomeKit at all.", + "enhanced": true, + "tile_background": "dark", + "icon": "homebridge.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Homebridge/config.blade.php b/heimdall/config/www/SupportedApps/Homebridge/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Homebridge/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Homebridge/homebridge.png b/heimdall/config/www/SupportedApps/Homebridge/homebridge.png new file mode 100755 index 0000000..81a0533 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Homebridge/homebridge.png differ diff --git a/heimdall/config/www/SupportedApps/Homebridge/livestats.blade.php b/heimdall/config/www/SupportedApps/Homebridge/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Homebridge/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Homer/Homer.php b/heimdall/config/www/SupportedApps/Homer/Homer.php new file mode 100755 index 0000000..90b1748 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Homer/Homer.php @@ -0,0 +1,5 @@ + +image/svg+xml + + + + + + + + + + + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/InfluxDB/InfluxDB.php b/heimdall/config/www/SupportedApps/InfluxDB/InfluxDB.php new file mode 100755 index 0000000..166e9b4 --- /dev/null +++ b/heimdall/config/www/SupportedApps/InfluxDB/InfluxDB.php @@ -0,0 +1,5 @@ + + + + + + + + + + diff --git a/heimdall/config/www/SupportedApps/Infoblox/Infoblox.php b/heimdall/config/www/SupportedApps/Infoblox/Infoblox.php new file mode 100755 index 0000000..99abf42 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Infoblox/Infoblox.php @@ -0,0 +1,5 @@ +url, "/"); + $q = urlencode($query); + return redirect($url . "#search=" . $q); + } +} diff --git a/heimdall/config/www/SupportedApps/Jackett/app.json b/heimdall/config/www/SupportedApps/Jackett/app.json new file mode 100755 index 0000000..b2b7897 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jackett/app.json @@ -0,0 +1,10 @@ +{ + "appid": "9d24b65315557ddd848ba44b09191a6ab305966f", + "name": "Jackett", + "website": "https://github.com/Jackett/Jackett", + "license": "GNU General Public License v2.0 only", + "description": "Jackett works as a proxy server: it translates queries from apps (Sonarr, Radarr, SickRage, CouchPotato, Mylar, DuckieTV, etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software.", + "enhanced": false, + "tile_background": "light", + "icon": "jackett.svg" +} diff --git a/heimdall/config/www/SupportedApps/Jackett/jackett.png b/heimdall/config/www/SupportedApps/Jackett/jackett.png new file mode 100755 index 0000000..fe687a4 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Jackett/jackett.png differ diff --git a/heimdall/config/www/SupportedApps/Jaeger/Jaeger.php b/heimdall/config/www/SupportedApps/Jaeger/Jaeger.php new file mode 100755 index 0000000..fa8bbdc --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jaeger/Jaeger.php @@ -0,0 +1,77 @@ +config->service; + $operation = $this->config->operation; + $tags = $this->config->tags; + $lookback = $this->config->lookback; + $minDuration = $this->config->minDuration; + $maxDuration = $this->config->maxDuration; + $limit = $this->config->limit; + + $endpoint = 'api/traces?service='.urlencode($service); + if (!empty($operation)) $endpoint .= '&operation='.urlencode($operation); + if (!empty($tags)) $endpoint .= '&tags='. urlencode($tags); + if (!empty($lookback)) { + $lookbackFormatted = str_replace('d', ' days', str_replace('h', ' hours', $lookback)); + $timestampForOffset = time(); + $offset = $timestampForOffset - strtotime('-'.$lookbackFormatted, $timestampForOffset); + + $timestamp = microtime(true); + $end = sprintf('%0.0f', $timestamp * 1000000); + $start = sprintf('%0.0f', ($timestamp - $offset) * 1000000); + $endpoint .= '&lookback='.urlencode($lookback); + $endpoint .= '&start='.$start; + $endpoint .= '&end='.$end; + } + if (!empty($minDuration)) $endpoint .= '&minDuration='.urlencode($minDuration); + if (!empty($maxDuration)) $endpoint .= '&maxDuration='.urlencode($maxDuration); + if (!empty($limit)) $endpoint .= '&limit='.urlencode($limit); + return $this->url($endpoint); + } + + public function test() + { + $test = parent::appTest($this->tracesUrl()); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->tracesUrl()); + $details = json_decode($res->getBody()); + + $data = []; + + if($details) { + $status = 'active'; + $data['traces'] = count($details->data); + $data['avg_duration'] = 0; + if ($data['traces'] > 0) { + $durations = array_map(function($dataItem) { + $max = 0; + foreach ($dataItem->spans as $spanItem) { + $max = max($max, $spanItem->duration); + } + return $max; + }, $details->data); + $data['avg_duration'] = round(array_sum($durations)/$data['traces']/1000, 1); + } + } + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Jaeger/app.json b/heimdall/config/www/SupportedApps/Jaeger/app.json new file mode 100755 index 0000000..ac72775 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jaeger/app.json @@ -0,0 +1,10 @@ +{ + "appid": "917883dc82d936304725edacb6bf11e5cf537be6", + "name": "Jaeger", + "website": "https://www.jaegertracing.io/", + "license": "Apache License 2.0", + "description": "Jaeger is a distributed tracing platform, which can be used for monitoring microservices-based distributed systems.", + "enhanced": true, + "tile_background": "light", + "icon": "jaeger.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Jaeger/config.blade.php b/heimdall/config/www/SupportedApps/Jaeger/config.blade.php new file mode 100755 index 0000000..ddae07f --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jaeger/config.blade.php @@ -0,0 +1,42 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[service]', (isset($item) ? $item->getconfig()->service : 'jaeger-query'), array('placeholder' => 'Service, e.g. jaeger-query', 'data-config' => 'service', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[operation]', (isset($item) ? $item->getconfig()->operation : null), array('placeholder' => 'Operation, e.g. /api/traces', 'data-config' => 'operation', 'class' => 'form-control config-item')) !!} +
+
+
+
+ + {!! Form::text('config[tags]', (isset($item) ? $item->getconfig()->tags : null), array('placeholder' => __('app.apps.tags'), 'data-config' => 'tags', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::select('config[lookback]', array('1h' => 'Last Hour', '2h' => 'Last 2 Hours', '3h' => 'Last 3 Hours', '6h' => 'Last 6 Hours', '12h' => 'Last 12 Hours', '24h' => 'Last 24 Hours', '2d' => 'Last 2 Days'), (isset($item) ? $item->getconfig()->lookback : null), array('data-config' => 'lookback', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[limit]', (isset($item) ? $item->getconfig()->limit : 100), array('placeholder' => 'Limit results', 'data-config' => 'limit', 'class' => 'form-control config-item')) !!} +
+
+
+
+ + {!! Form::text('config[minDuration]', (isset($item) ? $item->getconfig()->minDuration : null), array('placeholder' => 'e.g. 1.2s, 100ms, 500us', 'data-config' => 'minDuration', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[maxDuration]', (isset($item) ? $item->getconfig()->maxDuration : null), array('placeholder' => 'e.g. 1.2s, 100ms, 500us', 'data-config' => 'maxDuration', 'class' => 'form-control config-item')) !!} +
+
+ +
+
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Jaeger/jaeger.png b/heimdall/config/www/SupportedApps/Jaeger/jaeger.png new file mode 100755 index 0000000..1e17e50 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Jaeger/jaeger.png differ diff --git a/heimdall/config/www/SupportedApps/Jaeger/livestats.blade.php b/heimdall/config/www/SupportedApps/Jaeger/livestats.blade.php new file mode 100755 index 0000000..d6db562 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jaeger/livestats.blade.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Jeedom/Jeedom.php b/heimdall/config/www/SupportedApps/Jeedom/Jeedom.php new file mode 100755 index 0000000..534c366 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jeedom/Jeedom.php @@ -0,0 +1,5 @@ +url("System/Info/Public"), + $this->getAttrs() + ); + echo $test->status; + } + + public function livestats() + { + $status = "inactive"; + $res = parent::execute($this->url("Items/Counts"), $this->getAttrs()); + $result = json_decode($res->getBody()); + $details = ["visiblestats" => []]; + foreach ($this->config->availablestats as $stat) { + $newstat = new \stdClass(); + $newstat->title = self::getAvailableStats()[$stat]; + $newstat->value = $result->{$stat}; + $details["visiblestats"][] = $newstat; + } + return parent::getLiveStats($status, $details); + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url) . $endpoint; + return $api_url; + } + + private function getAttrs() + { + return [ + "headers" => [ + "X-MediaBrowser-Token" => $this->config->password, + ], + ]; + } + + public static function getAvailableStats() + { + return [ + "MovieCount" => "Movies", + "SeriesCount" => "Series", + "EpisodeCount" => "Episodes", + "ArtistCount" => "Artists", + "ProgramCount" => "Programs", + "TrailerCount" => "Trailers", + "SongCount" => "Songs", + "AlbumCount" => "Albums", + "MusicVideoCount" => "MusicVideos", + "BoxSetCount" => "BoxSets", + "BookCount" => "Books", + "ItemCount" => "Items", + ]; + } +} diff --git a/heimdall/config/www/SupportedApps/Jellyfin/app.json b/heimdall/config/www/SupportedApps/Jellyfin/app.json new file mode 100755 index 0000000..2460041 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jellyfin/app.json @@ -0,0 +1,10 @@ +{ + "appid": "3e0a7f109bd760b9474c78cb652e8c3e82669226", + "name": "Jellyfin", + "website": "https://jellyfin.github.io", + "license": "GNU General Public License v2.0 only", + "description": "Jellyfin is the Free Software Media System that puts you in control of managing and streaming your media. There are no strings attached, no premium licenses or features, and no hidden agendas.", + "enhanced": true, + "tile_background": "dark", + "icon": "jellyfin.svg" +} diff --git a/heimdall/config/www/SupportedApps/Jellyfin/config.blade.php b/heimdall/config/www/SupportedApps/Jellyfin/config.blade.php new file mode 100755 index 0000000..faa3632 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jellyfin/config.blade.php @@ -0,0 +1,18 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::input('password', 'config[password]', '', ['placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item']) !!} +
+
+ + {!! Form::select('config[availablestats][]', App\SupportedApps\Jellyfin\Jellyfin::getAvailableStats(), isset($item) ? $item->getConfig()->availablestats ?? null : null, ['multiple' => 'multiple']) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Jellyfin/jellyfin.png b/heimdall/config/www/SupportedApps/Jellyfin/jellyfin.png new file mode 100755 index 0000000..4335d48 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Jellyfin/jellyfin.png differ diff --git a/heimdall/config/www/SupportedApps/Jellyfin/livestats.blade.php b/heimdall/config/www/SupportedApps/Jellyfin/livestats.blade.php new file mode 100755 index 0000000..cb9431a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jellyfin/livestats.blade.php @@ -0,0 +1,8 @@ + diff --git a/heimdall/config/www/SupportedApps/Jellyseerr/Jellyseerr.php b/heimdall/config/www/SupportedApps/Jellyseerr/Jellyseerr.php new file mode 100755 index 0000000..51ed1b7 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jellyseerr/Jellyseerr.php @@ -0,0 +1,61 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $this->attrs["headers"] = [ + "accept" => "application/json", + "X-Api-Key" => $this->config->apikey, + ]; + + $test = parent::appTest($this->url("auth/me"), $this->attrs); + + echo $test->status; + } + + public function livestats() + { + $status = "inactive"; + $data = []; + $this->attrs["headers"] = [ + "accept" => "application/json", + "X-Api-Key" => $this->config->apikey, + ]; + + $pendingRequestsCount = json_decode( + parent::execute($this->url("request/count"), $this->attrs)->getBody() + ); + + $pendingIssueCount = json_decode( + parent::execute($this->url("issue/count"), $this->attrs)->getBody() + ); + + if ($pendingRequestsCount || $pendingIssueCount) + { + $data["requests"] = $pendingRequestsCount->pending ?? 0; + $data["issues"] = $pendingIssueCount->open ?? 0; + } + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = + parent::normaliseurl($this->config->url) . + "api/v1/" . + $endpoint; + + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Jellyseerr/app.json b/heimdall/config/www/SupportedApps/Jellyseerr/app.json new file mode 100755 index 0000000..270a69c --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jellyseerr/app.json @@ -0,0 +1,10 @@ +{ + "appid": "0628c8d1a4868d6e6b994ae43a091f4e142ce642", + "name": "Jellyseerr", + "website": "https://github.com/Fallenbagel/jellyseerr", + "license": "MIT License", + "description": "Jellyseerr is a free and open source software application for managing requests for your media library. It is a a fork of Overseerr built to bring support for Jellyfin & Emby media servers!", + "enhanced": true, + "tile_background": "dark", + "icon": "jellyseerr.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Jellyseerr/config.blade.php b/heimdall/config/www/SupportedApps/Jellyseerr/config.blade.php new file mode 100755 index 0000000..4a8082c --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jellyseerr/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::text('config[apikey]', isset($item) ? $item->getconfig()->apikey : null, ['placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item']) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Jellyseerr/livestats.blade.php b/heimdall/config/www/SupportedApps/Jellyseerr/livestats.blade.php new file mode 100755 index 0000000..0e1e305 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jellyseerr/livestats.blade.php @@ -0,0 +1,10 @@ + diff --git a/heimdall/config/www/SupportedApps/Jenkins/Jenkins.php b/heimdall/config/www/SupportedApps/Jenkins/Jenkins.php new file mode 100755 index 0000000..09e7e94 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jenkins/Jenkins.php @@ -0,0 +1,5 @@ +jira software-icon-gradient-blue \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Jitsi/Jitsi.php b/heimdall/config/www/SupportedApps/Jitsi/Jitsi.php new file mode 100755 index 0000000..febb58e --- /dev/null +++ b/heimdall/config/www/SupportedApps/Jitsi/Jitsi.php @@ -0,0 +1,5 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Jupyter + + diff --git a/heimdall/config/www/SupportedApps/Kanboard/Kanboard.php b/heimdall/config/www/SupportedApps/Kanboard/Kanboard.php new file mode 100755 index 0000000..f2c718a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Kanboard/Kanboard.php @@ -0,0 +1,5 @@ +keycloak_deliverables \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Kibana/Kibana.php b/heimdall/config/www/SupportedApps/Kibana/Kibana.php new file mode 100755 index 0000000..21099ef --- /dev/null +++ b/heimdall/config/www/SupportedApps/Kibana/Kibana.php @@ -0,0 +1,5 @@ +config->url) . 'jsonrpc?request={"id":1,"jsonrpc":"2.0","method":"' . $endpoint . '"}'; + return $api_url; + } + + private function getAttrs() { + return [ + 'headers' => [ + 'Authorization' => 'Basic ' . base64_encode($this->config->username . ':' . $this->config->password), + ] + ]; + } + + public function test() + { + $test = parent::appTest($this->url('JSONRPC.Introspect'), $this->getAttrs()); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $data = ['visiblestats' => []]; + foreach($this->config->availablestats as $method) { + $res = parent::execute($this->url($method), $this->getAttrs()); + $result = json_decode($res->getBody()); + if ( isset($result->result) && isset($result->result->limits) ) { + $stat = new \stdClass(); + $stat->title = self::getAvailableStats()[$method]; + $stat->value = $result->result->limits->total; + $data['visiblestats'][] = $stat; + } + } + return parent::getLiveStats($status, $data); + } + + public static function getAvailableStats() + { + return [ + 'VideoLibrary.GetMovies' => 'Movies', + 'VideoLibrary.GetMovieSets' => 'Movie Sets', + 'VideoLibrary.GetTVShows' => 'TV Shows', + 'VideoLibrary.GetEpisodes' => 'Episodes', + 'PVR.GetRecordings' => 'PVR Rec', + 'AudioLibrary.GetArtists' => 'Artists', + 'AudioLibrary.GetAlbums' => 'Albums', + 'AudioLibrary.GetSongs' => 'Songs', + 'VideoLibrary.GetMusicVideos' => 'Music Vids', + ]; + } +} diff --git a/heimdall/config/www/SupportedApps/Kodi/app.json b/heimdall/config/www/SupportedApps/Kodi/app.json new file mode 100755 index 0000000..ee0b9e2 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Kodi/app.json @@ -0,0 +1,10 @@ +{ + "appid": "8ac539a79155a0032834264ac3f6dbd38f1c812d", + "name": "Kodi", + "website": "https://kodi.tv/", + "license": "GNU General Public License v1.0 or later", + "description": "Kodi (formerly known as XBMC) is an award-winning free and open source (GPL) software media player and entertainment hub that can be installed on Linux, OSX, Windows, iOS and Android, featuring a 10-foot user interface for use with televisions and remote controls.", + "enhanced": true, + "tile_background": "dark", + "icon": "kodi.png" +} diff --git a/heimdall/config/www/SupportedApps/Kodi/config.blade.php b/heimdall/config/www/SupportedApps/Kodi/config.blade.php new file mode 100755 index 0000000..69aad3c --- /dev/null +++ b/heimdall/config/www/SupportedApps/Kodi/config.blade.php @@ -0,0 +1,22 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::password('config[password]', array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::select('config[availablestats][]', App\SupportedApps\Kodi\Kodi::getAvailableStats(), isset($item) ? ($item->getConfig()->availablestats ?? null) : null, array('multiple'=>'multiple')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Kodi/kodi.png b/heimdall/config/www/SupportedApps/Kodi/kodi.png new file mode 100755 index 0000000..c88b069 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Kodi/kodi.png differ diff --git a/heimdall/config/www/SupportedApps/Kodi/livestats.blade.php b/heimdall/config/www/SupportedApps/Kodi/livestats.blade.php new file mode 100755 index 0000000..cb9431a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Kodi/livestats.blade.php @@ -0,0 +1,8 @@ +
    + @foreach ($visiblestats as $stat) +
  • + {!! $stat->title !!} + {!! $stat->value !!} +
  • + @endforeach +
diff --git a/heimdall/config/www/SupportedApps/Komga/Komga.php b/heimdall/config/www/SupportedApps/Komga/Komga.php new file mode 100755 index 0000000..d4cac76 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Komga/Komga.php @@ -0,0 +1,35 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/Komga/app.json b/heimdall/config/www/SupportedApps/Komga/app.json new file mode 100755 index 0000000..6665682 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Komga/app.json @@ -0,0 +1,10 @@ +{ + "appid": "6cd97a5fefab651371f821cb5167733112fbc536", + "name": "Komga", + "website": "https://komga.org/", + "license": "MIT License", + "description": "Komga is a free and open source comics/mangas server.", + "enhanced": true, + "tile_background": "dark", + "icon": "komga.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Komga/config.blade.php b/heimdall/config/www/SupportedApps/Komga/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Komga/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Komga/komga.png b/heimdall/config/www/SupportedApps/Komga/komga.png new file mode 100755 index 0000000..9b404e7 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Komga/komga.png differ diff --git a/heimdall/config/www/SupportedApps/Komga/livestats.blade.php b/heimdall/config/www/SupportedApps/Komga/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Komga/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Kopia/Kopia.php b/heimdall/config/www/SupportedApps/Kopia/Kopia.php new file mode 100755 index 0000000..3c0a0b0 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Kopia/Kopia.php @@ -0,0 +1,5 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/heimdall/config/www/SupportedApps/LazyLibrarian/LazyLibrarian.php b/heimdall/config/www/SupportedApps/LazyLibrarian/LazyLibrarian.php new file mode 100755 index 0000000..1273d95 --- /dev/null +++ b/heimdall/config/www/SupportedApps/LazyLibrarian/LazyLibrarian.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('system/status')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $missing = json_decode(parent::execute($this->url('wanted/missing'))->getBody()); + $queue = json_decode(parent::execute($this->url('queue'))->getBody()); + + if($missing || $queue) { + $data['missing'] = $missing->totalRecords ?? 0; + $data['queue'] = $queue->totalRecords ?? 0; + } + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).'api/v1/'.$endpoint.'?apikey='.$this->config->apikey; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Lidarr/app.json b/heimdall/config/www/SupportedApps/Lidarr/app.json new file mode 100755 index 0000000..9ac703b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Lidarr/app.json @@ -0,0 +1,10 @@ +{ + "appid": "c015fff30a3dc43f5987079c0142437e3e757fd0", + "name": "Lidarr", + "website": "https://lidarr.audio/", + "license": "GNU General Public License v3.0 only", + "description": "Lidarr is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them.", + "enhanced": true, + "tile_background": "dark", + "icon": "lidarr.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Lidarr/config.blade.php b/heimdall/config/www/SupportedApps/Lidarr/config.blade.php new file mode 100755 index 0000000..87755d5 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Lidarr/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', (isset($item) ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Lidarr/lidarr.png b/heimdall/config/www/SupportedApps/Lidarr/lidarr.png new file mode 100755 index 0000000..199ca63 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Lidarr/lidarr.png differ diff --git a/heimdall/config/www/SupportedApps/Lidarr/livestats.blade.php b/heimdall/config/www/SupportedApps/Lidarr/livestats.blade.php new file mode 100755 index 0000000..7b7fb92 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Lidarr/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Missing + {!! $missing !!} +
  • +
  • + Queue + {!! $queue !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/LinkAce/LinkAce.php b/heimdall/config/www/SupportedApps/LinkAce/LinkAce.php new file mode 100755 index 0000000..7cf9d5c --- /dev/null +++ b/heimdall/config/www/SupportedApps/LinkAce/LinkAce.php @@ -0,0 +1,63 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url("api/v1/links")); + echo $test->status; + } + + public function livestats() + { + $status = "inactive"; + + $res_links = parent::execute( + $this->url("api/v1/links"), + $this->attrs() + ); + $links = json_decode($res_links->getBody(), true); + + $res_tags = parent::execute($this->url("api/v1/tags"), $this->attrs()); + $tags = json_decode($res_tags->getBody(), true); + + $data = []; + + if ($links) { + $data["links"] = $links["total"] ?? 0; + } + + if ($tags) { + $data["tags"] = $tags["total"] ?? 0; + } + + return parent::getLiveStats($status, $data); + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url) . $endpoint; + return $api_url; + } + + public function attrs() + { + $apikey = $this->config->apikey; + $attrs = [ + "headers" => [ + "content-type" => "application/json", + "Authorization" => "Bearer " . $apikey, + ], + ]; + return $attrs; + } +} diff --git a/heimdall/config/www/SupportedApps/LinkAce/app.json b/heimdall/config/www/SupportedApps/LinkAce/app.json new file mode 100755 index 0000000..f07a679 --- /dev/null +++ b/heimdall/config/www/SupportedApps/LinkAce/app.json @@ -0,0 +1,10 @@ +{ + "appid": "c7eef6a399bb48a066d4e11fc577e896bc142cf3", + "name": "LinkAce", + "website": "https://www.linkace.org", + "license": "GNU General Public License v3.0 only", + "description": "LinkAce is a self-hosted archive to collect links of your favorite websites. Save articles to read them later, tools to use them in your next project, or historic content to archive it for the long term. LinkAce comes with a lot of features while keeping a clean and minimal interface.", + "enhanced": true, + "tile_background": "dark", + "icon": "linkace.svg" +} diff --git a/heimdall/config/www/SupportedApps/LinkAce/config.blade.php b/heimdall/config/www/SupportedApps/LinkAce/config.blade.php new file mode 100755 index 0000000..4a8082c --- /dev/null +++ b/heimdall/config/www/SupportedApps/LinkAce/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::text('config[apikey]', isset($item) ? $item->getconfig()->apikey : null, ['placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item']) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/LinkAce/linkace.png b/heimdall/config/www/SupportedApps/LinkAce/linkace.png new file mode 100755 index 0000000..63439a7 Binary files /dev/null and b/heimdall/config/www/SupportedApps/LinkAce/linkace.png differ diff --git a/heimdall/config/www/SupportedApps/LinkAce/livestats.blade.php b/heimdall/config/www/SupportedApps/LinkAce/livestats.blade.php new file mode 100755 index 0000000..83e0c05 --- /dev/null +++ b/heimdall/config/www/SupportedApps/LinkAce/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Links + {!! $links !!} +
  • +
  • + Tags + {!! $tags !!} +
  • +
diff --git a/heimdall/config/www/SupportedApps/Lychee/Lychee.php b/heimdall/config/www/SupportedApps/Lychee/Lychee.php new file mode 100755 index 0000000..4c49a65 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Lychee/Lychee.php @@ -0,0 +1,5 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/MailcowSOGo/MailcowSOGo.php b/heimdall/config/www/SupportedApps/MailcowSOGo/MailcowSOGo.php new file mode 100755 index 0000000..56347a0 --- /dev/null +++ b/heimdall/config/www/SupportedApps/MailcowSOGo/MailcowSOGo.php @@ -0,0 +1,5 @@ + + +image/svg+xml \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Mailhog/Mailhog.php b/heimdall/config/www/SupportedApps/Mailhog/Mailhog.php new file mode 100755 index 0000000..bd61545 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Mailhog/Mailhog.php @@ -0,0 +1,5 @@ + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/heimdall/config/www/SupportedApps/Mattermost/Mattermost.php b/heimdall/config/www/SupportedApps/Mattermost/Mattermost.php new file mode 100755 index 0000000..87a4b93 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Mattermost/Mattermost.php @@ -0,0 +1,5 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/Mealie/app.json b/heimdall/config/www/SupportedApps/Mealie/app.json new file mode 100755 index 0000000..3b96306 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Mealie/app.json @@ -0,0 +1,10 @@ +{ + "appid": "95fc71dc5b7a31e5a244df43f457a6eedc966ac9", + "name": "Mealie", + "website": "https://github.com/hay-kot/mealie", + "license": "MIT License", + "description": "Mealie is a self hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in Vue for a pleasant user experience for the whole family. Easily add recipes into your database by providing the url and mealie will automatically import the relevant data or add a family recipe with the UI editor.", + "enhanced": true, + "tile_background": "dark", + "icon": "mealie.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Mealie/config.blade.php b/heimdall/config/www/SupportedApps/Mealie/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Mealie/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Mealie/livestats.blade.php b/heimdall/config/www/SupportedApps/Mealie/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Mealie/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Mealie/mealie.png b/heimdall/config/www/SupportedApps/Mealie/mealie.png new file mode 100755 index 0000000..fdfa471 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Mealie/mealie.png differ diff --git a/heimdall/config/www/SupportedApps/MediaWiki/MediaWiki.php b/heimdall/config/www/SupportedApps/MediaWiki/MediaWiki.php new file mode 100755 index 0000000..f1b3a00 --- /dev/null +++ b/heimdall/config/www/SupportedApps/MediaWiki/MediaWiki.php @@ -0,0 +1,5 @@ +config->username != '' || $this->config->password != '') { + $this->attrs = ['auth'=> [$this->config->username, $this->config->password]]; + } + } + + public function test() + { + $this->setClientOptions(); + $test = parent::appTest($this->url(self::ENDPOINT), $this->attrs); + echo $test->status; + } + + public function livestats() + { + $this->setClientOptions(); + $res = parent::execute($this->url(self::ENDPOINT), $this->attrs); + $details = json_decode($res->getBody()); + + $data['count_unread'] = $details->total; + return parent::getLiveStats('inactive', $data); + } + + public function url($endpoint) + { + return parent::normaliseurl($this->config->url).$endpoint; + } +} diff --git a/heimdall/config/www/SupportedApps/Miniflux/app.json b/heimdall/config/www/SupportedApps/Miniflux/app.json new file mode 100755 index 0000000..5887f0b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Miniflux/app.json @@ -0,0 +1,10 @@ +{ + "appid": "f1a89a23921939fc4ea89777cf9c7d6c08679fde", + "name": "Miniflux", + "website": "https://miniflux.app/", + "license": "Apache License 2.0", + "description": "Miniflux is a lightweight RSS feed reader app.", + "enhanced": true, + "tile_background": "dark", + "icon": "miniflux.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Miniflux/config.blade.php b/heimdall/config/www/SupportedApps/Miniflux/config.blade.php new file mode 100755 index 0000000..f03eda1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Miniflux/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::password('config[password]', array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Miniflux/livestats.blade.php b/heimdall/config/www/SupportedApps/Miniflux/livestats.blade.php new file mode 100755 index 0000000..ee7acf0 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Miniflux/livestats.blade.php @@ -0,0 +1,6 @@ +
    +
  • + Unread entries + {!! $count_unread !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Miniflux/miniflux.png b/heimdall/config/www/SupportedApps/Miniflux/miniflux.png new file mode 100755 index 0000000..8915982 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Miniflux/miniflux.png differ diff --git a/heimdall/config/www/SupportedApps/Minio/Minio.php b/heimdall/config/www/SupportedApps/Minio/Minio.php new file mode 100755 index 0000000..09c3821 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Minio/Minio.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('api/contacts')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('api/contacts'), $this->attrs()); + $details = json_decode($res->getBody(), True); + + $data = []; + + if($details) { + $data['contacts'] = $details['meta']['total'] ?? 0; + } + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } + + public function attrs() + { + $apikey = $this->config->apikey; + $attrs = [ + 'headers' => ['content-type' => 'application/json', 'Authorization' => 'Bearer '.$apikey] + ]; + return $attrs; + } +} diff --git a/heimdall/config/www/SupportedApps/Monica/app.json b/heimdall/config/www/SupportedApps/Monica/app.json new file mode 100755 index 0000000..7ba72e2 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Monica/app.json @@ -0,0 +1,10 @@ +{ + "appid": "96d53734fc1bd54d848cd30f98069b90333b1bb3", + "name": "Monica", + "website": "https://www.monicahq.com/", + "license": "GNU Affero General Public License v3.0 only", + "description": "Monica is an open-source web application to organize the interactions with your loved ones. We call it a PRM, or Personal Relationship Management. Think of it as a CRM for your friends or family.", + "enhanced": true, + "tile_background": "light", + "icon": "monica.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Monica/config.blade.php b/heimdall/config/www/SupportedApps/Monica/config.blade.php new file mode 100755 index 0000000..f8cf4fa --- /dev/null +++ b/heimdall/config/www/SupportedApps/Monica/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', null, array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Monica/livestats.blade.php b/heimdall/config/www/SupportedApps/Monica/livestats.blade.php new file mode 100755 index 0000000..9d00af7 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Monica/livestats.blade.php @@ -0,0 +1,6 @@ +
    +
  • + Contacts + {!! $contacts !!} +
  • +
diff --git a/heimdall/config/www/SupportedApps/Monica/monica.png b/heimdall/config/www/SupportedApps/Monica/monica.png new file mode 100755 index 0000000..5d3d551 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Monica/monica.png differ diff --git a/heimdall/config/www/SupportedApps/Monit/Monit.php b/heimdall/config/www/SupportedApps/Monit/Monit.php new file mode 100755 index 0000000..0ba84cb --- /dev/null +++ b/heimdall/config/www/SupportedApps/Monit/Monit.php @@ -0,0 +1,35 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/Monit/app.json b/heimdall/config/www/SupportedApps/Monit/app.json new file mode 100755 index 0000000..05088f0 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Monit/app.json @@ -0,0 +1,10 @@ +{ + "appid": "3568f62a517667d3dae77d47746d8382dd3b9f3b", + "name": "Monit", + "website": "https://mmonit.com/monit/", + "license": "GNU Affero General Public License v3.0 or later", + "description": "Monit is a small Open Source utility for managing and monitoring Unix systems. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations.", + "enhanced": true, + "tile_background": "dark", + "icon": "monit.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Monit/config.blade.php b/heimdall/config/www/SupportedApps/Monit/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Monit/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Monit/livestats.blade.php b/heimdall/config/www/SupportedApps/Monit/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Monit/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Monit/monit.png b/heimdall/config/www/SupportedApps/Monit/monit.png new file mode 100755 index 0000000..3b04ae8 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Monit/monit.png differ diff --git a/heimdall/config/www/SupportedApps/MotionEye/MotionEye.php b/heimdall/config/www/SupportedApps/MotionEye/MotionEye.php new file mode 100755 index 0000000..c2c9bb9 --- /dev/null +++ b/heimdall/config/www/SupportedApps/MotionEye/MotionEye.php @@ -0,0 +1,5 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Mylar/Mylar.php b/heimdall/config/www/SupportedApps/Mylar/Mylar.php new file mode 100755 index 0000000..8c59451 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Mylar/Mylar.php @@ -0,0 +1,43 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('getVersion')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $data = []; + + $missing = json_decode(parent::execute($this->url('getWanted'))->getBody()); + $upcoming = json_decode(parent::execute($this->url('getUpcoming'))->getBody()); + + $data = []; + + $data['missing'] = count($missing) ?? 0; + $data['upcoming'] = count($upcoming) ?? 0; + + return parent::getLiveStats($status, $data); + + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).'api?apikey='.$this->config->apikey.'&cmd='.$endpoint; + return $api_url; + } + +} diff --git a/heimdall/config/www/SupportedApps/Mylar/app.json b/heimdall/config/www/SupportedApps/Mylar/app.json new file mode 100755 index 0000000..baef614 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Mylar/app.json @@ -0,0 +1,10 @@ +{ + "appid": "1c7c1eebcd96285956627a1d10006a6756d9c2b4", + "name": "Mylar", + "website": "https://github.com/evilhero/mylar", + "license": "GNU General Public License v3.0 only", + "description": "Mylar is an automated Comic Book (cbr/cbz) downloader program heavily-based on the Headphones template and logic (which is also based on Sick-Beard).", + "enhanced": true, + "tile_background": "dark", + "icon": "mylar.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Mylar/config.blade.php b/heimdall/config/www/SupportedApps/Mylar/config.blade.php new file mode 100755 index 0000000..87755d5 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Mylar/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', (isset($item) ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Mylar/livestats.blade.php b/heimdall/config/www/SupportedApps/Mylar/livestats.blade.php new file mode 100755 index 0000000..44c6bcc --- /dev/null +++ b/heimdall/config/www/SupportedApps/Mylar/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Missing + {!! $missing !!} +
  • +
  • + Upcoming + {!! $upcoming !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Mylar/mylar.png b/heimdall/config/www/SupportedApps/Mylar/mylar.png new file mode 100755 index 0000000..96ce51e Binary files /dev/null and b/heimdall/config/www/SupportedApps/Mylar/mylar.png differ diff --git a/heimdall/config/www/SupportedApps/NZBHydra/NZBHydra.php b/heimdall/config/www/SupportedApps/NZBHydra/NZBHydra.php new file mode 100755 index 0000000..e8bc535 --- /dev/null +++ b/heimdall/config/www/SupportedApps/NZBHydra/NZBHydra.php @@ -0,0 +1,11 @@ +url, '/'); + $q = urlencode($query); + return redirect($url.'/?category=All&mode=search&query='.$q); + } +} diff --git a/heimdall/config/www/SupportedApps/NZBHydra/app.json b/heimdall/config/www/SupportedApps/NZBHydra/app.json new file mode 100755 index 0000000..2437396 --- /dev/null +++ b/heimdall/config/www/SupportedApps/NZBHydra/app.json @@ -0,0 +1,10 @@ +{ + "appid": "a5b4faf84287a35c98adc76f2117aa10d1ea6eb8", + "name": "NZBHydra", + "website": "https://github.com/theotherp/nzbhydra2", + "license": "Apache License 2.0", + "description": "NZBHydra is a meta search for NZB indexers. It provides easy access to a number of raw and newznab based indexers. You can search all your indexers from one place and use it as an indexer source for tools like Sonarr, Radarr or CouchPotato.", + "enhanced": false, + "tile_background": "light", + "icon": "nzbhydra.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/NZBHydra/nzbhydra.png b/heimdall/config/www/SupportedApps/NZBHydra/nzbhydra.png new file mode 100755 index 0000000..1a3cd8e Binary files /dev/null and b/heimdall/config/www/SupportedApps/NZBHydra/nzbhydra.png differ diff --git a/heimdall/config/www/SupportedApps/Navidrome/Navidrome.php b/heimdall/config/www/SupportedApps/Navidrome/Navidrome.php new file mode 100755 index 0000000..5de2ed4 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Navidrome/Navidrome.php @@ -0,0 +1,58 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('rest/ping'), $this->getAttributes()); + if ($test->code === 200) { + $result = json_decode($test->response); + if ($result->{'subsonic-response'}->status != 'ok') { + $test->status = $result->{'subsonic-response'}->error->message; + } + } + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('rest/getNowPlaying'), $this->getAttributes()); + $result = json_decode($res->getBody(), true); + + $data['now_playing'] = !$result['subsonic-response']['nowPlaying'] ? 0 : count($result['subsonic-response']['nowPlaying']); + return parent::getLiveStats($status, $data); + } + + private function getAttributes() + { + $salt = 'omHQfVJ'; + $authToken = md5($this->config->password . $salt); + return [ + 'query' => [ + 'u' => $this->config->username, // username + 't' => $authToken, // token + 's' => $salt, // salt + 'v' => '1.16.1', // subsonic API version + 'c' => 'heimdall', // client name + 'f' => 'json', // request data format + ] + ]; + } + + public function url($endpoint) + { + $apiUrl = parent::normaliseurl($this->config->url) . $endpoint; + return $apiUrl; + } +} diff --git a/heimdall/config/www/SupportedApps/Navidrome/app.json b/heimdall/config/www/SupportedApps/Navidrome/app.json new file mode 100755 index 0000000..6e6f774 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Navidrome/app.json @@ -0,0 +1,10 @@ +{ + "appid": "31e028553b33bf830e42d88a888ee1093e3dd591", + "name": "Navidrome", + "website": "https://www.navidrome.org", + "license": "GNU General Public License v3.0 only", + "description": "Navidrome is a self-hosted, open source music server and streamer. It gives you freedom to listen to your music collection from any browser or mobile device.", + "enhanced": true, + "tile_background": "dark", + "icon": "navidrome.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Navidrome/config.blade.php b/heimdall/config/www/SupportedApps/Navidrome/config.blade.php new file mode 100755 index 0000000..ab0a2c5 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Navidrome/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', (isset($item) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::input('password', 'config[password]', (isset($item) ? $item->getconfig()->password : null), array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Navidrome/livestats.blade.php b/heimdall/config/www/SupportedApps/Navidrome/livestats.blade.php new file mode 100755 index 0000000..a23810f --- /dev/null +++ b/heimdall/config/www/SupportedApps/Navidrome/livestats.blade.php @@ -0,0 +1,6 @@ +
    +
  • + Now Playing + {!! $now_playing !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Navidrome/navidrome.png b/heimdall/config/www/SupportedApps/Navidrome/navidrome.png new file mode 100755 index 0000000..1b8b1a2 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Navidrome/navidrome.png differ diff --git a/heimdall/config/www/SupportedApps/Nessus/Nessus.php b/heimdall/config/www/SupportedApps/Nessus/Nessus.php new file mode 100755 index 0000000..b303c04 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nessus/Nessus.php @@ -0,0 +1,76 @@ + false, + 'timeout' => 15, + 'connect_timeout' => 15, + 'verify' => false, + ]; + + function __construct() { + } + + private function acquireToken() + { + $username = $this->config->username; + $password = $this->config->password; + $attrs = [ + 'body' => json_encode(array('username' => $username, 'password' => $password)), + 'headers' => ['content-type' => 'application/json'] + ]; + $res = parent::execute($this->url('session'), $attrs, $this->clientVars, 'POST'); + switch ($res->getStatusCode()) { + case 200: + $details = json_decode($res->getBody()); + return $details->token; + case 400: + throw new \Exception("Invalid username format"); + case 401: + throw new \Exception("Invalid username/password"); + } + + throw new \Exception("Error connecting to Nessus"); + } + + public function test() + { + try { + $this->acquireToken(); + } catch (\Throwable $e) { + echo $e->getMessage(); + return; + } + echo 'Successfully communicated with the API'; + } + + public function livestats() + { + $token = $this->acquireToken(); + $status = 'inactive'; + $attrs = [ + 'headers' => ['X-Cookie' => 'token='.$token] + ]; + $res = parent::execute($this->url('scans'), $attrs, $this->clientVars); + $details = json_decode($res->getBody()); + $data = []; + if ($details && !isset($details->error)) { + foreach ($details->scans as $scan) { + if ($scan->status == "running") { + $data['scanner'] = $scan->name; + $status = 'active'; + break; + } + } + } + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Nessus/app.json b/heimdall/config/www/SupportedApps/Nessus/app.json new file mode 100755 index 0000000..a6575d1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nessus/app.json @@ -0,0 +1,10 @@ +{ + "appid": "c47466c999c3113a3291ab09cab20b0df630d8e8", + "name": "Nessus", + "website": "https://www.tenable.com/products/nessus", + "license": "Commercial", + "description": "Nessus is trusted by more than 27,000 organizations worldwide as one of the most widely deployed security technologies on the planet - and the gold standard for vulnerability assessment.", + "enhanced": true, + "tile_background": "light", + "icon": "nessus.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Nessus/config.blade.php b/heimdall/config/www/SupportedApps/Nessus/config.blade.php new file mode 100755 index 0000000..57fd5fb --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nessus/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! 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')) !!} +
+
+ + {!! Form::text('config[username]', (isset($item) && isset($item->getconfig()->username) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! 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')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Nessus/livestats.blade.php b/heimdall/config/www/SupportedApps/Nessus/livestats.blade.php new file mode 100755 index 0000000..8571ae5 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nessus/livestats.blade.php @@ -0,0 +1,6 @@ +
    +
  • + Active scan + {!! $scanner !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Nessus/nessus.png b/heimdall/config/www/SupportedApps/Nessus/nessus.png new file mode 100755 index 0000000..84cb81a Binary files /dev/null and b/heimdall/config/www/SupportedApps/Nessus/nessus.png differ diff --git a/heimdall/config/www/SupportedApps/NetBox/NetBox.php b/heimdall/config/www/SupportedApps/NetBox/NetBox.php new file mode 100755 index 0000000..52e6133 --- /dev/null +++ b/heimdall/config/www/SupportedApps/NetBox/NetBox.php @@ -0,0 +1,5 @@ +url(self::ENDPOINT)); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url(self::ENDPOINT)); + $res = parent::execute($this->url(self::ENDPOINT)); + $details = json_decode($res->getBody()); + + $data = [ + 'count_warning' => $details->alarms->warning, + 'count_critical' => $details->alarms->critical + ]; + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Netdata/app.json b/heimdall/config/www/SupportedApps/Netdata/app.json new file mode 100755 index 0000000..e5c6cc1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Netdata/app.json @@ -0,0 +1,10 @@ +{ + "appid": "810d3926feac8c1bd3957fdac48b6c9475b932d0", + "name": "Netdata", + "website": "https://my-netdata.io/", + "license": "GNU General Public License v3.0 only", + "description": "Unparalleled insights, in real-time, of everything happening on your systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms.", + "enhanced": true, + "tile_background": "dark", + "icon": "netdata.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Netdata/config.blade.php b/heimdall/config/www/SupportedApps/Netdata/config.blade.php new file mode 100755 index 0000000..4505127 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Netdata/config.blade.php @@ -0,0 +1,11 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Netdata/livestats.blade.php b/heimdall/config/www/SupportedApps/Netdata/livestats.blade.php new file mode 100755 index 0000000..b2effee --- /dev/null +++ b/heimdall/config/www/SupportedApps/Netdata/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Warning + {!! $count_warning !!} +
  • +
  • + Critical + {!! $count_critical !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Netdata/netdata.png b/heimdall/config/www/SupportedApps/Netdata/netdata.png new file mode 100755 index 0000000..297cee5 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Netdata/netdata.png differ diff --git a/heimdall/config/www/SupportedApps/Nextcloud/Nextcloud.php b/heimdall/config/www/SupportedApps/Nextcloud/Nextcloud.php new file mode 100755 index 0000000..a71c42a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nextcloud/Nextcloud.php @@ -0,0 +1,106 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function getHeaders() + { + $username = $this->config->username; + $password = $this->config->password; + + $attrs["headers"] = [ + "Authorization" => + "Basic " . base64_encode($username . ":" . $password), + "OCS-APIRequest" => "true", + ]; + return $attrs; + } + + public function test() + { + $username = $this->config->username; + + $test = parent::appTest( + $this->url("/ocs/v1.php/cloud/users/" . $username . "?format=json"), + $this->getHeaders() + ); + echo $test->status; + } + + public function livestats() + { + $status = "inactive"; + + $username = $this->config->username; + $res = parent::execute( + $this->url("/ocs/v1.php/cloud/users/" . $username . "?format=json"), + $this->getHeaders() + ); + $details = json_decode($res->getBody()); + + $data = ["visiblestats" => []]; + + if ($details) { + foreach ($this->config->availablestats as $stat) { + if (!isset(self::getAvailableStats()[$stat])) { + continue; + } + + $newstat = new \stdClass(); + $newstat->title = self::getAvailableStats()[$stat]; + $newstat->value = self::formatNumberUsingStat( + $stat, + $details->ocs->data->quota->{$stat} + ); + + $data["visiblestats"][] = $newstat; + } + } + + return parent::getLiveStats($status, $data); + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url); + return $api_url . $endpoint; + } + + public static function getAvailableStats() + { + return [ + "relative" => "Usage", + "used" => "Used Space", + "free" => "Free Space", + "total" => "Total Space", + ]; + } + + private static function formatNumberUsingStat($stat, $number) + { + if (!isset($number)) { + return "N/A"; + } + + switch ($stat) { + case "free": + case "used": + case "total": + return format_bytes($number, false, "", ""); + case "relative": + return number_format($number, 1) . "%"; + default: + return number_format($number); + } + } +} diff --git a/heimdall/config/www/SupportedApps/Nextcloud/app.json b/heimdall/config/www/SupportedApps/Nextcloud/app.json new file mode 100755 index 0000000..f5ec7b3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nextcloud/app.json @@ -0,0 +1,32 @@ +{ + "appid": "f2baa52d02ca888455ce47823f47bf372d5eecb3", + "name": "Nextcloud", + "website": "https://nextcloud.com", + "license": "GNU Affero General Public License v3.0 only", + "description": "Nextcloud is an open source, self-hosted file share and communication platform. Access and sync your files, contacts, calendars and communicate and collaborate across your devices.", + "enhanced": true, + "tile_background": "light", + "icon": "nextcloud.svg", + "config": { + "type": "basic_auth", + "additional_headers": { + "OCS-APIRequest": "true" + }, + "stat1": { + "name": "Total", + "url": ":url:ocs/v1.php/cloud/users/:username:?format=json", + "key": "ocs.data.quota.total", + "filter": "size", + "updateOnChange": "No", + "suffix": "" + }, + "stat2": { + "name": "Used", + "url": ":url:ocs/v1.php/cloud/users/:username:?format=json", + "key": "ocs.data.quota.used", + "filter": "size", + "updateOnChange": "No", + "suffix": "" + } + } +} diff --git a/heimdall/config/www/SupportedApps/Nextcloud/config.blade.php b/heimdall/config/www/SupportedApps/Nextcloud/config.blade.php new file mode 100755 index 0000000..2c16b6f --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nextcloud/config.blade.php @@ -0,0 +1,23 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::text('config[username]', isset($item) ? $item->getconfig()->username : null, ['placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item']) !!} +
+
+ + {!! Form::input('password', 'config[password]', '', ['placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item']) !!} + Security » App Password +
+
+ + {!! Form::select('config[availablestats][]', App\SupportedApps\Nextcloud\Nextcloud::getAvailableStats(), isset($item) ? $item->getConfig()->availablestats ?? null : null, ['multiple' => 'multiple']) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Nextcloud/livestats.blade.php b/heimdall/config/www/SupportedApps/Nextcloud/livestats.blade.php new file mode 100755 index 0000000..cb9431a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nextcloud/livestats.blade.php @@ -0,0 +1,8 @@ +
    + @foreach ($visiblestats as $stat) +
  • + {!! $stat->title !!} + {!! $stat->value !!} +
  • + @endforeach +
diff --git a/heimdall/config/www/SupportedApps/Nextcloud/nextcloud.png b/heimdall/config/www/SupportedApps/Nextcloud/nextcloud.png new file mode 100755 index 0000000..4c84a3c Binary files /dev/null and b/heimdall/config/www/SupportedApps/Nextcloud/nextcloud.png differ diff --git a/heimdall/config/www/SupportedApps/NginxProxyManager/NginxProxyManager.php b/heimdall/config/www/SupportedApps/NginxProxyManager/NginxProxyManager.php new file mode 100755 index 0000000..4cfe60e --- /dev/null +++ b/heimdall/config/www/SupportedApps/NginxProxyManager/NginxProxyManager.php @@ -0,0 +1,5 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/heimdall/config/www/SupportedApps/NodeRed.zip b/heimdall/config/www/SupportedApps/NodeRed.zip new file mode 100755 index 0000000..923fe2a --- /dev/null +++ b/heimdall/config/www/SupportedApps/NodeRed.zip @@ -0,0 +1,88 @@ + + + + + + Page not found · GitHub Pages + + + + +
+ +

404

+

File not found

+ +

+ The site configured at this address does not + contain the requested file. +

+ +

+ If this is your site, make sure that the filename case matches the URL.
+ For root URLs (like http://example.com/) you must provide an + index.html file. +

+ +

+ Read the full documentation + for more information about using GitHub Pages. +

+ + + + + + +
+ + diff --git a/heimdall/config/www/SupportedApps/NodeRed/NodeRed.php b/heimdall/config/www/SupportedApps/NodeRed/NodeRed.php new file mode 100755 index 0000000..9ca8159 --- /dev/null +++ b/heimdall/config/www/SupportedApps/NodeRed/NodeRed.php @@ -0,0 +1,35 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/NodeRed/app.json b/heimdall/config/www/SupportedApps/NodeRed/app.json new file mode 100755 index 0000000..2dcec94 --- /dev/null +++ b/heimdall/config/www/SupportedApps/NodeRed/app.json @@ -0,0 +1,10 @@ +{ + "appid": "1608962f5295ccc488f3103ea8df2c6d45c62c65", + "name": "Node-Red", + "website": "https://nodered.org/", + "license": "Apache License 2.0", + "description": "Node-RED is a flow-based development tool for visual programming developed originally by IBM for wiring together hardware devices, APIs and online services as part of the Internet of Things. \r\n\r\nNode-RED provides a browser-based flow editor, which can be used to create JavaScript functions. Elements of applications can be saved or shared for re-use. The runtime is built on Node.js. The flows created in Node-RED are stored using JSON. Since version 0.14 MQTT nodes can make properly configured TLS connections", + "enhanced": true, + "tile_background": "dark", + "icon": "nodered.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/NodeRed/config.blade.php b/heimdall/config/www/SupportedApps/NodeRed/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/NodeRed/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/NodeRed/livestats.blade.php b/heimdall/config/www/SupportedApps/NodeRed/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/NodeRed/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/NodeRed/nodered.png b/heimdall/config/www/SupportedApps/NodeRed/nodered.png new file mode 100755 index 0000000..4dad86e Binary files /dev/null and b/heimdall/config/www/SupportedApps/NodeRed/nodered.png differ diff --git a/heimdall/config/www/SupportedApps/NowShowing/NowShowing.php b/heimdall/config/www/SupportedApps/NowShowing/NowShowing.php new file mode 100755 index 0000000..ad9392e --- /dev/null +++ b/heimdall/config/www/SupportedApps/NowShowing/NowShowing.php @@ -0,0 +1,5 @@ +url('status')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('status')); + $details = json_decode($res->getBody()); + + $data = []; + + if($details) { + $size = $details->result->RemainingSizeMB; + $rate = $details->result->DownloadRate; + $data['queue_size'] = format_bytes($size*1000*1000, false, ' ', ''); + $data['current_speed'] = format_bytes($rate, false, ' '); + $status = ($size > 0 || $rate > 0) ? 'active' : 'inactive'; + } + + return parent::getLiveStats($status, $data); + + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url); + $username = urlencode($this->config->username); + $password = urlencode($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.'/jsonrpc/'.$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Nzbget/app.json b/heimdall/config/www/SupportedApps/Nzbget/app.json new file mode 100755 index 0000000..3976bab --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nzbget/app.json @@ -0,0 +1,10 @@ +{ + "appid": "31a7b1d936c4e8503bb446e5ff8ada669d1846bd", + "name": "Nzbget", + "website": "https://nzbget.net/", + "license": "GNU General Public License v2.0 only", + "description": "NZBGet is a binary downloader, which downloads files from Usenet based on information given in nzb-files. NZBGet is written in C++ and is known for its extraordinary performance and efficiency.", + "enhanced": true, + "tile_background": "dark", + "icon": "nzbget.png" +} diff --git a/heimdall/config/www/SupportedApps/Nzbget/config.blade.php b/heimdall/config/www/SupportedApps/Nzbget/config.blade.php new file mode 100755 index 0000000..96538bb --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nzbget/config.blade.php @@ -0,0 +1,18 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', (isset($item) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::input('password', 'config[password]', (isset($item) ? $item->getconfig()->password : null), array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Nzbget/livestats.blade.php b/heimdall/config/www/SupportedApps/Nzbget/livestats.blade.php new file mode 100755 index 0000000..86b712a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Nzbget/livestats.blade.php @@ -0,0 +1,5 @@ +
    +
  • Queue{!! $queue_size !!}
  • +
  • Speed{!! $current_speed !!}/s
  • +
+ diff --git a/heimdall/config/www/SupportedApps/Nzbget/nzbget.png b/heimdall/config/www/SupportedApps/Nzbget/nzbget.png new file mode 100755 index 0000000..a44c575 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Nzbget/nzbget.png differ diff --git a/heimdall/config/www/SupportedApps/OPNsense/OPNsense.php b/heimdall/config/www/SupportedApps/OPNsense/OPNsense.php new file mode 100755 index 0000000..513a41e --- /dev/null +++ b/heimdall/config/www/SupportedApps/OPNsense/OPNsense.php @@ -0,0 +1,5 @@ + $this->config->apikey]; + $test = parent::appTest($this->url('api/version'), $attrs); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $attrs['headers'] = ['X-Api-Key' => $this->config->apikey]; + $res = parent::execute($this->url('api/job'), $attrs); + if(!$res) return parent::getLiveStats($status, ['error' => "Connection"]); + $details = json_decode($res->getBody()); + + $data = []; + + $progress = $details->progress->completion; + + $data['progress'] = @round($progress) ?? 0; + $seconds = $details->progress->printTimeLeft; + if($seconds === null) { + $data['estimated'] = 'N/A'; + } elseif($seconds > 0) { + $data['estimated'] = Carbon::now()->addSeconds($seconds)->diffForHumans(); + } else { + $data['estimated'] = 'N/A'; + } + + + $status = ($data['progress'] < 100 && $progress !== null) ? 'active' : 'inactive'; + + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Octoprint/app.json b/heimdall/config/www/SupportedApps/Octoprint/app.json new file mode 100755 index 0000000..5e32625 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Octoprint/app.json @@ -0,0 +1,10 @@ +{ + "appid": "99be0df8034cbcd7b5dfb3290839f7db21c1acbb", + "name": "Octoprint", + "website": "https://octoprint.org/", + "license": "GNU Affero General Public License v3.0", + "description": "OctoPrint is the snappy web interface for your 3D printer that allows you to control and monitor all aspects of your printer and print jobs, right from your browser.", + "enhanced": true, + "tile_background": "dark", + "icon": "octoprint.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Octoprint/config.blade.php b/heimdall/config/www/SupportedApps/Octoprint/config.blade.php new file mode 100755 index 0000000..e924583 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Octoprint/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', (isset($item) ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Octoprint/livestats.blade.php b/heimdall/config/www/SupportedApps/Octoprint/livestats.blade.php new file mode 100755 index 0000000..fdd5a0a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Octoprint/livestats.blade.php @@ -0,0 +1,22 @@ +
    + @if(isset($error)) +
  • + ERROR + {!! $error !!} +
  • + @else + @if(isset($progress)) +
  • + Progress + {!! $progress !!}% +
  • + @endif + + @if(isset($estimated)) +
  • + Finish + {!! $estimated !!} +
  • + @endif + @endif +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Octoprint/octoprint.png b/heimdall/config/www/SupportedApps/Octoprint/octoprint.png new file mode 100755 index 0000000..41f1093 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Octoprint/octoprint.png differ diff --git a/heimdall/config/www/SupportedApps/Ombi/Ombi.php b/heimdall/config/www/SupportedApps/Ombi/Ombi.php new file mode 100755 index 0000000..a089d51 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Ombi/Ombi.php @@ -0,0 +1,35 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('api/v1/status')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $this->attrs['headers'] = ['ApiKey' => $this->config->apikey]; + $res = parent::execute($this->url('api/v1/request/count'), $this->attrs); + $details = json_decode($res->getBody(), True); + + return parent::getLiveStats($status, $details); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Ombi/app.json b/heimdall/config/www/SupportedApps/Ombi/app.json new file mode 100755 index 0000000..6273aa1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Ombi/app.json @@ -0,0 +1,10 @@ +{ + "appid": "57b25ceb94bd4c9ba9038ce17656f5ede9007e4c", + "name": "Ombi", + "website": "https://ombi.io/", + "license": "GNU General Public License v2.0 only", + "description": "Ombi is a self-hosted web application that automatically gives your shared Plex or Emby users the ability to request content by themselves! Ombi can be linked to multiple TV Show and Movie DVR tools to create a seamless end-to-end experience for your users.", + "enhanced": true, + "tile_background": "dark", + "icon": "ombi.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Ombi/config.blade.php b/heimdall/config/www/SupportedApps/Ombi/config.blade.php new file mode 100755 index 0000000..8192dc9 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Ombi/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', (isset($item) ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Ombi/livestats.blade.php b/heimdall/config/www/SupportedApps/Ombi/livestats.blade.php new file mode 100755 index 0000000..9116334 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Ombi/livestats.blade.php @@ -0,0 +1,4 @@ +
    +
  • Pending{!! $pending !!}
  • +
  • Approved{!! $approved !!}
  • +
diff --git a/heimdall/config/www/SupportedApps/Ombi/ombi.png b/heimdall/config/www/SupportedApps/Ombi/ombi.png new file mode 100755 index 0000000..f0d733c Binary files /dev/null and b/heimdall/config/www/SupportedApps/Ombi/ombi.png differ diff --git a/heimdall/config/www/SupportedApps/OmniDB/OmniDB.php b/heimdall/config/www/SupportedApps/OmniDB/OmniDB.php new file mode 100755 index 0000000..0932773 --- /dev/null +++ b/heimdall/config/www/SupportedApps/OmniDB/OmniDB.php @@ -0,0 +1,5 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + + + diff --git a/heimdall/config/www/SupportedApps/Overseerr/Overseerr.php b/heimdall/config/www/SupportedApps/Overseerr/Overseerr.php new file mode 100755 index 0000000..a7b4ad3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Overseerr/Overseerr.php @@ -0,0 +1,39 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $this->attrs['headers'] = ['accept' => 'application/json','X-Api-Key' => $this->config->apikey]; + $test = parent::appTest($this->url('api/v1/auth/me'), $this->attrs); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $this->attrs['headers'] = ['accept' => 'application/json','X-Api-Key' => $this->config->apikey]; + $res = parent::execute($this->url('api/v1/request/count'), $this->attrs); + $details = json_decode($res->getBody(), True); + + return parent::getLiveStats($status, $details); + + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } + +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Overseerr/app.json b/heimdall/config/www/SupportedApps/Overseerr/app.json new file mode 100755 index 0000000..fe6befa --- /dev/null +++ b/heimdall/config/www/SupportedApps/Overseerr/app.json @@ -0,0 +1,10 @@ +{ + "appid": "989fb18945a331b430fc284edfe6451aa760f8e6", + "name": "Overseerr", + "website": "https://github.com/sct/overseerr", + "license": "MIT License", + "description": "Overseerr is a free and open source software application for managing requests for your media library. It integrates with your existing services such as Sonarr, Radarr and Plex!", + "enhanced": true, + "tile_background": "dark", + "icon": "overseerr.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Overseerr/config.blade.php b/heimdall/config/www/SupportedApps/Overseerr/config.blade.php new file mode 100755 index 0000000..8192dc9 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Overseerr/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', (isset($item) ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Overseerr/livestats.blade.php b/heimdall/config/www/SupportedApps/Overseerr/livestats.blade.php new file mode 100755 index 0000000..49b0fc6 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Overseerr/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Pending + {!! $pending !!} +
  • +
  • + Processing + {!! $processing !!} +
  • +
diff --git a/heimdall/config/www/SupportedApps/Overseerr/overseerr.png b/heimdall/config/www/SupportedApps/Overseerr/overseerr.png new file mode 100755 index 0000000..e0f5ed6 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Overseerr/overseerr.png differ diff --git a/heimdall/config/www/SupportedApps/OwnPhotos/OwnPhotos.php b/heimdall/config/www/SupportedApps/OwnPhotos/OwnPhotos.php new file mode 100755 index 0000000..7331517 --- /dev/null +++ b/heimdall/config/www/SupportedApps/OwnPhotos/OwnPhotos.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $username = $this->config->username; + $passhash = $this->config->passhash; + $test = parent::appTest($this->url('api/getstatus.htm?id=0&username='.$username.'&passhash='.$passhash)); + echo $test->status; + } + + public function livestats() + { + $username = $this->config->username; + $passhash = $this->config->passhash; + $status = 'inactive'; + $res = parent::execute($this->url('api/getstatus.htm?id=0&username='.$username.'&passhash='.$passhash)); + $details = json_decode($res->getBody()); + + $data = []; + + if($details) { + if (empty($details->Alarms)) {$data['alarms'] = 0;} else {$data['alarms'] = number_format($details->Alarms);} + if (empty($details->AckAlarms)) {$data['alarmsack'] = 0;} else {$data['alarmsack'] = number_format($details->AckAlarms);} + if (empty($details->WarnSens)) {$data['warnings'] = 0;} else {$data['warnings'] = number_format($details->WarnSens);} + if (empty($details->UnusualSens)) {$data['unusuals'] = 0;} else {$data['unusuals'] = number_format($details->UnusualSens);} + if (empty($details->UpSens)) {$data['ups'] = 0;} else {$data['ups'] = number_format($details->UpSens);} + } + + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/PRTG/app.json b/heimdall/config/www/SupportedApps/PRTG/app.json new file mode 100755 index 0000000..aff0975 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PRTG/app.json @@ -0,0 +1,10 @@ +{ + "appid": "0ea6cd5e52e84ef9afd444f5693d09d216b10ba2", + "name": "PRTG", + "website": "https://www.paessler.com/prtg", + "license": "100 sensors free", + "description": "Monitor all systems, devices, traffic and applications of your IT infrastructure.", + "enhanced": true, + "tile_background": "light", + "icon": "prtg.png" +} diff --git a/heimdall/config/www/SupportedApps/PRTG/config.blade.php b/heimdall/config/www/SupportedApps/PRTG/config.blade.php new file mode 100755 index 0000000..4f2facf --- /dev/null +++ b/heimdall/config/www/SupportedApps/PRTG/config.blade.php @@ -0,0 +1,18 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', (isset($item) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[passhash]', (isset($item) ? $item->getconfig()->passhash : null), array('placeholder' => __('Passhash'), 'data-config' => 'passhash', 'class' => 'form-control config-item')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/PRTG/livestats.blade.php b/heimdall/config/www/SupportedApps/PRTG/livestats.blade.php new file mode 100755 index 0000000..9c7bb33 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PRTG/livestats.blade.php @@ -0,0 +1,22 @@ +
    +
  • + +

    {!! $alarms !!}

    +
  • +
  • + +

    {!! $alarmsack !!}

    +
  • +
  • + +

    {!! $warnings !!}

    +
  • +
  • + +

    {!! $unusuals !!}

    +
  • +
  • + +

    {!! $ups !!}

    +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/PRTG/prtg.png b/heimdall/config/www/SupportedApps/PRTG/prtg.png new file mode 100755 index 0000000..3dc1690 Binary files /dev/null and b/heimdall/config/www/SupportedApps/PRTG/prtg.png differ diff --git a/heimdall/config/www/SupportedApps/PaloAltoNetworks/PaloAltoNetworks.php b/heimdall/config/www/SupportedApps/PaloAltoNetworks/PaloAltoNetworks.php new file mode 100755 index 0000000..b437ac6 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PaloAltoNetworks/PaloAltoNetworks.php @@ -0,0 +1,5 @@ +getConfigValue("apikey", null); + + $attrs["headers"] = [ + "Accept" => "application/json", + "Authorization" => "Token " . $apikey, + ]; + + return $attrs; + } + + + public function getConfigValue($key, $default = null) + { + return isset($this->config) && isset($this->config->$key) + ? $this->config->$key + : $default; + } + + public function test() + { + $attrs = $this->getRequestAttrs(); + $test = parent::appTest($this->url("documents"), $attrs); + echo $test->status; + } + + public function livestats() + { + $status = "inactive"; + $data = []; + $attrs = $this->getRequestAttrs(); + + $documents = json_decode( + parent::execute($this->url("statistics"), $attrs)->getBody() + ); + + $data = [ + "documentCount" => $documents->documents_total ?? 0, + "documentsInbox" => $documents->documents_inbox ?? 0 + ]; + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = + parent::normaliseurl($this->config->url) . + "api/" . + $endpoint . + "/"; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/PaperlessNgx/app.json b/heimdall/config/www/SupportedApps/PaperlessNgx/app.json new file mode 100755 index 0000000..229cd47 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PaperlessNgx/app.json @@ -0,0 +1,10 @@ +{ + "appid": "23e9c842d2423902706ae92996554f6fbd92c502", + "name": "PaperlessNgx", + "website": "https://github.com/paperless-ngx/paperless-ngx", + "license": "GNU General Public License v3.0 only", + "description": "Paperless-ngx is a document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper.", + "enhanced": true, + "tile_background": "dark", + "icon": "paperlessngx.svg" +} diff --git a/heimdall/config/www/SupportedApps/PaperlessNgx/config.blade.php b/heimdall/config/www/SupportedApps/PaperlessNgx/config.blade.php new file mode 100755 index 0000000..4a8082c --- /dev/null +++ b/heimdall/config/www/SupportedApps/PaperlessNgx/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::text('config[apikey]', isset($item) ? $item->getconfig()->apikey : null, ['placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item']) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/PaperlessNgx/livestats.blade.php b/heimdall/config/www/SupportedApps/PaperlessNgx/livestats.blade.php new file mode 100755 index 0000000..416e502 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PaperlessNgx/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Documents + {!! $documentCount !!} +
  • +
  • + Inbox + {!! $documentsInbox !!} +
  • +
diff --git a/heimdall/config/www/SupportedApps/PartKeepr/PartKeepr.php b/heimdall/config/www/SupportedApps/PartKeepr/PartKeepr.php new file mode 100755 index 0000000..a0466d1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PartKeepr/PartKeepr.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('api/v1/config')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('api/v1/config')); + $details = json_decode($res->getBody(), True); + + $data = []; + + if($details) { + $data['photos'] = number_format($details['count']['photos']) ?? 0; + $data['videos'] = number_format($details['count']['videos']) ?? 0; + } + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/PhotoPrism/app.json b/heimdall/config/www/SupportedApps/PhotoPrism/app.json new file mode 100755 index 0000000..4a97405 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PhotoPrism/app.json @@ -0,0 +1,10 @@ +{ + "appid": "f60f5b25d59c397989e3cd374f81cdd7710a4fca", + "name": "PhotoPrism", + "website": "https://photoprism.org/", + "license": "GNU General Public License v3.0 only", + "description": "PhotoPrism is a server-based application for browsing, organizing and sharing your personal photo collection. It makes use of the latest technologies to automatically tag and find pictures without getting in your way. Say goodbye to solutions that force you to upload your visual memories to the cloud.", + "enhanced": true, + "tile_background": "light", + "icon": "photoprism.png" +} diff --git a/heimdall/config/www/SupportedApps/PhotoPrism/config.blade.php b/heimdall/config/www/SupportedApps/PhotoPrism/config.blade.php new file mode 100755 index 0000000..53f26e1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PhotoPrism/config.blade.php @@ -0,0 +1,10 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/PhotoPrism/livestats.blade.php b/heimdall/config/www/SupportedApps/PhotoPrism/livestats.blade.php new file mode 100755 index 0000000..72f1b71 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PhotoPrism/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Photos + {!! $photos !!} +
  • +
  • + Videos + {!! $videos !!} +
  • +
diff --git a/heimdall/config/www/SupportedApps/PhotoPrism/photoprism.png b/heimdall/config/www/SupportedApps/PhotoPrism/photoprism.png new file mode 100755 index 0000000..b832557 Binary files /dev/null and b/heimdall/config/www/SupportedApps/PhotoPrism/photoprism.png differ diff --git a/heimdall/config/www/SupportedApps/Photonix/Photonix.php b/heimdall/config/www/SupportedApps/Photonix/Photonix.php new file mode 100755 index 0000000..f7722cb --- /dev/null +++ b/heimdall/config/www/SupportedApps/Photonix/Photonix.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('data/aircraft.json')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('data/aircraft.json')); + $details = json_decode($res->getBody(), true); + + $data = []; + + if($details) { + $filtered_total = array_filter($details['aircraft'], function($element) { + return $element['seen'] <= 58; + }); + $data['total'] = count($filtered_total); + $filtered_positions = array_filter($filtered_total, function($element) { + return array_key_exists('seen_pos', $element) && $element['seen_pos'] < 60; + }); + $data['positions'] = count($filtered_positions); + } + + return parent::getLiveStats($status, $data); + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/PiAware/app.json b/heimdall/config/www/SupportedApps/PiAware/app.json new file mode 100755 index 0000000..65a7081 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PiAware/app.json @@ -0,0 +1,10 @@ +{ + "appid": "b897f0f558bc83256a49d5c7e8f1658d87cfe820", + "name": "PiAware", + "website": "https://github.com/flightaware/piaware", + "license": "BSD 3-Clause \"New\" or \"Revised\" License", + "description": "Client-side package and programs for forwarding ADS-B data to FlightAware", + "enhanced": true, + "tile_background": "light", + "icon": "piaware.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/PiAware/config.blade.php b/heimdall/config/www/SupportedApps/PiAware/config.blade.php new file mode 100755 index 0000000..53f26e1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PiAware/config.blade.php @@ -0,0 +1,10 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/PiAware/livestats.blade.php b/heimdall/config/www/SupportedApps/PiAware/livestats.blade.php new file mode 100755 index 0000000..1079b21 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PiAware/livestats.blade.php @@ -0,0 +1,11 @@ +
    +
  • + Aircraft + {!! $total !!} +
  • +
  • + Positions + {!! $positions !!} +
  • + +
diff --git a/heimdall/config/www/SupportedApps/PiAware/piaware.png b/heimdall/config/www/SupportedApps/PiAware/piaware.png new file mode 100755 index 0000000..7cfc49e Binary files /dev/null and b/heimdall/config/www/SupportedApps/PiAware/piaware.png differ diff --git a/heimdall/config/www/SupportedApps/PiVPN/PiVPN.php b/heimdall/config/www/SupportedApps/PiVPN/PiVPN.php new file mode 100755 index 0000000..9176146 --- /dev/null +++ b/heimdall/config/www/SupportedApps/PiVPN/PiVPN.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('/api.php')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('/api.php')); + $details = json_decode($res->getBody()); + + $data = []; + + if($details) { + $data['ads_blocked_today'] = number_format($details->ads_blocked_today); + $data['ads_percentage_today'] = number_format($details->ads_percentage_today,1); + } + + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Pihole/app.json b/heimdall/config/www/SupportedApps/Pihole/app.json new file mode 100755 index 0000000..a408211 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Pihole/app.json @@ -0,0 +1,10 @@ +{ + "appid": "b89920409bdce40e08ba1023480b0546061cd577", + "name": "Pi-hole", + "website": "https://pi-hole.net/", + "license": "European Union Public License 1.2", + "description": "Pi-hole is a Linux network-level advertisement and internet tracker blocking application which acts as a DNS sinkhole, intended for use on a private network.", + "enhanced": true, + "tile_background": "dark", + "icon": "pihole.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Pihole/config.blade.php b/heimdall/config/www/SupportedApps/Pihole/config.blade.php new file mode 100755 index 0000000..d371b9a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Pihole/config.blade.php @@ -0,0 +1,11 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+ +
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Pihole/livestats.blade.php b/heimdall/config/www/SupportedApps/Pihole/livestats.blade.php new file mode 100755 index 0000000..b19e730 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Pihole/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queries
    Blocked
    + {!! $ads_blocked_today !!} +
  • +
  • + Percent
    Blocked
    + {!! $ads_percentage_today !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Pihole/pihole.png b/heimdall/config/www/SupportedApps/Pihole/pihole.png new file mode 100755 index 0000000..93b6b3c Binary files /dev/null and b/heimdall/config/www/SupportedApps/Pihole/pihole.png differ diff --git a/heimdall/config/www/SupportedApps/Piwigo/Piwigo.php b/heimdall/config/www/SupportedApps/Piwigo/Piwigo.php new file mode 100755 index 0000000..a2e90f2 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Piwigo/Piwigo.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('/library/recentlyAdded')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('/library/recentlyAdded')); + + $body = $res->getBody(); + $xml = simplexml_load_string($body, 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS); + $data = []; + if($xml) { + $data['recently_added'] = $xml['size']; + $status = 'active'; + } + + $res = parent::execute($this->url('/library/onDeck')); + + $body = $res->getBody(); + $xml = simplexml_load_string($body, 'SimpleXMLElement', LIBXML_NOCDATA | LIBXML_NOBLANKS); + if($xml) { + $data['on_deck'] = $xml['size']; + $status = 'active'; + } + + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $url = parse_url(parent::normaliseurl($this->config->url)); + $scheme = $url['scheme']; + $domain = $url['host']; + $port = isset($url['port']) ? $url['port'] : '32400'; + $api_url = $scheme."://".$domain.":".$port.$endpoint."?X-Plex-Token=".$this->config->token; + return $api_url; + + } +} diff --git a/heimdall/config/www/SupportedApps/Plex/app.json b/heimdall/config/www/SupportedApps/Plex/app.json new file mode 100755 index 0000000..fe1a05c --- /dev/null +++ b/heimdall/config/www/SupportedApps/Plex/app.json @@ -0,0 +1,10 @@ +{ + "appid": "aebda823a279b219476c565be863d83739999502", + "name": "Plex", + "website": "https://www.plex.tv/", + "license": "Freemium", + "description": "Plex media server allows you to aggregate all your personal media and access it anywhere you go. Enjoy your own content on all your devices with Plex.", + "enhanced": true, + "tile_background": "dark", + "icon": "plex.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Plex/config.blade.php b/heimdall/config/www/SupportedApps/Plex/config.blade.php new file mode 100755 index 0000000..e4492aa --- /dev/null +++ b/heimdall/config/www/SupportedApps/Plex/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+ +
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[token]', (isset($item) ? $item->getconfig()->token : null), array('placeholder' => __('token'), 'data-config' => 'token', 'class' => 'form-control config-item')) !!} +
+
+ +
+
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Plex/livestats.blade.php b/heimdall/config/www/SupportedApps/Plex/livestats.blade.php new file mode 100755 index 0000000..6b8967f --- /dev/null +++ b/heimdall/config/www/SupportedApps/Plex/livestats.blade.php @@ -0,0 +1,11 @@ +
    +
  • + Recent + {!! $recently_added !!} +
  • +
  • + On Deck + {!! $on_deck !!} +
  • + +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Plex/plex.png b/heimdall/config/www/SupportedApps/Plex/plex.png new file mode 100755 index 0000000..08eb2c6 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Plex/plex.png differ diff --git a/heimdall/config/www/SupportedApps/PlexRequests/PlexRequests.php b/heimdall/config/www/SupportedApps/PlexRequests/PlexRequests.php new file mode 100755 index 0000000..d2307ca --- /dev/null +++ b/heimdall/config/www/SupportedApps/PlexRequests/PlexRequests.php @@ -0,0 +1,5 @@ +auth(); + echo "Successfully communicated with the API"; + } catch (Exception $err) { + echo $err->getMessage(); + } + } + + public function auth() + { + $attrs = []; + + $body["username"] = $this->config->username; + $body["password"] = $this->config->password; + $vars = [ + "http_errors" => false, + "timeout" => 5, + "body" => json_encode($body), + ]; + + $result = parent::execute( + $this->url("api/auth"), + $attrs, + $vars, + "POST" + ); + if (null === $result) { + throw new Exception("Could not connect to Portainer"); + } + + $response = json_decode($result->getBody()); + + if (!isset($response->jwt)) { + throw new Exception("Invalid credentials"); + } + + return $response->jwt; + } + + public function livestats() + { + $status = "inactive"; + $running = 0; + $stopped = 0; + + $token = $this->auth(); + $headers = [ + "Authorization" => "Bearer " . $token, + "Accept" => "application/json", + ]; + $attrs = [ + "headers" => $headers, + ]; + + $result = parent::execute( + $this->url("api/endpoints?limit=100&start=0"), + $attrs, + [] + ); + if (null === $result) { + throw new Exception("Could not connect to Portainer"); + } + + $response = json_decode($result->getBody()); + if (count($response) === 0) { + throw new Exception("No endpoints"); + } + + foreach ($response as $endpoint) { + if (count($endpoint->Snapshots) === 0) { + throw new Exception("No snapshots"); + } + + $snapshot = $endpoint->Snapshots[0]; + $data = [ + ($running += $snapshot->RunningContainerCount), + ($stopped += $snapshot->StoppedContainerCount), + ]; + } + + $data = [ + "running" => $running, + "stopped" => $stopped, + ]; + if ($running || $stopped) { + $status = "active"; + } + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url) . $endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Portainer/app.json b/heimdall/config/www/SupportedApps/Portainer/app.json new file mode 100755 index 0000000..26a2dfa --- /dev/null +++ b/heimdall/config/www/SupportedApps/Portainer/app.json @@ -0,0 +1,10 @@ +{ + "appid": "07b796b3a10eaa8b6f485ed2379187a39400b459", + "name": "Portainer", + "website": "https://portainer.io", + "license": "zlib License", + "description": "Portainer is a simple management solution for Docker. Easily manage your Docker hosts and Docker Swarm clusters via Portainer web user interface.", + "enhanced": true, + "tile_background": "dark", + "icon": "portainer.svg" +} diff --git a/heimdall/config/www/SupportedApps/Portainer/config.blade.php b/heimdall/config/www/SupportedApps/Portainer/config.blade.php new file mode 100755 index 0000000..981df17 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Portainer/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+ +
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::text('config[username]', isset($item) ? $item->getconfig()->username : null, ['placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item']) !!} +
+
+ + {!! Form::input('password', 'config[password]', '', ['placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item']) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Portainer/livestats.blade.php b/heimdall/config/www/SupportedApps/Portainer/livestats.blade.php new file mode 100755 index 0000000..f98751d --- /dev/null +++ b/heimdall/config/www/SupportedApps/Portainer/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Running + {!! $running !!} +
  • +
  • + Stopped + {!! $stopped !!} +
  • +
diff --git a/heimdall/config/www/SupportedApps/Portainer/portainer.png b/heimdall/config/www/SupportedApps/Portainer/portainer.png new file mode 100755 index 0000000..77eca35 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Portainer/portainer.png differ diff --git a/heimdall/config/www/SupportedApps/Poste/Poste.php b/heimdall/config/www/SupportedApps/Poste/Poste.php new file mode 100755 index 0000000..2852359 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Poste/Poste.php @@ -0,0 +1,5 @@ +getConfigValue("token_id", null); + $token_value = $this->getConfigValue("token_value", null); + $ignoreTls = $this->getConfigValue("ignore_tls", false); + + $auth = "PVEAPIToken=" . $token_id . "=" . $token_value; + + $attrs["headers"] = [ + "Accept" => "application/json", + "Authorization" => $auth, + ]; + if ($ignoreTls) { + $attrs["verify"] = false; + } + + return $attrs; + } + + function __construct() + { + } + + public function test() + { + $attrs = $this->getRequestAttrs(); + $test = parent::appTest($this->url("version"), $attrs); + echo $test->status; + } + + public function livestats() + { + $status = "active"; + $attrs = $this->getRequestAttrs(); + + $nodes = explode(",", $this->getConfigValue("nodes", "")); + + if ($nodes == [""]) { + $nodes = array_map(function ($v) { + return $v->node; + }, $this->apiCall("nodes")); + } + + $vm_running = 0; + $vm_total = 0; + $container_running = 0; + $container_total = 0; + $cpu_percent_sum = 0.0; + $memory_total = 0.0; + $memory_used = 0.0; + foreach ($nodes as $node) { + $node_status = $this->apiCall("nodes/" . $node . "/status"); + $cpu_percent_sum += $node_status->cpu; + $memory_used += $node_status->memory->used; + $memory_total += $node_status->memory->total; + + $vm_stats = $this->apiCall("nodes/" . $node . "/qemu"); + $vm_total += count($vm_stats); + $vm_running += count( + array_filter($vm_stats, function ($v) { + return $v->status == "running"; + }) + ); + + $container_stats = $this->apiCall("nodes/" . $node . "/lxc"); + $container_total += count($container_stats); + $container_running += count( + array_filter($container_stats, function ($v) { + return $v->status == "running"; + }) + ); + } + + $res = parent::execute($this->url("version"), $attrs); + $details = json_decode($res->getBody())->data; + + $data = [ + "vm_running" => $vm_running, + "vm_total" => $vm_total, + "container_running" => $container_running, + "container_total" => $container_total, + "cpu_percent" => ($cpu_percent_sum / count($nodes)) * 100, + "memory_percent" => (100 / $memory_total) * $memory_used, + ]; + return parent::getLiveStats($status, $data); + } + public function url($endpoint) + { + $api_stub = "api2/json/"; + $api_url = + parent::normaliseurl( + $this->getConfigValue("override_url", $this->config->url) + ) . + $api_stub . + $endpoint; + return $api_url; + } + + public function apiCall($endpoint) + { + $res = parent::execute($this->url($endpoint), $this->getRequestAttrs()); + return json_decode($res->getBody())->data; + } + + public function getConfigValue($key, $default = null) + { + return isset($this->config) && isset($this->config->$key) + ? $this->config->$key + : $default; + } +} diff --git a/heimdall/config/www/SupportedApps/Proxmox/app.json b/heimdall/config/www/SupportedApps/Proxmox/app.json new file mode 100755 index 0000000..766231c --- /dev/null +++ b/heimdall/config/www/SupportedApps/Proxmox/app.json @@ -0,0 +1,10 @@ +{ + "appid": "391f2b7f3fe853e1ea09723eeafc354fa291ab48", + "name": "Proxmox", + "website": "https://www.proxmox.com/en/", + "license": "GNU Affero General Public License v3.0 only", + "description": "Proxmox Virtual Environment is an open-source server virtualization environment. It allows deployment and management of virtual machines and containers", + "enhanced": true, + "tile_background": "light", + "icon": "proxmox.svg" +} diff --git a/heimdall/config/www/SupportedApps/Proxmox/config.blade.php b/heimdall/config/www/SupportedApps/Proxmox/config.blade.php new file mode 100755 index 0000000..5442328 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Proxmox/config.blade.php @@ -0,0 +1,40 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::text('config[nodes]', isset($item) ? $item->getconfig()->nodes : null, ['placeholder' => 'Leave blank for all nodes in cluster', 'data-config' => 'nodes', 'class' => 'form-control config-item']) !!} +
+
+ +
+ {!! Form::hidden('config[ignore_tls]', 0, ['class' => 'config-item', 'data-config' => 'ignore_tls']) !!} + +
+
+
+ + {!! Form::text('config[token_id]', isset($item) ? $item->getconfig()->token_id : null, ['placeholder' => 'user@realm!token_name', 'data-config' => 'token_id', 'class' => 'form-control config-item']) !!} +
+
+ + {!! Form::input('password', 'config[token_value]', isset($item) ? $item->getconfig()->token_value : null, ['placeholder' => '01234567-89ab-cdef-0123-456789abcdef', 'data-config' => 'token_value', 'class' => 'form-control config-item']) !!} +

Requires at least Sys.Audit permission for /nodes path (and propagated).

+
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Proxmox/livestats.blade.php b/heimdall/config/www/SupportedApps/Proxmox/livestats.blade.php new file mode 100755 index 0000000..fe764c3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Proxmox/livestats.blade.php @@ -0,0 +1,18 @@ +
    +
  • + VM + {!! $vm_running !!}/{!! $vm_total !!} +
  • +
  • + LXC + {!! $container_running !!}/{!! $container_total !!} +
  • +
  • + CPU + {!! round($cpu_percent, 1) !!}% +
  • +
  • + RAM + {!! round($memory_percent, 1) !!}% +
  • +
diff --git a/heimdall/config/www/SupportedApps/Proxmox/proxmox.png b/heimdall/config/www/SupportedApps/Proxmox/proxmox.png new file mode 100755 index 0000000..3310ce0 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Proxmox/proxmox.png differ diff --git a/heimdall/config/www/SupportedApps/PsiTransfer/PsiTransfer.php b/heimdall/config/www/SupportedApps/PsiTransfer/PsiTransfer.php new file mode 100755 index 0000000..a79719a --- /dev/null +++ b/heimdall/config/www/SupportedApps/PsiTransfer/PsiTransfer.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url("system/status")); + echo $test->status; + } + + public function livestats() + { + $status = "inactive"; + $data = []; + + $movies = json_decode(parent::execute($this->url("movie"))->getBody()); + $queue = json_decode(parent::execute($this->url("queue"))->getBody()); + + $collect = collect($movies); + $missing = $collect->where("monitored", true)->where("isAvailable", true)->where("hasFile", false); + + $data = []; + if ($missing || $queue) { + $data["missing"] = $missing->count() ?? 0; + $data["queue"] = count($queue->records) ?? 0; + } + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = + parent::normaliseurl($this->config->url) . + "api/v3/" . + $endpoint . + "?apikey=" . + $this->config->apikey; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Radarr/app.json b/heimdall/config/www/SupportedApps/Radarr/app.json new file mode 100755 index 0000000..2da9e43 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Radarr/app.json @@ -0,0 +1,31 @@ +{ + "appid": "8a5cd39a1a5dff323d63bbe45fffe0c9c03bd2e7", + "name": "Radarr", + "website": "https://radarr.video", + "license": "GNU General Public License v3.0 only", + "description": "Radarr is an independent fork of Sonarr reworked for automatically downloading movies via Usenet and BitTorrent.\r\n\r\nThe project was inspired by other Usenet/BitTorrent movie downloaders such as CouchPotato.", + "enhanced": true, + "tile_background": "light", + "icon": "radarr.svg", + "config": { + "type": "apikey", + "stat1": { + "name": "Missing", + "url": ":url:api/v3/movie?apikey=:apikey:", + "key": "", + "filter": "filter", + "filterBy": "hasFile", + "filterByValue": "false", + "updateOnChange": "no", + "suffix": "" + }, + "stat2": { + "name": "Queue", + "url": ":url:api/v3/queue?apikey=:apikey:", + "key": "totalRecords", + "filter": "none", + "updateOnChange": "no", + "suffix": "" + } + } +} diff --git a/heimdall/config/www/SupportedApps/Radarr/config.blade.php b/heimdall/config/www/SupportedApps/Radarr/config.blade.php new file mode 100755 index 0000000..4a8082c --- /dev/null +++ b/heimdall/config/www/SupportedApps/Radarr/config.blade.php @@ -0,0 +1,14 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::text('config[apikey]', isset($item) ? $item->getconfig()->apikey : null, ['placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item']) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Radarr/livestats.blade.php b/heimdall/config/www/SupportedApps/Radarr/livestats.blade.php new file mode 100755 index 0000000..81a32fa --- /dev/null +++ b/heimdall/config/www/SupportedApps/Radarr/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Missing + {!! $missing !!} +
  • +
  • + Queue + {!! $queue !!} +
  • +
diff --git a/heimdall/config/www/SupportedApps/Radarr/radarr.png b/heimdall/config/www/SupportedApps/Radarr/radarr.png new file mode 100755 index 0000000..5603d63 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Radarr/radarr.png differ diff --git a/heimdall/config/www/SupportedApps/Rainloop/Rainloop.php b/heimdall/config/www/SupportedApps/Rainloop/Rainloop.php new file mode 100755 index 0000000..10ad307 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Rainloop/Rainloop.php @@ -0,0 +1,5 @@ + + + + + + + diff --git a/heimdall/config/www/SupportedApps/RocketChat/RocketChat.php b/heimdall/config/www/SupportedApps/RocketChat/RocketChat.php new file mode 100755 index 0000000..839f09a --- /dev/null +++ b/heimdall/config/www/SupportedApps/RocketChat/RocketChat.php @@ -0,0 +1,5 @@ +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('currentsong')); + + $array = explode("\n", $res->getBody()); + foreach($array as $item) { + $item_array = explode(": ", $item); + if ($item_array[0] == 'Artist') { + $artist = $item_array[1]; + } elseif ($item_array[0] == 'Title') { + $song_title = $item_array[1]; + } + } + + $data = []; + + $data['artist'] = $artist ?? 'None'; + $data['song_title'] = $song_title ?? 'None'; + + return parent::getLiveStats($status, $data); + + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).'command/?cmd='.$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/RuneAudio/app.json b/heimdall/config/www/SupportedApps/RuneAudio/app.json new file mode 100755 index 0000000..c9171ef --- /dev/null +++ b/heimdall/config/www/SupportedApps/RuneAudio/app.json @@ -0,0 +1,10 @@ +{ + "appid": "11f6ce44eb513a288ca4ef26cbbdb3fece2d6ec4", + "name": "RuneAudio", + "website": "http://www.runeaudio.com/", + "license": "GNU General Public License v3.0 or later", + "description": "RuneAudio is a free and open source software that turns inexpensive, silent and low-consumption mini-PC into Hi-Fi music players.", + "enhanced": true, + "tile_background": "dark", + "icon": "runeaudio.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/RuneAudio/config.blade.php b/heimdall/config/www/SupportedApps/RuneAudio/config.blade.php new file mode 100755 index 0000000..097fed4 --- /dev/null +++ b/heimdall/config/www/SupportedApps/RuneAudio/config.blade.php @@ -0,0 +1,12 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+ +
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/RuneAudio/livestats.blade.php b/heimdall/config/www/SupportedApps/RuneAudio/livestats.blade.php new file mode 100755 index 0000000..4d949c6 --- /dev/null +++ b/heimdall/config/www/SupportedApps/RuneAudio/livestats.blade.php @@ -0,0 +1,16 @@ +
    +
  • + @if(strlen($artist) > 12) +
    Artist{!! $artist !!}
    + @else +
    Artist{!! $artist !!}
    + @endif +
  • +
  • + @if(strlen($song_title) > 12) +
    Song{!! $song_title !!}
    + @else +
    Song{!! $song_title !!}
    + @endif +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/RuneAudio/runeaudio.png b/heimdall/config/www/SupportedApps/RuneAudio/runeaudio.png new file mode 100755 index 0000000..e5e488e Binary files /dev/null and b/heimdall/config/www/SupportedApps/RuneAudio/runeaudio.png differ diff --git a/heimdall/config/www/SupportedApps/SABnzbd/SABnzbd.php b/heimdall/config/www/SupportedApps/SABnzbd/SABnzbd.php new file mode 100755 index 0000000..610500a --- /dev/null +++ b/heimdall/config/www/SupportedApps/SABnzbd/SABnzbd.php @@ -0,0 +1,52 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('queue')); + if($test->code === 200) { + $data = json_decode($test->response); + if(isset($data->error) && !empty($data->error)) { + $test->status = 'Failed: '.$data->error; + } + } + + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('queue')); + $details = json_decode($res->getBody()); + + $data = []; + + if($details) { + $size = $details->queue->mbleft; + $rate = $details->queue->kbpersec; + $data['queue_size'] = format_bytes($size*1000*1000, false, ' ', ''); + $data['current_speed'] = format_bytes($rate*1000, false, ' ', '/s'); + $status = ($size > 0 || $rate > 0) ? 'active' : 'inactive'; + } + + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $apikey = $this->config->apikey; + $api_url = parent::normaliseurl($this->config->url).'api?output=json&apikey='.$apikey.'&mode='.$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/SABnzbd/app.json b/heimdall/config/www/SupportedApps/SABnzbd/app.json new file mode 100755 index 0000000..7d19c51 --- /dev/null +++ b/heimdall/config/www/SupportedApps/SABnzbd/app.json @@ -0,0 +1,29 @@ +{ + "appid": "7aa898759f1d210aaa5edc8a184bfe5e1668b5bd", + "name": "SABnzbd", + "website": "https://sabnzbd.org/", + "license": "GNU General Public License v2.0 or later", + "description": "SABnzbd is a multi-platform binary newsgroup downloader. The program works in the background and simplifies the downloading verifying and extracting of files from Usenet.", + "enhanced": true, + "tile_background": "dark", + "icon": "sabnzbd.png", + "config": { + "type": "apikey", + "stat1": { + "name": "Queue", + "url": ":url:api?output=json&apikey=:apikey:&mode=queue", + "key": "queue.sizeleft", + "filter": "none", + "updateOnChange": "Yes", + "suffix": "" + }, + "stat2": { + "name": "Speed", + "url": ":url:api?output=json&apikey=:apikey:&mode=queue", + "key": "queue.speed", + "filter": "speed", + "updateOnChange": "Yes", + "suffix": "" + } + } +} diff --git a/heimdall/config/www/SupportedApps/SABnzbd/config.blade.php b/heimdall/config/www/SupportedApps/SABnzbd/config.blade.php new file mode 100755 index 0000000..87755d5 --- /dev/null +++ b/heimdall/config/www/SupportedApps/SABnzbd/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', (isset($item) ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/SABnzbd/livestats.blade.php b/heimdall/config/www/SupportedApps/SABnzbd/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/SABnzbd/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/SABnzbd/sabnzbd.png b/heimdall/config/www/SupportedApps/SABnzbd/sabnzbd.png new file mode 100755 index 0000000..acf3d27 Binary files /dev/null and b/heimdall/config/www/SupportedApps/SABnzbd/sabnzbd.png differ diff --git a/heimdall/config/www/SupportedApps/SOGo/SOGo.php b/heimdall/config/www/SupportedApps/SOGo/SOGo.php new file mode 100755 index 0000000..6175c1b --- /dev/null +++ b/heimdall/config/www/SupportedApps/SOGo/SOGo.php @@ -0,0 +1,5 @@ + + + + + + + + + + + diff --git a/heimdall/config/www/SupportedApps/Seafile/Seafile.php b/heimdall/config/www/SupportedApps/Seafile/Seafile.php new file mode 100755 index 0000000..5b68057 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Seafile/Seafile.php @@ -0,0 +1,5 @@ +url, '/'); + $q = urlencode($query); + return redirect($url.'/search?q='.$q); + } +} diff --git a/heimdall/config/www/SupportedApps/SearxMetasearchEngine/app.json b/heimdall/config/www/SupportedApps/SearxMetasearchEngine/app.json new file mode 100755 index 0000000..b5d56f5 --- /dev/null +++ b/heimdall/config/www/SupportedApps/SearxMetasearchEngine/app.json @@ -0,0 +1,10 @@ +{ + "appid": "d3f896182b5c10b07918e295fce8c5aef054d266", + "name": "Searx Metasearch Engine", + "website": "https://searx.me", + "license": "https://github.com/asciimoo/searx/blob/master/LICENSE", + "description": "A privacy-respecting, hackable metasearch engine.", + "enhanced": false, + "tile_background": "dark", + "icon": "searxmetasearchengine.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/SearxMetasearchEngine/searxmetasearchengine.png b/heimdall/config/www/SupportedApps/SearxMetasearchEngine/searxmetasearchengine.png new file mode 100755 index 0000000..9427900 Binary files /dev/null and b/heimdall/config/www/SupportedApps/SearxMetasearchEngine/searxmetasearchengine.png differ diff --git a/heimdall/config/www/SupportedApps/Serviio/Serviio.php b/heimdall/config/www/SupportedApps/Serviio/Serviio.php new file mode 100755 index 0000000..62f67a6 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Serviio/Serviio.php @@ -0,0 +1,5 @@ +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('system/status'), $attrs); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $data = []; + $attrs = [ + 'headers' => ['Accept' => 'application/json'] + ]; + + + $missing = json_decode(parent::execute($this->url('wanted/missing'), $attrs)->getBody()); + $queue = json_decode(parent::execute($this->url('queue'), $attrs)->getBody()); + + $data = []; + + if($missing || $queue) { + $data['missing'] = $missing->totalRecords ?? 0; + $data['queue'] = $queue->totalRecords ?? 0; + } + + return parent::getLiveStats($status, $data); + + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).'api/v3/'.$endpoint.'?apikey='.$this->config->apikey; + return $api_url; + } +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Sonarr/app.json b/heimdall/config/www/SupportedApps/Sonarr/app.json new file mode 100755 index 0000000..3c5be99 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Sonarr/app.json @@ -0,0 +1,27 @@ +{ + "appid": "6e2a525ceb737f9ed8badcef5eb20d1502e39656", + "name": "Sonarr", + "website": "https://sonarr.tv/", + "license": "GNU General Public License v3.0 only", + "description": "Sonarr is a PVR for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new episodes of your favorite shows and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available.", + "enhanced": true, + "tile_background": "dark", + "icon": "sonarr.png", + "config": { + "type": "apikey", + "stat1": { + "name": "Missing", + "url": ":url:api/wanted/missing?apikey=:apikey:", + "key": "totalRecords", + "filter": "none", + "updateOnChange": "No" + }, + "stat2": { + "name": "Queue", + "url": ":url:api/queue?apikey=:apikey:", + "key": null, + "filter": "count", + "updateOnChange": "No" + } + } +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Sonarr/config.blade.php b/heimdall/config/www/SupportedApps/Sonarr/config.blade.php new file mode 100755 index 0000000..87755d5 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Sonarr/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', (isset($item) ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Sonarr/livestats.blade.php b/heimdall/config/www/SupportedApps/Sonarr/livestats.blade.php new file mode 100755 index 0000000..7b7fb92 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Sonarr/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Missing + {!! $missing !!} +
  • +
  • + Queue + {!! $queue !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Sonarr/sonarr.png b/heimdall/config/www/SupportedApps/Sonarr/sonarr.png new file mode 100755 index 0000000..33e3446 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Sonarr/sonarr.png differ diff --git a/heimdall/config/www/SupportedApps/Sourcegraph/Sourcegraph.php b/heimdall/config/www/SupportedApps/Sourcegraph/Sourcegraph.php new file mode 100755 index 0000000..6f2565d --- /dev/null +++ b/heimdall/config/www/SupportedApps/Sourcegraph/Sourcegraph.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; + } + + public function login() + { + $username = $this->config->username; + $password = $this->config->password; + + if (!isset($username) || empty($username) || !isset($password) || empty($password)) + return; + + $attrs = [ + 'cookies' => $this->jar + ]; + $res = parent::execute($this->url('?page=login'), $attrs); + $content = (string) $res->getBody(true); + preg_match("/name=\"loginform\[xsrfid\]\" value=\"([^\"]+)/", $content, $matches); + $xsrfid = $matches[1]; + + $attrs = [ + 'form_params' => [ + 'loginform' => [ + 'username' => $username, + 'password' => $password, + 'xsrfid' => $xsrfid, + 'submitlogin' => 'Login', + ] + ], + 'cookies' => $this->jar, + 'headers' => ['content-type' => 'application/x-www-form-urlencoded'] + ]; + $res = parent::execute($this->url('?page=login'), $attrs, false, 'POST'); + } + + public function test() + { + $this->login(); + + $attrs = [ + 'cookies' => $this->jar + ]; + $test = parent::appTest($this->url('?page=statistics'), $attrs); + echo $test->status; + } + + public function livestats() + { + $this->login(); + + $status = 'inactive'; + $attrs = [ + 'cookies' => $this->jar + ]; + $res = parent::execute($this->url('?page=statistics'), $attrs); + $content = (string) $res->getBody(true); + + $data = []; + if (preg_match("/Last update: ([^\<]+)/", $content, $matches) && count($matches) > 1) { + $status = 'active'; + $data['last_update'] = trim($matches[1]); + } + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Spotweb/app.json b/heimdall/config/www/SupportedApps/Spotweb/app.json new file mode 100755 index 0000000..8d5e129 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Spotweb/app.json @@ -0,0 +1,10 @@ +{ + "appid": "8d40ec161e2793d4ad3526e66d1723b2043780b6", + "name": "Spotweb", + "website": "https://github.com/spotweb/spotweb", + "license": "BSD 3-Clause \"New\" or \"Revised\" License", + "description": "Spotweb is a decentralized usenet community based on the Spotnet protocol.", + "enhanced": true, + "tile_background": "dark", + "icon": "spotweb.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Spotweb/config.blade.php b/heimdall/config/www/SupportedApps/Spotweb/config.blade.php new file mode 100755 index 0000000..57fd5fb --- /dev/null +++ b/heimdall/config/www/SupportedApps/Spotweb/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! 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')) !!} +
+
+ + {!! Form::text('config[username]', (isset($item) && isset($item->getconfig()->username) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! 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')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Spotweb/livestats.blade.php b/heimdall/config/www/SupportedApps/Spotweb/livestats.blade.php new file mode 100755 index 0000000..f754689 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Spotweb/livestats.blade.php @@ -0,0 +1,6 @@ +
    +
  • + Last update + {!! $last_update !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Spotweb/spotweb.png b/heimdall/config/www/SupportedApps/Spotweb/spotweb.png new file mode 100755 index 0000000..29d1957 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Spotweb/spotweb.png differ diff --git a/heimdall/config/www/SupportedApps/Squidex/Squidex.php b/heimdall/config/www/SupportedApps/Squidex/Squidex.php new file mode 100755 index 0000000..cf31e56 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Squidex/Squidex.php @@ -0,0 +1,5 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/Stash/app.json b/heimdall/config/www/SupportedApps/Stash/app.json new file mode 100755 index 0000000..bb98b35 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Stash/app.json @@ -0,0 +1,10 @@ +{ + "appid": "585815f2ee7291f96ea30333fd94d20b5722693f", + "name": "Stash", + "website": "https://github.com/stashapp/stash", + "license": "MIT License", + "description": "Stash is a Go app which organizes and serves your porn.", + "enhanced": true, + "tile_background": "dark", + "icon": "stash.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Stash/config.blade.php b/heimdall/config/www/SupportedApps/Stash/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Stash/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Stash/livestats.blade.php b/heimdall/config/www/SupportedApps/Stash/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Stash/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Stash/stash.png b/heimdall/config/www/SupportedApps/Stash/stash.png new file mode 100755 index 0000000..6ff0465 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Stash/stash.png differ diff --git a/heimdall/config/www/SupportedApps/Statping/Statping.php b/heimdall/config/www/SupportedApps/Statping/Statping.php new file mode 100755 index 0000000..9c863c6 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Statping/Statping.php @@ -0,0 +1,5 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/heimdall/config/www/SupportedApps/Synclounge/Synclounge.php b/heimdall/config/www/SupportedApps/Synclounge/Synclounge.php new file mode 100755 index 0000000..baef0ce --- /dev/null +++ b/heimdall/config/www/SupportedApps/Synclounge/Synclounge.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + function get_request_attrs() { + $attrs['headers'] = ["X-API-Key" => $this->config->apikey]; + return $attrs; + } + + public function test() + { + $attrs = $this->get_request_attrs(); + $test = parent::appTest($this->url('/rest/system/version'), $attrs); + echo $test->status; + } + + public function livestats() + { + $data = []; + $needed_files = 0; + $needed_bytes = 0; + $status = 'inactive'; + $attrs = $this->get_request_attrs(); + + # first get a list of folders + $res = parent::execute($this->url('/rest/stats/folder'), $attrs); + $details = json_decode($res->getBody()); + + foreach ($details as $folder => $folder_status) { + $folder_db_res = parent::execute($this->url('/rest/db/status?folder=${folder}'), $attrs); + $folder_db = json_decode($folder_db_res->getBody()); + + if ($folder_db) { + $needed_files += $folder_db["needFiles"]; + $needed_bytes += $folder_db["needBytes"]; + } + } + + if ($needed_files || $needed_bytes) { + $status = 'active'; + } + + $data['needed_files'] = $needed_files; + $data['needed_bytes'] = $needed_bytes; + return parent::getLiveStats($status, $data); + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Syncthing/app.json b/heimdall/config/www/SupportedApps/Syncthing/app.json new file mode 100755 index 0000000..c43d5b1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Syncthing/app.json @@ -0,0 +1,10 @@ +{ + "appid": "7775c3bbf580fbaf57818e68ce7b1b48b8f93b95", + "name": "Syncthing", + "website": "https://syncthing.net/", + "license": "Mozilla Public License 2.0", + "description": "Syncthing is a free, open-source peer-to-peer file synchronization application. It can sync files between devices on a local network, or between remote devices over the Internet.", + "enhanced": true, + "tile_background": "dark", + "icon": "syncthing.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Syncthing/config.blade.php b/heimdall/config/www/SupportedApps/Syncthing/config.blade.php new file mode 100755 index 0000000..1917b4a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Syncthing/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', (isset($item) && property_exists($item->getconfig(), "apikey") ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Syncthing/livestats.blade.php b/heimdall/config/www/SupportedApps/Syncthing/livestats.blade.php new file mode 100755 index 0000000..fd58853 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Syncthing/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Needed Files + {!! $needed_files !!} +
  • +
  • + Needed Bytes + {!! $needed_bytes !!} +
  • +
diff --git a/heimdall/config/www/SupportedApps/Syncthing/syncthing.png b/heimdall/config/www/SupportedApps/Syncthing/syncthing.png new file mode 100755 index 0000000..0f0f9e9 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Syncthing/syncthing.png differ diff --git a/heimdall/config/www/SupportedApps/Synology/Synology.php b/heimdall/config/www/SupportedApps/Synology/Synology.php new file mode 100755 index 0000000..6f3b511 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Synology/Synology.php @@ -0,0 +1,5 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/heimdall/config/www/SupportedApps/Taiga/Taiga.php b/heimdall/config/www/SupportedApps/Taiga/Taiga.php new file mode 100755 index 0000000..deb1216 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Taiga/Taiga.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('data/stats.json')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('data/stats.json')); + $details = json_decode($res->getBody()); + + $data = []; + + if($details) { + $data['aircaft_with_pos'] = number_format($details->aircaft_with_pos); + $data['aircraft_without_pos'] = number_format($details->aircraft_without_pos); + } + + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/TarTenNinety/app.json b/heimdall/config/www/SupportedApps/TarTenNinety/app.json new file mode 100755 index 0000000..4da7261 --- /dev/null +++ b/heimdall/config/www/SupportedApps/TarTenNinety/app.json @@ -0,0 +1,10 @@ +{ + "appid": "44fb3ee60816316d3c253e7454f5e0ab5f46680a", + "name": "Tar1090", + "website": "https://github.com/wiedehopf/tar1090", + "license": "GNU General Public License v2.0 only", + "description": "Provides an improved webinterface for use with ADS-B decoders readsb / dump1090-fa", + "enhanced": true, + "tile_background": "dark", + "icon": "tar1090.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/TarTenNinety/config.blade.php b/heimdall/config/www/SupportedApps/TarTenNinety/config.blade.php new file mode 100755 index 0000000..7d4f74c --- /dev/null +++ b/heimdall/config/www/SupportedApps/TarTenNinety/config.blade.php @@ -0,0 +1,22 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+ +
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+ +
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/TarTenNinety/livestats.blade.php b/heimdall/config/www/SupportedApps/TarTenNinety/livestats.blade.php new file mode 100755 index 0000000..fa603f9 --- /dev/null +++ b/heimdall/config/www/SupportedApps/TarTenNinety/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Aircraft
    with Pos
    + {!! $aircaft_with_pos !!} +
  • +
  • + Aircraft
    w/o Pos
    + {!! $aircraft_without_pos !!} +
  • +
diff --git a/heimdall/config/www/SupportedApps/TarTenNinety/tar1090.png b/heimdall/config/www/SupportedApps/TarTenNinety/tar1090.png new file mode 100755 index 0000000..bc06392 Binary files /dev/null and b/heimdall/config/www/SupportedApps/TarTenNinety/tar1090.png differ diff --git a/heimdall/config/www/SupportedApps/TasmoAdmin/TasmoAdmin.php b/heimdall/config/www/SupportedApps/TasmoAdmin/TasmoAdmin.php new file mode 100755 index 0000000..2d4e646 --- /dev/null +++ b/heimdall/config/www/SupportedApps/TasmoAdmin/TasmoAdmin.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('cm?cmnd=Status 8')); + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('cm?cmnd=Status 8')); + $details = json_decode($res->getBody()); + + $data = []; + + if($details) { + $data['temperature'] = number_format($details->StatusSNS->AM2301->Temperature,1); + $data['humidity'] = number_format($details->StatusSNS->AM2301->Humidity,1); + $data['dewpoint'] = number_format($details->StatusSNS->AM2301->DewPoint,1); + } + + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Tasmota/app.json b/heimdall/config/www/SupportedApps/Tasmota/app.json new file mode 100755 index 0000000..3cf1269 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Tasmota/app.json @@ -0,0 +1,10 @@ +{ + "appid": "0d318b04d2442102c6a9643405bce18b5df5cf78", + "name": "Tasmota", + "website": "https://github.com/arendst/Tasmota", + "license": "GNU General Public License v3.0 or later", + "description": "Alternative firmware for ESP8266 based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX.", + "enhanced": true, + "tile_background": "light", + "icon": "tasmota.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Tasmota/config.blade.php b/heimdall/config/www/SupportedApps/Tasmota/config.blade.php new file mode 100755 index 0000000..210982a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Tasmota/config.blade.php @@ -0,0 +1,10 @@ +

{{ __('app.apps.config') }} - Pull AM2301 Sensor Data @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Tasmota/livestats.blade.php b/heimdall/config/www/SupportedApps/Tasmota/livestats.blade.php new file mode 100755 index 0000000..0eb2c0d --- /dev/null +++ b/heimdall/config/www/SupportedApps/Tasmota/livestats.blade.php @@ -0,0 +1,14 @@ +
    +
  • + Temp. + {!! $temperature !!}°C +
  • +
  • + Humid. + {!! $humidity !!}% +
  • +
  • + Dew. + {!! $dewpoint !!}°C +
  • +
diff --git a/heimdall/config/www/SupportedApps/Tasmota/tasmota.png b/heimdall/config/www/SupportedApps/Tasmota/tasmota.png new file mode 100755 index 0000000..49739fe Binary files /dev/null and b/heimdall/config/www/SupportedApps/Tasmota/tasmota.png differ diff --git a/heimdall/config/www/SupportedApps/Tautulli/Tautulli.php b/heimdall/config/www/SupportedApps/Tautulli/Tautulli.php new file mode 100755 index 0000000..461c720 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Tautulli/Tautulli.php @@ -0,0 +1,45 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('arnold')); + if($test->code === 200) { + $data = json_decode($test->response); + if(isset($data->error) && !empty($data->error)) { + $test->status = 'Failed: '.$data->error; + } + } + + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $res = parent::execute($this->url('get_activity')); + $details = json_decode($res->getBody()); + + $data['stream_count'] = $details->response->data->stream_count ?? 0; + + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $apikey = $this->config->apikey; + $api_url = parent::normaliseurl($this->config->url).'api/v2?apikey='.$apikey.'&cmd='.$endpoint; + + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Tautulli/app.json b/heimdall/config/www/SupportedApps/Tautulli/app.json new file mode 100755 index 0000000..382e0e4 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Tautulli/app.json @@ -0,0 +1,10 @@ +{ + "appid": "93ce76191583a25ac33c1918c5ad0b8a5f260451", + "name": "Tautulli", + "website": "https://tautulli.com/", + "license": "GNU General Public License v3.0 only", + "description": "A python based web application for monitoring, analytics and notifications for Plex Media Server.", + "enhanced": true, + "tile_background": "light", + "icon": "tautulli.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Tautulli/config.blade.php b/heimdall/config/www/SupportedApps/Tautulli/config.blade.php new file mode 100755 index 0000000..87755d5 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Tautulli/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[apikey]', (isset($item) ? $item->getconfig()->apikey : null), array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Tautulli/livestats.blade.php b/heimdall/config/www/SupportedApps/Tautulli/livestats.blade.php new file mode 100755 index 0000000..6de9112 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Tautulli/livestats.blade.php @@ -0,0 +1,6 @@ +
    +
  • + Stream Count + {!! $stream_count !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Tautulli/tautulli.png b/heimdall/config/www/SupportedApps/Tautulli/tautulli.png new file mode 100755 index 0000000..439704b Binary files /dev/null and b/heimdall/config/www/SupportedApps/Tautulli/tautulli.png differ diff --git a/heimdall/config/www/SupportedApps/Tdarr/Tdarr.php b/heimdall/config/www/SupportedApps/Tdarr/Tdarr.php new file mode 100755 index 0000000..e4f1788 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Tdarr/Tdarr.php @@ -0,0 +1,5 @@ +getConfigValue('username', null); + $password = $this->getConfigValue('password', null); + $ignoreTls = $this->getConfigValue('ignore_tls', false); + + $isLoginNeeded = + !is_null($username) && !empty($username) + && !is_null($password) && !empty($password); + + $attrs['headers'] = [ 'Accept' => 'application/json']; + if($isLoginNeeded) { + $attrs['auth'] = [ $username, $password ]; + } + if($ignoreTls) { + $attrs['verify'] = false; + } + + return $attrs; + } + + public function test() + { + $attrs = $this->getRequestAttrs(); + $test = parent::appTest($this->url('api/version'), $attrs); + + echo $test->status; + } + + public function livestats() + { + $apiEndpoints = collect([ + 'httpRouters' => 'api/http/routers', + 'httpServices' => 'api/http/services', + 'tcpRouters' => 'api/tcp/routers', + 'tcpServices' => 'api/tcp/services' + ]); + + $status = 'active'; + $attrs = $this->getRequestAttrs(); + + + $responses = $apiEndpoints->mapWithKeys(function ($endpoint, $key) use ($attrs) { + $response = parent::execute($this->url($endpoint), $attrs); + $body = json_decode($response->getBody()); + $bodyCollection = collect($body); + + return [ $key => [ + 'data' => $bodyCollection->filter(function ($value, $key) { return $value->status === 'enabled'; })->count(), + 'total' => $bodyCollection->count(), + ] ]; + }); + + + $data = $this->getViewData($this->getConfigValue('fields', 'E'), $responses); + return parent::getLiveStats($status, $data); + } + + public function getViewData($config, $responses) + { + $nullValue = [ 'data' => 0, 'total' => 0 ]; + + switch ($config) { + /* HTTP routers/services only */ + case 'H': + return [ + 'left' => [ + 'title' => 'Routers', + 'data' => $responses->get('httpRouters', $nullValue)['data'], + 'total' => $responses->get('httpRouters', $nullValue)['total'], + ], + 'right' => [ + 'title' => 'Services', + 'data' => $responses->get('httpServices', $nullValue)['data'], + 'total' => $responses->get('httpServices', $nullValue)['total'], + ], + ]; + break; + + /* TCP routers/services only */ + case 'T': + return [ + 'left' => [ + 'title' => 'Routers', + 'data' => $responses->get('tcpRouters', $nullValue)['data'], + 'total' => $responses->get('tcpRouters', $nullValue)['total'], + ], + 'right' => [ + 'title' => 'Services', + 'data' => $responses->get('tcpServices', $nullValue)['data'], + 'total' => $responses->get('tcpServices', $nullValue)['total'], + ], + ]; + + /* Routers only */ + case 'R': + return [ + 'left' => [ + 'title' => 'HTTP', + 'data' => $responses->get('httpRouters', $nullValue)['data'], + 'total' => $responses->get('httpRouters', $nullValue)['total'], + ], + 'right' => [ + 'title' => 'TCP', + 'data' => $responses->get('tcpRouters', $nullValue)['data'], + 'total' => $responses->get('tcpRouters', $nullValue)['total'], + ], + ]; + + /* Services only */ + case 'S': + return [ + 'left' => [ + 'title' => 'HTTP', + 'data' => $responses->get('httpServices', $nullValue)['data'], + 'total' => $responses->get('httpServices', $nullValue)['total'], + ], + 'right' => [ + 'title' => 'TCP', + 'data' => $responses->get('tcpServices', $nullValue)['data'], + 'total' => $responses->get('tcpServices', $nullValue)['total'], + ], + ]; + + /* Everything */ + default: + return [ + 'left' => [ + 'title' => 'Routers', + 'data' => $responses->get('httpRouters', $nullValue)['data'] + $responses->get('tcpRouters', $nullValue)['data'], + 'total' => $responses->get('httpRouters', $nullValue)['total'] + $responses->get('tcpRouters', $nullValue)['total'], + ], + 'right' => [ + 'title' => 'Services', + 'data' => $responses->get('httpServices', $nullValue)['data'] + $responses->get('tcpServices', $nullValue)['data'], + 'total' => $responses->get('httpServices', $nullValue)['total'] + $responses->get('tcpServices', $nullValue)['total'], + ], + ]; + } + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } + + public function getConfigValue($key, $default=null) + { + return (isset($this->config) && isset($this->config->$key)) ? $this->config->$key : $default; + } + +} + diff --git a/heimdall/config/www/SupportedApps/Traefik/app.json b/heimdall/config/www/SupportedApps/Traefik/app.json new file mode 100755 index 0000000..beda283 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Traefik/app.json @@ -0,0 +1,10 @@ +{ + "appid": "a83e2ce54bbef3bef63aa7f02b08dbda7fdae4c5", + "name": "Traefik", + "website": "https://traefik.io/", + "license": "MIT License", + "description": "Træfik is a modern HTTP reverse proxy and load balancer that makes deploying microservices easy. Træfik integrates with your existing infrastructure components and configures itself automatically and dynamically.", + "enhanced": true, + "tile_background": "dark", + "icon": "traefik.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Traefik/config.blade.php b/heimdall/config/www/SupportedApps/Traefik/config.blade.php new file mode 100755 index 0000000..418e31f --- /dev/null +++ b/heimdall/config/www/SupportedApps/Traefik/config.blade.php @@ -0,0 +1,39 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', (isset($item) ? $item->getconfig()->override_url : null), array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::select('config[fields]', [ 'E' => 'Everything', 'H' => 'HTTP only', 'T' => 'TCP only', 'R' => 'Routers', 'S' => 'Services' ], + (isset($item) && isset($item->getconfig()->fields) ? $item->getconfig()->fields : null), array('id' => 'fields', 'class' => 'form-control config-item')) !!} +
+
+ +
+ {!! Form::hidden('config[ignore_tls]', 0, [ 'class' => 'config-item', 'data-config' => 'ignore_tls' ]) !!} + +
+
+
+ + {!! Form::text('config[username]', (isset($item) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', (isset($item) ? $item->getconfig()->password : null), array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Traefik/livestats.blade.php b/heimdall/config/www/SupportedApps/Traefik/livestats.blade.php new file mode 100755 index 0000000..14d781a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Traefik/livestats.blade.php @@ -0,0 +1,4 @@ +
    +
  • {!! $left['title'] !!}{!! $left['data'] !!}/{!! $left['total'] !!}
  • +
  • {!! $right['title'] !!}{!! $right['data'] !!}/{!! $right['total'] !!}
  • +
diff --git a/heimdall/config/www/SupportedApps/Traefik/traefik.png b/heimdall/config/www/SupportedApps/Traefik/traefik.png new file mode 100755 index 0000000..45438b3 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Traefik/traefik.png differ diff --git a/heimdall/config/www/SupportedApps/Transmission/Transmission.php b/heimdall/config/www/SupportedApps/Transmission/Transmission.php new file mode 100755 index 0000000..f25f278 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Transmission/Transmission.php @@ -0,0 +1,166 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + $body["method"] = "torrent-get"; + $body["arguments"] = [ + "fields" => ["percentDone", "status", "rateDownload", "rateUpload"], + ]; + $this->vars = [ + "http_errors" => false, + "timeout" => 5, + "body" => json_encode($body), + ]; + } + + public function test() + { + $test = $this->sendTest(); + + echo $test->status; + } + + public function livestats() + { + $status = "inactive"; + $res = $this->sendRequest(); + if ($res == null) { + //Log::debug('Transmission connection failed'); + return ""; + } + + $details = json_decode($res->getBody()); + if (!isset($details->arguments)) { + //Log::debug('Failed to fetch data from Transmission'); + return ""; + } + + $data = []; + + $torrents = $details->arguments->torrents; + $seeding_torrents = 0; + $leeching_torrents = 0; + $rateDownload = $rateUpload = 0; + + foreach ($torrents as $thisTorrent) { + $rateDownload += $thisTorrent->rateDownload; + $rateUpload += $thisTorrent->rateUpload; + if ($thisTorrent->status == 6) { + $seeding_torrents += 1; + } + if($thisTorrent->status == 4) { + $leeching_torrents += 1; + } + } + + if ($leeching_torrents > 0) { + $status = "active"; + } + + $data["download_rate"] = format_bytes( + $rateDownload, + false, + " ", + "/s" + ); + $data["upload_rate"] = format_bytes( + $rateUpload, + false, + " ", + "/s" + ); + $data["seed_count"] = $seeding_torrents; + $data["leech_count"] = $leeching_torrents; + + return parent::getLiveStats($status, $data); + } + + private function sendTest() + { + $this->setClientOptions(); + $test = parent::appTest( + $this->url("transmission/rpc"), + $this->attrs, + $this->vars + ); + if ($test->code === 409) { + $this->setClientOptions(); + $test = parent::appTest( + $this->url("transmission/rpc"), + $this->attrs, + $this->vars + ); + } + return $test; + } + + private function sendRequest() + { + $this->setClientOptions(); + $res = parent::execute( + $this->url("transmission/rpc"), + $this->attrs, + $this->vars + ); + if ($res->getStatusCode() === 409) { + $this->setClientOptions(); + $res = parent::execute( + $this->url("transmission/rpc"), + $this->attrs, + $this->vars + ); + } + return $res; + } + + private function setClientOptions() + { + if ($this->config->username != "" || $this->config->password != "") { + $this->attrs = [ + "auth" => [ + $this->config->username, + $this->config->password, + "Basic", + ], + ]; + } + $res = parent::execute( + $this->url("transmission/rpc"), + $this->attrs, + $this->vars + ); + + try { + //print_r($res); + $xtId = $res->getHeaderLine("X-Transmission-Session-Id"); + if ($xtId != null) { + $this->attrs["headers"] = [ + "X-Transmission-Session-Id" => $xtId, + ]; + } else { + //Log::error("Unable to get Transmission session information"); + //Log::debug("Status Code: ".$res->getStatusCode()); + } + } catch (\GuzzleHttp\Exception\ConnectException $e) { + //Log::error("Failed connection to Transmission"); + return false; + } + return true; + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url) . $endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/Transmission/app.json b/heimdall/config/www/SupportedApps/Transmission/app.json new file mode 100755 index 0000000..dd95f8e --- /dev/null +++ b/heimdall/config/www/SupportedApps/Transmission/app.json @@ -0,0 +1,10 @@ +{ + "appid": "34899a33e3d7e33e1966b921ea250350fc71591a", + "name": "Transmission", + "website": "https://transmissionbt.com", + "license": "GNU General Public License v3.0 only", + "description": "Transmission is a BitTorrent client which features a variety of user interfaces on top of a cross-platform back-end.", + "enhanced": true, + "tile_background": "dark", + "icon": "transmission.svg" +} diff --git a/heimdall/config/www/SupportedApps/Transmission/config.blade.php b/heimdall/config/www/SupportedApps/Transmission/config.blade.php new file mode 100755 index 0000000..981df17 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Transmission/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+ +
+ + {!! Form::text('config[override_url]', isset($item) ? $item->getconfig()->override_url : null, ['placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control']) !!} +
+
+ + {!! Form::text('config[username]', isset($item) ? $item->getconfig()->username : null, ['placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item']) !!} +
+
+ + {!! Form::input('password', 'config[password]', '', ['placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item']) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/Transmission/livestats.blade.php b/heimdall/config/www/SupportedApps/Transmission/livestats.blade.php new file mode 100755 index 0000000..eb7413a --- /dev/null +++ b/heimdall/config/www/SupportedApps/Transmission/livestats.blade.php @@ -0,0 +1,4 @@ +
    +
  • Leech: {{ $leech_count }}{!! $download_rate !!}
  • +
  • Seed: {{ $seed_count }}{!! $upload_rate !!}
  • +
diff --git a/heimdall/config/www/SupportedApps/Transmission/transmission.png b/heimdall/config/www/SupportedApps/Transmission/transmission.png new file mode 100755 index 0000000..f24d9e3 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Transmission/transmission.png differ diff --git a/heimdall/config/www/SupportedApps/Trilium/Trilium.php b/heimdall/config/www/SupportedApps/Trilium/Trilium.php new file mode 100755 index 0000000..d2bb541 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Trilium/Trilium.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = parent::appTest($this->url('core/ping'), $this->attrs()); + if($test->code === 200) { + $data = $test->response; + if($test->response != '"pong"') { + $test->status = 'Failed: '.$data; + } + } + echo $test->status; + } + + public function livestats() + { + $status = 'inactive'; + $data = []; + + $res = parent::execute($this->url('system/info'), $this->attrs()); + $details = json_decode($res->getBody()); + $seconds = $details->uptime_seconds ?? 0; + $data['uptime'] = $this->uptime($seconds); + + $res = parent::execute($this->url('alert/list'), $this->attrs()); + $details = json_decode($res->getBody(), true); + $data['alert_tot'] = $this->alerts($details); + + return parent::getLiveStats($status, $data); + + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).'api/v2.0/'.$endpoint; + return $api_url; + } + + public function attrs() + { + $apikey = $this->config->apikey; + $attrs = [ + 'headers' => ['content-type' => 'application/json', 'Authorization' => 'Bearer '.$apikey] + ]; + return $attrs; + } + + public function uptime($inputSeconds) + { + // Adapted from https://stackoverflow.com/questions/8273804/convert-seconds-into-days-hours-minutes-and-seconds + + $res = ''; + $secondsInAMinute = 60; + $secondsInAnHour = 60 * $secondsInAMinute; + $secondsInADay = 24 * $secondsInAnHour; + + // extract days + $days = floor($inputSeconds / $secondsInADay); + + // extract hours + $hourSeconds = $inputSeconds % $secondsInADay; + $hours = floor($hourSeconds / $secondsInAnHour); + + // extract minutes + $minuteSeconds = $hourSeconds % $secondsInAnHour; + $minutes = floor($minuteSeconds / $secondsInAMinute); + + // extract the remaining seconds + $remainingSeconds = $minuteSeconds % $secondsInAMinute; + $seconds = ceil($remainingSeconds); + + //$res = strval($days).'d '.strval($hours).':'.sprintf('%02d', $minutes).':'.sprintf('%02d', $seconds); + if($days > 0) { + $res = strval($days).'d '.strval($hours).':'.sprintf('%02d', $minutes); + } else { + $res = strval($hours).':'.sprintf('%02d', $minutes).':'.sprintf('%02d', $seconds); + } + return $res; + } + + public function alerts($alert) + { + $count = 0; + foreach($alert as $key => $value) { + if ($value["dismissed"] == false) $count += 1; + } + + return strval($count); + } + +} + diff --git a/heimdall/config/www/SupportedApps/TrueNASCORE/app.json b/heimdall/config/www/SupportedApps/TrueNASCORE/app.json new file mode 100755 index 0000000..2c9b8ff --- /dev/null +++ b/heimdall/config/www/SupportedApps/TrueNASCORE/app.json @@ -0,0 +1,10 @@ +{ + "appid": "a1e408cd7144157cd6400993af4f68046bf77fd5", + "name": "TrueNAS CORE", + "website": "https://www.truenas.com/truenas-core/", + "license": "BSD 2-Clause FreeBSD License", + "description": "TrueNAS CORE is enterprise-quality software-defined storage that can be used without restrictions or cost. It is also the core of the full-fledged enterprise edition, TrueNAS Enterprise, which provides the additional fault-tolerance, performance, and support that businesses and critical applications require.", + "enhanced": true, + "tile_background": "dark", + "icon": "truenascore.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/TrueNASCORE/config.blade.php b/heimdall/config/www/SupportedApps/TrueNASCORE/config.blade.php new file mode 100755 index 0000000..ccfc42e --- /dev/null +++ b/heimdall/config/www/SupportedApps/TrueNASCORE/config.blade.php @@ -0,0 +1,15 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::password('config[apikey]', array('placeholder' => __('app.apps.apikey'), 'data-config' => 'apikey', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/TrueNASCORE/livestats.blade.php b/heimdall/config/www/SupportedApps/TrueNASCORE/livestats.blade.php new file mode 100755 index 0000000..262c2d6 --- /dev/null +++ b/heimdall/config/www/SupportedApps/TrueNASCORE/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Uptime + {!! $uptime !!} +
  • +
  • + Alerts + {!! $alert_tot !!} +
  • +
diff --git a/heimdall/config/www/SupportedApps/TrueNASCORE/truenascore.png b/heimdall/config/www/SupportedApps/TrueNASCORE/truenascore.png new file mode 100755 index 0000000..6ead508 Binary files /dev/null and b/heimdall/config/www/SupportedApps/TrueNASCORE/truenascore.png differ diff --git a/heimdall/config/www/SupportedApps/Ubooquity/Ubooquity.php b/heimdall/config/www/SupportedApps/Ubooquity/Ubooquity.php new file mode 100755 index 0000000..8789174 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Ubooquity/Ubooquity.php @@ -0,0 +1,5 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/Unraid/app.json b/heimdall/config/www/SupportedApps/Unraid/app.json new file mode 100755 index 0000000..c9e6f54 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Unraid/app.json @@ -0,0 +1,10 @@ +{ + "appid": "11b790731286c7538e27885bc827dc6f6ceb8db2", + "name": "Unraid", + "website": "https://unraid.net/", + "license": "Proprietary", + "description": "Unraid is software for storing and managing digital files on a mass-storage server. It is an embedded Network Attached Storage (NAS) server operating system.", + "enhanced": true, + "tile_background": "dark", + "icon": "unraid.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Unraid/config.blade.php b/heimdall/config/www/SupportedApps/Unraid/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Unraid/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Unraid/livestats.blade.php b/heimdall/config/www/SupportedApps/Unraid/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Unraid/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Unraid/unraid.png b/heimdall/config/www/SupportedApps/Unraid/unraid.png new file mode 100755 index 0000000..c9f2244 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Unraid/unraid.png differ diff --git a/heimdall/config/www/SupportedApps/UrBackup/UrBackup.php b/heimdall/config/www/SupportedApps/UrBackup/UrBackup.php new file mode 100755 index 0000000..ca0abf7 --- /dev/null +++ b/heimdall/config/www/SupportedApps/UrBackup/UrBackup.php @@ -0,0 +1,35 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/UrBackup/app.json b/heimdall/config/www/SupportedApps/UrBackup/app.json new file mode 100755 index 0000000..98c5cc1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/UrBackup/app.json @@ -0,0 +1,10 @@ +{ + "appid": "89f71687e2a69d7c9432b2ee76a9b638306e9fd5", + "name": "UrBackup", + "website": "https://www.urbackup.org/", + "license": "GNU Affero General Public License v3.0 or later", + "description": "UrBackup is an easy to setup Open Source client/server backup system, that through a combination of image and file backups accomplishes both data safety and a fast restoration time.\r\nFile and image backups are made while the system is running without interrupting current processes.\r\nUrBackup also continuously watches folders you want backed up in order to quickly find differences to previous backups. Because of that, incremental file backups are really fast.\r\nYour files can be restored through the web interface, via the client or the Windows Explorer while the backups of drive volumes can be restored with a bootable CD or USB-Stick (bare metal restore).", + "enhanced": true, + "tile_background": "light", + "icon": "urbackup.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/UrBackup/config.blade.php b/heimdall/config/www/SupportedApps/UrBackup/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/UrBackup/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/UrBackup/livestats.blade.php b/heimdall/config/www/SupportedApps/UrBackup/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/UrBackup/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/UrBackup/urbackup.png b/heimdall/config/www/SupportedApps/UrBackup/urbackup.png new file mode 100755 index 0000000..ffcbf5a Binary files /dev/null and b/heimdall/config/www/SupportedApps/UrBackup/urbackup.png differ diff --git a/heimdall/config/www/SupportedApps/VMwareESXi/VMwareESXi.php b/heimdall/config/www/SupportedApps/VMwareESXi/VMwareESXi.php new file mode 100755 index 0000000..fa56363 --- /dev/null +++ b/heimdall/config/www/SupportedApps/VMwareESXi/VMwareESXi.php @@ -0,0 +1,35 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/VMwareESXi/app.json b/heimdall/config/www/SupportedApps/VMwareESXi/app.json new file mode 100755 index 0000000..43ed2e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/VMwareESXi/app.json @@ -0,0 +1,10 @@ +{ + "appid": "39d2762d5690a6ebeb6ac1615d3ee5d58b07ab7e", + "name": "VMware ESXi", + "website": "https://www.vmware.com/products/esxi-and-esx.html", + "license": "Commercial", + "description": "VMware ESXi is an enterprise-class, type-1 hypervisor developed by VMware for deploying and serving virtual computers. As a type-1 hypervisor, ESXi is not a software application that is installed on an operating system; instead, it includes and integrates vital OS components, such as a kernel.", + "enhanced": false, + "tile_background": "dark", + "icon": "vmwareesxi.png" +} diff --git a/heimdall/config/www/SupportedApps/VMwareESXi/config.blade.php b/heimdall/config/www/SupportedApps/VMwareESXi/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/VMwareESXi/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/VMwareESXi/livestats.blade.php b/heimdall/config/www/SupportedApps/VMwareESXi/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/VMwareESXi/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/VMwareESXi/vmwareesxi.png b/heimdall/config/www/SupportedApps/VMwareESXi/vmwareesxi.png new file mode 100755 index 0000000..e424995 Binary files /dev/null and b/heimdall/config/www/SupportedApps/VMwareESXi/vmwareesxi.png differ diff --git a/heimdall/config/www/SupportedApps/VMwarevCenter/VMwarevCenter.php b/heimdall/config/www/SupportedApps/VMwarevCenter/VMwarevCenter.php new file mode 100755 index 0000000..09ae382 --- /dev/null +++ b/heimdall/config/www/SupportedApps/VMwarevCenter/VMwarevCenter.php @@ -0,0 +1,5 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/heimdall/config/www/SupportedApps/Volumio/Volumio.php b/heimdall/config/www/SupportedApps/Volumio/Volumio.php new file mode 100755 index 0000000..8cc423e --- /dev/null +++ b/heimdall/config/www/SupportedApps/Volumio/Volumio.php @@ -0,0 +1,35 @@ +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; + } +} diff --git a/heimdall/config/www/SupportedApps/Volumio/app.json b/heimdall/config/www/SupportedApps/Volumio/app.json new file mode 100755 index 0000000..0cf670f --- /dev/null +++ b/heimdall/config/www/SupportedApps/Volumio/app.json @@ -0,0 +1,10 @@ +{ + "appid": "90c60ebc78d163e508d41233af19bf9b31706012", + "name": "Volumio", + "website": "https://volumio.org/", + "license": "GNU General Public License v3.0 only", + "description": "Volumio is an open source audiophile music player. It is designed and fine-tuned for high-quality music playback and it runs on a variety of devices such as Raspberry PI and other microcomputers as well as PCs and Notebooks.", + "enhanced": true, + "tile_background": "light", + "icon": "volumio.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Volumio/config.blade.php b/heimdall/config/www/SupportedApps/Volumio/config.blade.php new file mode 100755 index 0000000..51278e3 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Volumio/config.blade.php @@ -0,0 +1,19 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Volumio/livestats.blade.php b/heimdall/config/www/SupportedApps/Volumio/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Volumio/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Volumio/volumio.png b/heimdall/config/www/SupportedApps/Volumio/volumio.png new file mode 100755 index 0000000..4710107 Binary files /dev/null and b/heimdall/config/www/SupportedApps/Volumio/volumio.png differ diff --git a/heimdall/config/www/SupportedApps/VuPlus/VuPlus.php b/heimdall/config/www/SupportedApps/VuPlus/VuPlus.php new file mode 100755 index 0000000..d065495 --- /dev/null +++ b/heimdall/config/www/SupportedApps/VuPlus/VuPlus.php @@ -0,0 +1,37 @@ +url('api/about')); + echo $test->status; + } + + public function livestats() + { + $res = parent::execute($this->url('api/about')); + $content = (string) $res->getBody(true); + $result_data = json_decode($content); + if(!isset($result_data) || !isset($result_data->service) || + !$result_data->service->result) + return parent::getLiveStats("inactive", ["channel" => "Standby"]); + + $data = [ + "channel" => $result_data->service->name, + ]; + return parent::getLiveStats("active", $data); + } + + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/VuPlus/app.json b/heimdall/config/www/SupportedApps/VuPlus/app.json new file mode 100755 index 0000000..4d07a81 --- /dev/null +++ b/heimdall/config/www/SupportedApps/VuPlus/app.json @@ -0,0 +1,10 @@ +{ + "appid": "095afe286edc44dd8241e7a33138bc6d", + "name": "VuPlus", + "website": "http://vuplus.com", + "license": "commercial", + "description": "The Vu+ (pronounced VuPlus), is a series of Linux-powered DVB satellite, terrestrial digital television receivers (set-top box)", + "enhanced": true, + "tile_background": "light", + "icon": "vuplus.png" +} diff --git a/heimdall/config/www/SupportedApps/VuPlus/config.blade.php b/heimdall/config/www/SupportedApps/VuPlus/config.blade.php new file mode 100755 index 0000000..ad5aca9 --- /dev/null +++ b/heimdall/config/www/SupportedApps/VuPlus/config.blade.php @@ -0,0 +1,11 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! 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')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/VuPlus/livestats.blade.php b/heimdall/config/www/SupportedApps/VuPlus/livestats.blade.php new file mode 100755 index 0000000..0d48cf4 --- /dev/null +++ b/heimdall/config/www/SupportedApps/VuPlus/livestats.blade.php @@ -0,0 +1,6 @@ +
    +
  • + Channel + {!! $channel !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/VuPlus/vuplus.png b/heimdall/config/www/SupportedApps/VuPlus/vuplus.png new file mode 100755 index 0000000..0a9906a Binary files /dev/null and b/heimdall/config/www/SupportedApps/VuPlus/vuplus.png differ diff --git a/heimdall/config/www/SupportedApps/Wallabag/Wallabag.php b/heimdall/config/www/SupportedApps/Wallabag/Wallabag.php new file mode 100755 index 0000000..9a81a11 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Wallabag/Wallabag.php @@ -0,0 +1,5 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + /** + * Try to obtain user information to test login + */ + public function login() + { + $api_token = $this->config->username; + $attrs = [ + 'headers' => ['Authorization' => 'Bearer '.$api_token] + ]; + return parent::execute($this->url('user'), $attrs, false, 'GET'); + } + + /** + * "Login" the user and return the username + */ + public function test() + { + $test = $this->login(); + if($test->getStatusCode() === 200 && $test->getBody()) { + $wk_resp = json_decode($test->getBody()); + echo "Hello ".$wk_resp->data->username; + } else { + echo "Failed"; + } + } + + /** + * Obtain the user summary and return the total of Reviews and Lessons + */ + public function livestats() + { + $status = 'inactive'; + $now = \Carbon\Carbon::now(); + $api_token = $this->config->username; + $attrs = [ + 'headers' => ['Authorization' => 'Bearer '.$api_token] + ]; + $res = parent::execute($this->url('summary'), $attrs, false, 'GET'); + $details = json_decode($res->getBody()); + $data = [ "lessons" => 0, "reviews" => 0 ]; + foreach($details->data->lessons as $lesson) + { + $available_at = \Carbon\Carbon::createFromTimeString($lesson->available_at); + if($now >= $available_at) + { + $data["lessons"] += count($lesson->subject_ids); + } + } + foreach($details->data->reviews as $review) + { + $available_at = \Carbon\Carbon::createFromTimeString($review->available_at); + if($now >= $available_at) + { + $data["reviews"] += count($review->subject_ids); + } + } + + return parent::getLiveStats($status, $data); + + } + + /** + * Build api url + */ + public function url($endpoint) + { + $api_url = parent::normaliseurl('https://api.wanikani.com/v2/').$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/WaniKani/app.json b/heimdall/config/www/SupportedApps/WaniKani/app.json new file mode 100755 index 0000000..3d93b77 --- /dev/null +++ b/heimdall/config/www/SupportedApps/WaniKani/app.json @@ -0,0 +1,10 @@ +{ + "appid": "dc115cfaac280c4b97289484356c21428af565be", + "name": "WaniKani", + "website": "https://www.wanikani.com/", + "license": "Proprietary", + "description": "WaniKani is a Japanese radicals, kanji, and vocabulary learning web app that uses mnemonics and SRS to make kanji learning simple.", + "enhanced": true, + "tile_background": "light", + "icon": "wanikani.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/WaniKani/config.blade.php b/heimdall/config/www/SupportedApps/WaniKani/config.blade.php new file mode 100755 index 0000000..2cfe93c --- /dev/null +++ b/heimdall/config/www/SupportedApps/WaniKani/config.blade.php @@ -0,0 +1,13 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+ {!! Form::hidden('config[override_url]') !!} + {!! Form::hidden('config[password]') !!} +
+ + {!! Form::text('config[username]', (isset($item) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/WaniKani/livestats.blade.php b/heimdall/config/www/SupportedApps/WaniKani/livestats.blade.php new file mode 100755 index 0000000..d7bd78a --- /dev/null +++ b/heimdall/config/www/SupportedApps/WaniKani/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Lessons + {!! $lessons !!} +
  • +
  • + Reviews + {!! $reviews !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/WaniKani/wanikani.png b/heimdall/config/www/SupportedApps/WaniKani/wanikani.png new file mode 100755 index 0000000..46f6c13 Binary files /dev/null and b/heimdall/config/www/SupportedApps/WaniKani/wanikani.png differ diff --git a/heimdall/config/www/SupportedApps/WatchYourLAN/WatchYourLAN.php b/heimdall/config/www/SupportedApps/WatchYourLAN/WatchYourLAN.php new file mode 100755 index 0000000..b1a16ba --- /dev/null +++ b/heimdall/config/www/SupportedApps/WatchYourLAN/WatchYourLAN.php @@ -0,0 +1,5 @@ +{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable') +
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::text('config[password]', null, array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/Webmin/livestats.blade.php b/heimdall/config/www/SupportedApps/Webmin/livestats.blade.php new file mode 100755 index 0000000..4fa2c8b --- /dev/null +++ b/heimdall/config/www/SupportedApps/Webmin/livestats.blade.php @@ -0,0 +1,10 @@ +
    +
  • + Queue + {!! $queue_size !!} +
  • +
  • + Speed + {!! $current_speed !!} +
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/Webmin/webmin.svg b/heimdall/config/www/SupportedApps/Webmin/webmin.svg new file mode 100755 index 0000000..08dfc4e --- /dev/null +++ b/heimdall/config/www/SupportedApps/Webmin/webmin.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/heimdall/config/www/SupportedApps/Wekan/Wekan.php b/heimdall/config/www/SupportedApps/Wekan/Wekan.php new file mode 100755 index 0000000..77c4331 --- /dev/null +++ b/heimdall/config/www/SupportedApps/Wekan/Wekan.php @@ -0,0 +1,5 @@ + + + + logo + Created with Sketch. + + + + + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/ZoneMinder/ZoneMinder.php b/heimdall/config/www/SupportedApps/ZoneMinder/ZoneMinder.php new file mode 100755 index 0000000..212c5bb --- /dev/null +++ b/heimdall/config/www/SupportedApps/ZoneMinder/ZoneMinder.php @@ -0,0 +1,5 @@ +{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable') +
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', null, array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::password('config[password]', array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::select('config[availablestats][]', App\SupportedApps\openmediavault\openmediavault::getAvailableStats(), isset($item) ? ($item->getConfig()->availablestats ?? null) : null, array('multiple'=>'multiple')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/openmediavault/livestats.blade.php b/heimdall/config/www/SupportedApps/openmediavault/livestats.blade.php new file mode 100755 index 0000000..53ac67b --- /dev/null +++ b/heimdall/config/www/SupportedApps/openmediavault/livestats.blade.php @@ -0,0 +1,8 @@ +
    + @foreach ($visiblestats as $stat) +
  • + {!! $stat->title !!} + {!! $stat->value !!} +
  • + @endforeach +
diff --git a/heimdall/config/www/SupportedApps/openmediavault/openmediavault.php b/heimdall/config/www/SupportedApps/openmediavault/openmediavault.php new file mode 100755 index 0000000..257c74d --- /dev/null +++ b/heimdall/config/www/SupportedApps/openmediavault/openmediavault.php @@ -0,0 +1,100 @@ +cookie = new \GuzzleHttp\Cookie\CookieJar; + } + + public function url($endpoint) { + $api_url = parent::normaliseurl($this->config->url) . 'rpc.php'; + return $api_url; + } + + private function request($service, $method, $params = []) { + $attrs = [ + 'json' => [ + 'service' => $service, + 'method' => $method, + 'params' => $params, + ], + 'cookies' => $this->cookie, + ]; + + // @see \App\SupportedApps\execute($url, $attrs = [], $overridevars=false, $overridemethod=false) + $result = parent::execute($this->url(false), $attrs, false, 'POST'); + if (null === $result) { + throw new Exception("OMV error: Could not connect"); + } + + $response = json_decode($result->getBody()); + + if (is_null($response->response) && isset($response->error->message)) { + throw new Exception(sprintf('OMV error: %s', $response->error->message)); + } + elseif (is_null($response->response)) { + throw new Exception('OMV error: Empty response'); + } + return $response->response; + } + + private function auth() { + $result = $this->request('session', 'login', ['username' => $this->config->username, 'password' => $this->config->password]); + return $result->authenticated; + } + + public function test() { + try { + $token = $this->auth(); + echo "Successfully communicated with the API"; + } catch (Exception $err) { + echo $err->getMessage(); + } + } + + private function symbol($bool) { + return (true === $bool ? '✓' : '✗'); + } + + public function livestats() { + $status = 'inactive'; + $token = $this->auth(); + $data = ['visiblestats' => []]; + + $info = $this->request('system', 'getInformation'); + $data['CPU'] = sprintf('%.1f%%', $info->cpuUsage ); + $data['RAM'] = sprintf('%.1f%%', $info->memUsed / $info->memTotal * 100 ); + + $services = $this->request('services', 'getStatus'); + foreach ($services->data as $service) { + $k = explode(' ', $service->title)[0]; + $data[$k] = sprintf('%s | %s', $this->symbol($service->enabled), $this->symbol($service->running)); + } + + foreach ($this->config->availablestats as $stat) { + $newstat = new \stdClass; + $newstat->title = self::getAvailableStats()[$stat]; + $newstat->value = $data[$stat]; + $data['visiblestats'][] = $newstat; + } + $status = 'active'; + return parent::getLiveStats($status, $data); + } + + public static function getAvailableStats() { + return [ + 'CPU' => 'CPU', + 'RAM' => 'RAM', + 'NFS' => 'NFS', + 'FTP' => 'FTP', + 'RSync' => 'RSync', + 'SMB/CIFS' => 'SMB/CIFS', + 'SSH' => 'SSH', + ]; + } +} diff --git a/heimdall/config/www/SupportedApps/openmediavault/openmediavault.png b/heimdall/config/www/SupportedApps/openmediavault/openmediavault.png new file mode 100755 index 0000000..29fa840 Binary files /dev/null and b/heimdall/config/www/SupportedApps/openmediavault/openmediavault.png differ diff --git a/heimdall/config/www/SupportedApps/osTicket/app.json b/heimdall/config/www/SupportedApps/osTicket/app.json new file mode 100755 index 0000000..c2f0f67 --- /dev/null +++ b/heimdall/config/www/SupportedApps/osTicket/app.json @@ -0,0 +1,10 @@ +{ + "appid": "727706dbdf86b593f7be63c2fcca20718fd8caca", + "name": "osTicket", + "website": "osticket.com", + "license": "GNU General Public License v2.0 only", + "description": "osTicket is a widely-used open source support ticket system.", + "enhanced": false, + "tile_background": "dark", + "icon": "osticket.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/osTicket/osTicket.php b/heimdall/config/www/SupportedApps/osTicket/osTicket.php new file mode 100755 index 0000000..882653e --- /dev/null +++ b/heimdall/config/www/SupportedApps/osTicket/osTicket.php @@ -0,0 +1,5 @@ + + +pfSense Logo + + + + \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/pgAdmin/app.json b/heimdall/config/www/SupportedApps/pgAdmin/app.json new file mode 100755 index 0000000..96acc6f --- /dev/null +++ b/heimdall/config/www/SupportedApps/pgAdmin/app.json @@ -0,0 +1,10 @@ +{ + "appid": "43784e464f66bfc0254a3bad48939f14a70c878e", + "name": "pgAdmin", + "website": "https://www.pgadmin.org/", + "license": "PostgreSQL License", + "description": "pgAdmin is a feature rich open-source administration and development platform for PostgreSQL.", + "enhanced": false, + "tile_background": "dark", + "icon": "pgadmin.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/pgAdmin/pgAdmin.php b/heimdall/config/www/SupportedApps/pgAdmin/pgAdmin.php new file mode 100755 index 0000000..64ef461 --- /dev/null +++ b/heimdall/config/www/SupportedApps/pgAdmin/pgAdmin.php @@ -0,0 +1,5 @@ +{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable') +
+
+ + {!! Form::text('config[override_url]', null, array('placeholder' => __('app.apps.override'), 'id' => 'override_url', 'class' => 'form-control')) !!} +
+
+ + {!! Form::text('config[username]', (isset($item) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::input('password', 'config[password]', (isset($item) ? $item->getconfig()->password : null), array('placeholder' => __('app.apps.password'), 'data-config' => 'password', 'class' => 'form-control config-item')) !!} +
+
+ +
+
+ diff --git a/heimdall/config/www/SupportedApps/qBittorrent/livestats.blade.php b/heimdall/config/www/SupportedApps/qBittorrent/livestats.blade.php new file mode 100755 index 0000000..5e32adf --- /dev/null +++ b/heimdall/config/www/SupportedApps/qBittorrent/livestats.blade.php @@ -0,0 +1,4 @@ +
    +
  • Leech: {{ $leech_count }}{!! $download_rate !!}
  • +
  • Seed: {{ $seed_count }}{!! $upload_rate !!}
  • +
\ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/qBittorrent/qBittorrent.php b/heimdall/config/www/SupportedApps/qBittorrent/qBittorrent.php new file mode 100755 index 0000000..0cdee39 --- /dev/null +++ b/heimdall/config/www/SupportedApps/qBittorrent/qBittorrent.php @@ -0,0 +1,87 @@ +jar = new \GuzzleHttp\Cookie\CookieJar; // Uncomment if cookies need to be set + } + + public function test() + { + $test = $this->login(); + if($test->getStatusCode() === 200) { + echo $test->getStatusCode(); + } + #$test = parent::appTest($this->url('version/api')); + $test = parent::appTest($this->url('api/v2/app/version')); + echo $test->status; + } + + public function login() + { + $username = urlencode($this->config->username); + $password = urlencode($this->config->password); + $attrs = [ + 'body' => 'username='.$username.'&password='.$password, + 'cookies' => $this->jar, + 'headers' => ['content-type' => 'application/x-www-form-urlencoded'] + ]; + #return parent::execute($this->url('login'), $attrs, false, 'POST'); + return parent::execute($this->url('api/v2/auth/login'), $attrs, false, 'POST'); + } + + public function livestats() + { + $status = 'inactive'; + $this->login(); + $attrs = [ + 'cookies' => $this->jar + ]; + #$res = parent::execute($this->url('query/torrents'), $attrs); + $res = parent::execute($this->url('api/v2/torrents/info'), $attrs); + $details = json_decode($res->getBody()); + + $data = []; + + + $torrents = $details; + $torrentCount = count($torrents); + $rateDownload = $rateUpload = $completedTorrents = 0; + foreach ($torrents as $thisTorrent) { + $rateDownload += $thisTorrent->dlspeed; + $rateUpload += $thisTorrent->upspeed; + if ($thisTorrent->progress == 1) { + $completedTorrents += 1; + } + } + $leech = $torrentCount - $completedTorrents; + if ($leech > 0) { + $status = 'active'; + } + + $data['download_rate'] = format_bytes($rateDownload, false, ' ', '/s'); + $data['upload_rate'] = format_bytes($rateUpload, false, ' ', '/s'); + $data['seed_count'] = $completedTorrents ?? 0; + $data['leech_count'] = $leech ?? 0; + + + + + return parent::getLiveStats($status, $data); + + } + public function url($endpoint) + { + $api_url = parent::normaliseurl($this->config->url).$endpoint; + return $api_url; + } +} diff --git a/heimdall/config/www/SupportedApps/qBittorrent/qbittorrent.png b/heimdall/config/www/SupportedApps/qBittorrent/qbittorrent.png new file mode 100755 index 0000000..d85cb60 Binary files /dev/null and b/heimdall/config/www/SupportedApps/qBittorrent/qbittorrent.png differ diff --git a/heimdall/config/www/SupportedApps/ruTorrent/app.json b/heimdall/config/www/SupportedApps/ruTorrent/app.json new file mode 100755 index 0000000..c5f9dbf --- /dev/null +++ b/heimdall/config/www/SupportedApps/ruTorrent/app.json @@ -0,0 +1,10 @@ +{ + "appid": "fbf13ee99afeadddc4f73e1183fd1b52774b3474", + "name": "ruTorrent", + "website": "https://github.com/Novik/ruTorrent", + "license": "GNU General Public License v3.0 or later", + "description": "ruTorrent is a front-end for the popular Bittorrent client rtorrent.", + "enhanced": true, + "tile_background": "dark", + "icon": "rutorrent.png" +} diff --git a/heimdall/config/www/SupportedApps/ruTorrent/config.blade.php b/heimdall/config/www/SupportedApps/ruTorrent/config.blade.php new file mode 100755 index 0000000..70f05dd --- /dev/null +++ b/heimdall/config/www/SupportedApps/ruTorrent/config.blade.php @@ -0,0 +1,18 @@ +

{{ __('app.apps.config') }} ({{ __('app.optional') }}) @include('items.enable')

+
+
+ + {!! 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')) !!} +
+
+ + {!! Form::text('config[username]', (isset($item) && isset($item->getconfig()->username) ? $item->getconfig()->username : null), array('placeholder' => __('app.apps.username'), 'data-config' => 'username', 'class' => 'form-control config-item')) !!} +
+
+ + {!! Form::input('password', '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')) !!} +
+
+ +
+
diff --git a/heimdall/config/www/SupportedApps/ruTorrent/livestats.blade.php b/heimdall/config/www/SupportedApps/ruTorrent/livestats.blade.php new file mode 100755 index 0000000..3a493c1 --- /dev/null +++ b/heimdall/config/www/SupportedApps/ruTorrent/livestats.blade.php @@ -0,0 +1,14 @@ +
    + @if($down_rate != "0 B/s") +
  • + DOWN ↓ + {!! $down_rate !!} +
  • + @endif + @if($up_rate != "0 B/s") +
  • + UP ↑ + {!! $up_rate !!} +
  • + @endif +
diff --git a/heimdall/config/www/SupportedApps/ruTorrent/ruTorrent.php b/heimdall/config/www/SupportedApps/ruTorrent/ruTorrent.php new file mode 100755 index 0000000..d051689 --- /dev/null +++ b/heimdall/config/www/SupportedApps/ruTorrent/ruTorrent.php @@ -0,0 +1,88 @@ +getXMLRPCData('throttle.global_down.rate'); + if( !isset($data) || $data == 'Err' || $data == null || !is_object($data)) + { + echo 'There is an issue connecting to "' . $this->url('RPC2') . '". Please respect URL format "http(s)://IP:PORT". ' . $data; + } + else + { + echo 'Connection successful!'; + } + } + + public function livestats() + { + $status = 'inactive'; + + $data = []; + $data['down_rate'] = $this->formatBytes((float)$this->getXMLRPCData('throttle.global_down.rate')->params->param->value->i8, 1); + + $data['up_rate'] = $this->formatBytes((float)$this->getXMLRPCData('throttle.global_up.rate')->params->param->value->i8, 1); + + return parent::getLiveStats($status, $data); + } + + public function url($endpoint) + { + return parent::normaliseurl($this->config->url).$endpoint; + } + + public function getXMLRPCData($method) + { + $value=''; + + $body = ''.$method.''; + + $this->vars = ['http_errors' => false, 'timeout' => 5, 'body' => $body]; + $this->attrs = []; + $this->attrs['headers'] = ['Content-Type' => 'text/xml']; + + if( isset($this->config->username) && isset($this->config->password) ) { + $this->attrs['headers']['Authorization'] = 'Basic ' . base64_encode($this->config->username . ":" . $this->config->password); + } + + try{ + $res = parent::execute($this->url('RPC2'), $this->attrs, $this->vars); + } catch(\GuzzleHttp\Exception\RequestException $e){ + return ''; // Connection failed, display default response + } + + if (function_exists('simplexml_load_string')) { + try { + $value = simplexml_load_string($res->getBody()->getContents()); + } catch(\ErrorException $e) { + $value = 'Unexpected response. Are credentials correct?'; + } + } else { + $value = 'simplexml_load_string doesn\'t exist.'; + } + + return $value; + } + + public function formatBytes($bytes, $precision = 2) + { + $units = array('B', 'KB', 'MB', 'GB', 'TB'); + + $bytes = max($bytes, 0); + $pow = floor(($bytes ? log($bytes) : 0) / log(1024)); + $pow = min($pow, count($units) - 1); + + $bytes /= pow(1024, $pow); + + return round($bytes, $precision) . ' ' . $units[$pow] . '/s'; + } +} diff --git a/heimdall/config/www/SupportedApps/ruTorrent/rutorrent.png b/heimdall/config/www/SupportedApps/ruTorrent/rutorrent.png new file mode 100755 index 0000000..0b52230 Binary files /dev/null and b/heimdall/config/www/SupportedApps/ruTorrent/rutorrent.png differ diff --git a/heimdall/config/www/SupportedApps/vmwarehorizon/app.json b/heimdall/config/www/SupportedApps/vmwarehorizon/app.json new file mode 100755 index 0000000..dfef787 --- /dev/null +++ b/heimdall/config/www/SupportedApps/vmwarehorizon/app.json @@ -0,0 +1,10 @@ +{ + "appid": "b63d3ad41413da4056fbae6dc0ebc190668b3545", + "name": "vmware horizon", + "website": "https://www.vmware.com/products/horizon.html", + "license": "Commercial", + "description": "desktop and app virtualization.", + "enhanced": false, + "tile_background": "dark", + "icon": "vmwarehorizon.png" +} \ No newline at end of file diff --git a/heimdall/config/www/SupportedApps/vmwarehorizon/vmwarehorizon.php b/heimdall/config/www/SupportedApps/vmwarehorizon/vmwarehorizon.php new file mode 100755 index 0000000..4ee4ce9 --- /dev/null +++ b/heimdall/config/www/SupportedApps/vmwarehorizon/vmwarehorizon.php @@ -0,0 +1,5 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/heimdall/config/www/icons/4de55d8e7b833107fc05f166432016f3.svg b/heimdall/config/www/icons/4de55d8e7b833107fc05f166432016f3.svg new file mode 100755 index 0000000..1788601 --- /dev/null +++ b/heimdall/config/www/icons/4de55d8e7b833107fc05f166432016f3.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/heimdall/config/www/icons/61dbb91c67a2660294d186d31e6a09dd.png b/heimdall/config/www/icons/61dbb91c67a2660294d186d31e6a09dd.png new file mode 100755 index 0000000..029df08 Binary files /dev/null and b/heimdall/config/www/icons/61dbb91c67a2660294d186d31e6a09dd.png differ diff --git a/heimdall/config/www/icons/655165efde01962dad7fb2db164088ff.png b/heimdall/config/www/icons/655165efde01962dad7fb2db164088ff.png new file mode 100755 index 0000000..3d2568a Binary files /dev/null and b/heimdall/config/www/icons/655165efde01962dad7fb2db164088ff.png differ diff --git a/heimdall/config/www/icons/72cf44121e095a05aacb378a4f1ec61b.svg b/heimdall/config/www/icons/72cf44121e095a05aacb378a4f1ec61b.svg new file mode 100755 index 0000000..b791805 --- /dev/null +++ b/heimdall/config/www/icons/72cf44121e095a05aacb378a4f1ec61b.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/73da7989a23ce9a4be565ec65658a239.png b/heimdall/config/www/icons/73da7989a23ce9a4be565ec65658a239.png new file mode 100755 index 0000000..fc553bc Binary files /dev/null and b/heimdall/config/www/icons/73da7989a23ce9a4be565ec65658a239.png differ diff --git a/heimdall/config/www/icons/77392211578da5bed658ad18d2f29645.png b/heimdall/config/www/icons/77392211578da5bed658ad18d2f29645.png new file mode 100755 index 0000000..c884c23 Binary files /dev/null and b/heimdall/config/www/icons/77392211578da5bed658ad18d2f29645.png differ diff --git a/heimdall/config/www/icons/7F1Hajs3kjDohtu7NICPDQQvOXEueCGyaQeHJb93.svg b/heimdall/config/www/icons/7F1Hajs3kjDohtu7NICPDQQvOXEueCGyaQeHJb93.svg new file mode 100755 index 0000000..ce565eb --- /dev/null +++ b/heimdall/config/www/icons/7F1Hajs3kjDohtu7NICPDQQvOXEueCGyaQeHJb93.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PACKAGE + + + + + + + + + + + + + + + + + + + + diff --git a/heimdall/config/www/icons/84faa4c470efe81d6923622b009c7386.png b/heimdall/config/www/icons/84faa4c470efe81d6923622b009c7386.png new file mode 100755 index 0000000..304be8c Binary files /dev/null and b/heimdall/config/www/icons/84faa4c470efe81d6923622b009c7386.png differ diff --git a/heimdall/config/www/icons/9HqXmcpk7MJZv0Fgv0vMzt60Wk6UDONYxWTOSbKL.png b/heimdall/config/www/icons/9HqXmcpk7MJZv0Fgv0vMzt60Wk6UDONYxWTOSbKL.png new file mode 100755 index 0000000..d662e9b Binary files /dev/null and b/heimdall/config/www/icons/9HqXmcpk7MJZv0Fgv0vMzt60Wk6UDONYxWTOSbKL.png differ diff --git a/heimdall/config/www/icons/9bfA88VBv0kiCM27zbsWULTDhoD0NM16oAh8GRrM.png b/heimdall/config/www/icons/9bfA88VBv0kiCM27zbsWULTDhoD0NM16oAh8GRrM.png new file mode 100755 index 0000000..69cfcd9 Binary files /dev/null and b/heimdall/config/www/icons/9bfA88VBv0kiCM27zbsWULTDhoD0NM16oAh8GRrM.png differ diff --git a/heimdall/config/www/icons/BL4fT57BG0Bdj4AQtpw8sx0ZR1cmSUvAaThAqrpG.png b/heimdall/config/www/icons/BL4fT57BG0Bdj4AQtpw8sx0ZR1cmSUvAaThAqrpG.png new file mode 100755 index 0000000..0221ca9 Binary files /dev/null and b/heimdall/config/www/icons/BL4fT57BG0Bdj4AQtpw8sx0ZR1cmSUvAaThAqrpG.png differ diff --git a/heimdall/config/www/icons/BvwMxG5AMToZpIXIuJYsSb5I5YlTYRKUYn0CfBSx.png b/heimdall/config/www/icons/BvwMxG5AMToZpIXIuJYsSb5I5YlTYRKUYn0CfBSx.png new file mode 100755 index 0000000..8b716f6 Binary files /dev/null and b/heimdall/config/www/icons/BvwMxG5AMToZpIXIuJYsSb5I5YlTYRKUYn0CfBSx.png differ diff --git a/heimdall/config/www/icons/CnNVRZqnJpIWeuKNxBeokZwhQWbfsPhXWvdFeTlM.png b/heimdall/config/www/icons/CnNVRZqnJpIWeuKNxBeokZwhQWbfsPhXWvdFeTlM.png new file mode 100755 index 0000000..92288c7 Binary files /dev/null and b/heimdall/config/www/icons/CnNVRZqnJpIWeuKNxBeokZwhQWbfsPhXWvdFeTlM.png differ diff --git a/heimdall/config/www/icons/D9mNssxE27Tf3tsl9oMiHdzjjC4wbdOf7ee8sXvv.jpeg b/heimdall/config/www/icons/D9mNssxE27Tf3tsl9oMiHdzjjC4wbdOf7ee8sXvv.jpeg new file mode 100755 index 0000000..0f01023 Binary files /dev/null and b/heimdall/config/www/icons/D9mNssxE27Tf3tsl9oMiHdzjjC4wbdOf7ee8sXvv.jpeg differ diff --git a/heimdall/config/www/icons/Mvihcn5rn0IXFzMnoGowqysLm7gzWvsK07Bf7WVm.png b/heimdall/config/www/icons/Mvihcn5rn0IXFzMnoGowqysLm7gzWvsK07Bf7WVm.png new file mode 100755 index 0000000..61bdf99 Binary files /dev/null and b/heimdall/config/www/icons/Mvihcn5rn0IXFzMnoGowqysLm7gzWvsK07Bf7WVm.png differ diff --git a/heimdall/config/www/icons/T7C0oBD8WZxUZjfpUadfn5Icz8kvRUtP7bqQH0tw.png b/heimdall/config/www/icons/T7C0oBD8WZxUZjfpUadfn5Icz8kvRUtP7bqQH0tw.png new file mode 100755 index 0000000..6b07c7d Binary files /dev/null and b/heimdall/config/www/icons/T7C0oBD8WZxUZjfpUadfn5Icz8kvRUtP7bqQH0tw.png differ diff --git a/heimdall/config/www/icons/TpbQSVdWzZYEBXVQbeDEorcYVfQiTJuveQYgEOa6.png b/heimdall/config/www/icons/TpbQSVdWzZYEBXVQbeDEorcYVfQiTJuveQYgEOa6.png new file mode 100755 index 0000000..a7cf45a Binary files /dev/null and b/heimdall/config/www/icons/TpbQSVdWzZYEBXVQbeDEorcYVfQiTJuveQYgEOa6.png differ diff --git a/heimdall/config/www/icons/Ug2uDvFRgWdzAyBAv1sYQ4ng0G9O22bTXKp5bZBe.png b/heimdall/config/www/icons/Ug2uDvFRgWdzAyBAv1sYQ4ng0G9O22bTXKp5bZBe.png new file mode 100755 index 0000000..69cfcd9 Binary files /dev/null and b/heimdall/config/www/icons/Ug2uDvFRgWdzAyBAv1sYQ4ng0G9O22bTXKp5bZBe.png differ diff --git a/heimdall/config/www/icons/ZBpDCewkSQaZ5xm0J2i0iAjs62TPLQR54Vhuhbrd.png b/heimdall/config/www/icons/ZBpDCewkSQaZ5xm0J2i0iAjs62TPLQR54Vhuhbrd.png new file mode 100755 index 0000000..f672c44 Binary files /dev/null and b/heimdall/config/www/icons/ZBpDCewkSQaZ5xm0J2i0iAjs62TPLQR54Vhuhbrd.png differ diff --git a/heimdall/config/www/icons/adguardhome.png b/heimdall/config/www/icons/adguardhome.png new file mode 100755 index 0000000..ff33d08 Binary files /dev/null and b/heimdall/config/www/icons/adguardhome.png differ diff --git a/heimdall/config/www/icons/adminer.png b/heimdall/config/www/icons/adminer.png new file mode 100755 index 0000000..4699321 Binary files /dev/null and b/heimdall/config/www/icons/adminer.png differ diff --git a/heimdall/config/www/icons/adminer.svg b/heimdall/config/www/icons/adminer.svg new file mode 100755 index 0000000..c5892a0 --- /dev/null +++ b/heimdall/config/www/icons/adminer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/airsonic.png b/heimdall/config/www/icons/airsonic.png new file mode 100755 index 0000000..da81e27 Binary files /dev/null and b/heimdall/config/www/icons/airsonic.png differ diff --git a/heimdall/config/www/icons/alarmpi.png b/heimdall/config/www/icons/alarmpi.png new file mode 100755 index 0000000..d34d857 Binary files /dev/null and b/heimdall/config/www/icons/alarmpi.png differ diff --git a/heimdall/config/www/icons/alertmanager.png b/heimdall/config/www/icons/alertmanager.png new file mode 100755 index 0000000..a3a9601 Binary files /dev/null and b/heimdall/config/www/icons/alertmanager.png differ diff --git a/heimdall/config/www/icons/amp.png b/heimdall/config/www/icons/amp.png new file mode 100755 index 0000000..ff93038 Binary files /dev/null and b/heimdall/config/www/icons/amp.png differ diff --git a/heimdall/config/www/icons/archisteamfarm.png b/heimdall/config/www/icons/archisteamfarm.png new file mode 100755 index 0000000..810ba16 Binary files /dev/null and b/heimdall/config/www/icons/archisteamfarm.png differ diff --git a/heimdall/config/www/icons/archivebox.png b/heimdall/config/www/icons/archivebox.png new file mode 100755 index 0000000..290fc3a Binary files /dev/null and b/heimdall/config/www/icons/archivebox.png differ diff --git a/heimdall/config/www/icons/archiveteamwarrior.png b/heimdall/config/www/icons/archiveteamwarrior.png new file mode 100755 index 0000000..4e81ea1 Binary files /dev/null and b/heimdall/config/www/icons/archiveteamwarrior.png differ diff --git a/heimdall/config/www/icons/ariang.png b/heimdall/config/www/icons/ariang.png new file mode 100755 index 0000000..3bf663f Binary files /dev/null and b/heimdall/config/www/icons/ariang.png differ diff --git a/heimdall/config/www/icons/artifactory.png b/heimdall/config/www/icons/artifactory.png new file mode 100755 index 0000000..f3e14fe Binary files /dev/null and b/heimdall/config/www/icons/artifactory.png differ diff --git a/heimdall/config/www/icons/asrockrackipmi.png b/heimdall/config/www/icons/asrockrackipmi.png new file mode 100755 index 0000000..df8d2eb Binary files /dev/null and b/heimdall/config/www/icons/asrockrackipmi.png differ diff --git a/heimdall/config/www/icons/avmfritzbox.png b/heimdall/config/www/icons/avmfritzbox.png new file mode 100755 index 0000000..d266690 Binary files /dev/null and b/heimdall/config/www/icons/avmfritzbox.png differ diff --git a/heimdall/config/www/icons/awx.png b/heimdall/config/www/icons/awx.png new file mode 100755 index 0000000..084864e Binary files /dev/null and b/heimdall/config/www/icons/awx.png differ diff --git a/heimdall/config/www/icons/bacula.png b/heimdall/config/www/icons/bacula.png new file mode 100755 index 0000000..7778fd5 Binary files /dev/null and b/heimdall/config/www/icons/bacula.png differ diff --git a/heimdall/config/www/icons/baikal.png b/heimdall/config/www/icons/baikal.png new file mode 100755 index 0000000..e03de66 Binary files /dev/null and b/heimdall/config/www/icons/baikal.png differ diff --git a/heimdall/config/www/icons/bastillion.png b/heimdall/config/www/icons/bastillion.png new file mode 100755 index 0000000..cd27506 Binary files /dev/null and b/heimdall/config/www/icons/bastillion.png differ diff --git a/heimdall/config/www/icons/bazarr.png b/heimdall/config/www/icons/bazarr.png new file mode 100755 index 0000000..7ba609c Binary files /dev/null and b/heimdall/config/www/icons/bazarr.png differ diff --git a/heimdall/config/www/icons/bc8f75876a747950735260adc634a81b.png b/heimdall/config/www/icons/bc8f75876a747950735260adc634a81b.png new file mode 100755 index 0000000..eb511bf Binary files /dev/null and b/heimdall/config/www/icons/bc8f75876a747950735260adc634a81b.png differ diff --git a/heimdall/config/www/icons/bitwarden.png b/heimdall/config/www/icons/bitwarden.png new file mode 100755 index 0000000..82a277b Binary files /dev/null and b/heimdall/config/www/icons/bitwarden.png differ diff --git a/heimdall/config/www/icons/bitwarden.svg b/heimdall/config/www/icons/bitwarden.svg new file mode 100755 index 0000000..6eacdc0 --- /dev/null +++ b/heimdall/config/www/icons/bitwarden.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/booksonic.png b/heimdall/config/www/icons/booksonic.png new file mode 100755 index 0000000..4232ac9 Binary files /dev/null and b/heimdall/config/www/icons/booksonic.png differ diff --git a/heimdall/config/www/icons/bookstack.png b/heimdall/config/www/icons/bookstack.png new file mode 100755 index 0000000..949b055 Binary files /dev/null and b/heimdall/config/www/icons/bookstack.png differ diff --git a/heimdall/config/www/icons/box.png b/heimdall/config/www/icons/box.png new file mode 100755 index 0000000..f454d76 Binary files /dev/null and b/heimdall/config/www/icons/box.png differ diff --git a/heimdall/config/www/icons/cCaEKDEhnWBc1ZKEiQZQrjdVe7CGDe9RNZ2y3RjI.png b/heimdall/config/www/icons/cCaEKDEhnWBc1ZKEiQZQrjdVe7CGDe9RNZ2y3RjI.png new file mode 100755 index 0000000..7040574 Binary files /dev/null and b/heimdall/config/www/icons/cCaEKDEhnWBc1ZKEiQZQrjdVe7CGDe9RNZ2y3RjI.png differ diff --git a/heimdall/config/www/icons/cabot.png b/heimdall/config/www/icons/cabot.png new file mode 100755 index 0000000..09e9c6a Binary files /dev/null and b/heimdall/config/www/icons/cabot.png differ diff --git a/heimdall/config/www/icons/calibreweb.png b/heimdall/config/www/icons/calibreweb.png new file mode 100755 index 0000000..24b2ad1 Binary files /dev/null and b/heimdall/config/www/icons/calibreweb.png differ diff --git a/heimdall/config/www/icons/cardigann.png b/heimdall/config/www/icons/cardigann.png new file mode 100755 index 0000000..da85e49 Binary files /dev/null and b/heimdall/config/www/icons/cardigann.png differ diff --git a/heimdall/config/www/icons/cb71e67555e550bf84c0816179daed23.svg b/heimdall/config/www/icons/cb71e67555e550bf84c0816179daed23.svg new file mode 100755 index 0000000..ed942cc --- /dev/null +++ b/heimdall/config/www/icons/cb71e67555e550bf84c0816179daed23.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/heimdall/config/www/icons/changedetectionio.png b/heimdall/config/www/icons/changedetectionio.png new file mode 100755 index 0000000..192846a Binary files /dev/null and b/heimdall/config/www/icons/changedetectionio.png differ diff --git a/heimdall/config/www/icons/checkmk.png b/heimdall/config/www/icons/checkmk.png new file mode 100755 index 0000000..9886451 Binary files /dev/null and b/heimdall/config/www/icons/checkmk.png differ diff --git a/heimdall/config/www/icons/chevereto.png b/heimdall/config/www/icons/chevereto.png new file mode 100755 index 0000000..38ba569 Binary files /dev/null and b/heimdall/config/www/icons/chevereto.png differ diff --git a/heimdall/config/www/icons/chronograf.png b/heimdall/config/www/icons/chronograf.png new file mode 100755 index 0000000..36a9074 Binary files /dev/null and b/heimdall/config/www/icons/chronograf.png differ diff --git a/heimdall/config/www/icons/clarkson.png b/heimdall/config/www/icons/clarkson.png new file mode 100755 index 0000000..8e377a0 Binary files /dev/null and b/heimdall/config/www/icons/clarkson.png differ diff --git a/heimdall/config/www/icons/cloudcmd.png b/heimdall/config/www/icons/cloudcmd.png new file mode 100755 index 0000000..b5da320 Binary files /dev/null and b/heimdall/config/www/icons/cloudcmd.png differ diff --git a/heimdall/config/www/icons/cockpit.png b/heimdall/config/www/icons/cockpit.png new file mode 100755 index 0000000..74813fc Binary files /dev/null and b/heimdall/config/www/icons/cockpit.png differ diff --git a/heimdall/config/www/icons/cockpitcms.png b/heimdall/config/www/icons/cockpitcms.png new file mode 100755 index 0000000..3f4ef18 Binary files /dev/null and b/heimdall/config/www/icons/cockpitcms.png differ diff --git a/heimdall/config/www/icons/codeserver.png b/heimdall/config/www/icons/codeserver.png new file mode 100755 index 0000000..4f44469 Binary files /dev/null and b/heimdall/config/www/icons/codeserver.png differ diff --git a/heimdall/config/www/icons/codimd.png b/heimdall/config/www/icons/codimd.png new file mode 100755 index 0000000..1653f10 Binary files /dev/null and b/heimdall/config/www/icons/codimd.png differ diff --git a/heimdall/config/www/icons/concourse.png b/heimdall/config/www/icons/concourse.png new file mode 100755 index 0000000..fbcf4bb Binary files /dev/null and b/heimdall/config/www/icons/concourse.png differ diff --git a/heimdall/config/www/icons/confluence.svg b/heimdall/config/www/icons/confluence.svg new file mode 100755 index 0000000..531b563 --- /dev/null +++ b/heimdall/config/www/icons/confluence.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/heimdall/config/www/icons/couchpotato.png b/heimdall/config/www/icons/couchpotato.png new file mode 100755 index 0000000..10f9427 Binary files /dev/null and b/heimdall/config/www/icons/couchpotato.png differ diff --git a/heimdall/config/www/icons/cpanel.png b/heimdall/config/www/icons/cpanel.png new file mode 100755 index 0000000..019f4aa Binary files /dev/null and b/heimdall/config/www/icons/cpanel.png differ diff --git a/heimdall/config/www/icons/cryptpad.png b/heimdall/config/www/icons/cryptpad.png new file mode 100755 index 0000000..722438d Binary files /dev/null and b/heimdall/config/www/icons/cryptpad.png differ diff --git a/heimdall/config/www/icons/cups.svg b/heimdall/config/www/icons/cups.svg new file mode 100755 index 0000000..a5290d0 --- /dev/null +++ b/heimdall/config/www/icons/cups.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/dVC48RMlRSJERmUmbvlvHiKvBDGWq5jrVXaLWLGk.jpeg b/heimdall/config/www/icons/dVC48RMlRSJERmUmbvlvHiKvBDGWq5jrVXaLWLGk.jpeg new file mode 100755 index 0000000..0f01023 Binary files /dev/null and b/heimdall/config/www/icons/dVC48RMlRSJERmUmbvlvHiKvBDGWq5jrVXaLWLGk.jpeg differ diff --git a/heimdall/config/www/icons/ddd03d45efd8cc28b059701317747e6f.png b/heimdall/config/www/icons/ddd03d45efd8cc28b059701317747e6f.png new file mode 100755 index 0000000..1afeb19 Binary files /dev/null and b/heimdall/config/www/icons/ddd03d45efd8cc28b059701317747e6f.png differ diff --git a/heimdall/config/www/icons/deluge.png b/heimdall/config/www/icons/deluge.png new file mode 100755 index 0000000..8b288c7 Binary files /dev/null and b/heimdall/config/www/icons/deluge.png differ diff --git a/heimdall/config/www/icons/dillinger.png b/heimdall/config/www/icons/dillinger.png new file mode 100755 index 0000000..b22042e Binary files /dev/null and b/heimdall/config/www/icons/dillinger.png differ diff --git a/heimdall/config/www/icons/directus.png b/heimdall/config/www/icons/directus.png new file mode 100755 index 0000000..981dedb Binary files /dev/null and b/heimdall/config/www/icons/directus.png differ diff --git a/heimdall/config/www/icons/dokuwiki.png b/heimdall/config/www/icons/dokuwiki.png new file mode 100755 index 0000000..9691b09 Binary files /dev/null and b/heimdall/config/www/icons/dokuwiki.png differ diff --git a/heimdall/config/www/icons/domoticz.png b/heimdall/config/www/icons/domoticz.png new file mode 100755 index 0000000..35090c8 Binary files /dev/null and b/heimdall/config/www/icons/domoticz.png differ diff --git a/heimdall/config/www/icons/dozzle.png b/heimdall/config/www/icons/dozzle.png new file mode 100755 index 0000000..dcbf073 Binary files /dev/null and b/heimdall/config/www/icons/dozzle.png differ diff --git a/heimdall/config/www/icons/drone.png b/heimdall/config/www/icons/drone.png new file mode 100755 index 0000000..b60aacf Binary files /dev/null and b/heimdall/config/www/icons/drone.png differ diff --git a/heimdall/config/www/icons/droppy.png b/heimdall/config/www/icons/droppy.png new file mode 100755 index 0000000..6bbccea Binary files /dev/null and b/heimdall/config/www/icons/droppy.png differ diff --git a/heimdall/config/www/icons/duplicacy.png b/heimdall/config/www/icons/duplicacy.png new file mode 100755 index 0000000..ead9fe7 Binary files /dev/null and b/heimdall/config/www/icons/duplicacy.png differ diff --git a/heimdall/config/www/icons/duplicati.png b/heimdall/config/www/icons/duplicati.png new file mode 100755 index 0000000..caa094d Binary files /dev/null and b/heimdall/config/www/icons/duplicati.png differ diff --git a/heimdall/config/www/icons/element.png b/heimdall/config/www/icons/element.png new file mode 100755 index 0000000..ae78138 Binary files /dev/null and b/heimdall/config/www/icons/element.png differ diff --git a/heimdall/config/www/icons/emby.png b/heimdall/config/www/icons/emby.png new file mode 100755 index 0000000..aae9097 Binary files /dev/null and b/heimdall/config/www/icons/emby.png differ diff --git a/heimdall/config/www/icons/embystat.png b/heimdall/config/www/icons/embystat.png new file mode 100755 index 0000000..96565ed Binary files /dev/null and b/heimdall/config/www/icons/embystat.png differ diff --git a/heimdall/config/www/icons/eqK0F9W3wIy8ArTxr9SsB3mO603vuPP6hYw4Ds0x.png b/heimdall/config/www/icons/eqK0F9W3wIy8ArTxr9SsB3mO603vuPP6hYw4Ds0x.png new file mode 100755 index 0000000..133eea3 Binary files /dev/null and b/heimdall/config/www/icons/eqK0F9W3wIy8ArTxr9SsB3mO603vuPP6hYw4Ds0x.png differ diff --git a/heimdall/config/www/icons/esphome.png b/heimdall/config/www/icons/esphome.png new file mode 100755 index 0000000..0609f8e Binary files /dev/null and b/heimdall/config/www/icons/esphome.png differ diff --git a/heimdall/config/www/icons/f2c15a6cf3ab3827df42a7d20e223a32.png b/heimdall/config/www/icons/f2c15a6cf3ab3827df42a7d20e223a32.png new file mode 100755 index 0000000..16dd7e7 Binary files /dev/null and b/heimdall/config/www/icons/f2c15a6cf3ab3827df42a7d20e223a32.png differ diff --git a/heimdall/config/www/icons/fgl9h4JqH7xmM6vAOVBtZsNIGJqVNxiDp0DrMd7u.png b/heimdall/config/www/icons/fgl9h4JqH7xmM6vAOVBtZsNIGJqVNxiDp0DrMd7u.png new file mode 100755 index 0000000..38182d2 Binary files /dev/null and b/heimdall/config/www/icons/fgl9h4JqH7xmM6vAOVBtZsNIGJqVNxiDp0DrMd7u.png differ diff --git a/heimdall/config/www/icons/filebrowser.png b/heimdall/config/www/icons/filebrowser.png new file mode 100755 index 0000000..a182f22 Binary files /dev/null and b/heimdall/config/www/icons/filebrowser.png differ diff --git a/heimdall/config/www/icons/filerun.png b/heimdall/config/www/icons/filerun.png new file mode 100755 index 0000000..ea391a1 Binary files /dev/null and b/heimdall/config/www/icons/filerun.png differ diff --git a/heimdall/config/www/icons/firefly.png b/heimdall/config/www/icons/firefly.png new file mode 100755 index 0000000..fa4ee0e Binary files /dev/null and b/heimdall/config/www/icons/firefly.png differ diff --git a/heimdall/config/www/icons/firefoxsend.png b/heimdall/config/www/icons/firefoxsend.png new file mode 100755 index 0000000..99b0a9f Binary files /dev/null and b/heimdall/config/www/icons/firefoxsend.png differ diff --git a/heimdall/config/www/icons/flexget.png b/heimdall/config/www/icons/flexget.png new file mode 100755 index 0000000..9130453 Binary files /dev/null and b/heimdall/config/www/icons/flexget.png differ diff --git a/heimdall/config/www/icons/flood.png b/heimdall/config/www/icons/flood.png new file mode 100755 index 0000000..f340805 Binary files /dev/null and b/heimdall/config/www/icons/flood.png differ diff --git a/heimdall/config/www/icons/focalboard.svg b/heimdall/config/www/icons/focalboard.svg new file mode 100755 index 0000000..0f624ce --- /dev/null +++ b/heimdall/config/www/icons/focalboard.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + diff --git a/heimdall/config/www/icons/foldingathome.png b/heimdall/config/www/icons/foldingathome.png new file mode 100755 index 0000000..576ad69 Binary files /dev/null and b/heimdall/config/www/icons/foldingathome.png differ diff --git a/heimdall/config/www/icons/freenas.png b/heimdall/config/www/icons/freenas.png new file mode 100755 index 0000000..8fb6608 Binary files /dev/null and b/heimdall/config/www/icons/freenas.png differ diff --git a/heimdall/config/www/icons/freshrss.png b/heimdall/config/www/icons/freshrss.png new file mode 100755 index 0000000..7ced43f Binary files /dev/null and b/heimdall/config/www/icons/freshrss.png differ diff --git a/heimdall/config/www/icons/freshrss.svg b/heimdall/config/www/icons/freshrss.svg new file mode 100755 index 0000000..eb5b689 --- /dev/null +++ b/heimdall/config/www/icons/freshrss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/frigate.svg b/heimdall/config/www/icons/frigate.svg new file mode 100755 index 0000000..0f315fa --- /dev/null +++ b/heimdall/config/www/icons/frigate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/fronius.png b/heimdall/config/www/icons/fronius.png new file mode 100755 index 0000000..f1f399c Binary files /dev/null and b/heimdall/config/www/icons/fronius.png differ diff --git a/heimdall/config/www/icons/funkwhale.svg b/heimdall/config/www/icons/funkwhale.svg new file mode 100755 index 0000000..fe3141b --- /dev/null +++ b/heimdall/config/www/icons/funkwhale.svg @@ -0,0 +1,91 @@ + + + +image/svg+xml + + + + + + + + + + + + + \ No newline at end of file diff --git a/heimdall/config/www/icons/ghost.png b/heimdall/config/www/icons/ghost.png new file mode 100755 index 0000000..27748f7 Binary files /dev/null and b/heimdall/config/www/icons/ghost.png differ diff --git a/heimdall/config/www/icons/gitea.png b/heimdall/config/www/icons/gitea.png new file mode 100755 index 0000000..33b7223 Binary files /dev/null and b/heimdall/config/www/icons/gitea.png differ diff --git a/heimdall/config/www/icons/gitea.svg b/heimdall/config/www/icons/gitea.svg new file mode 100755 index 0000000..a61f7ac --- /dev/null +++ b/heimdall/config/www/icons/gitea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/github.png b/heimdall/config/www/icons/github.png new file mode 100755 index 0000000..136b02f Binary files /dev/null and b/heimdall/config/www/icons/github.png differ diff --git a/heimdall/config/www/icons/gitlab.png b/heimdall/config/www/icons/gitlab.png new file mode 100755 index 0000000..d8b8fef Binary files /dev/null and b/heimdall/config/www/icons/gitlab.png differ diff --git a/heimdall/config/www/icons/gitlab.svg b/heimdall/config/www/icons/gitlab.svg new file mode 100755 index 0000000..10b8b51 --- /dev/null +++ b/heimdall/config/www/icons/gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/glances.png b/heimdall/config/www/icons/glances.png new file mode 100755 index 0000000..6eb45d4 Binary files /dev/null and b/heimdall/config/www/icons/glances.png differ diff --git a/heimdall/config/www/icons/gogs.png b/heimdall/config/www/icons/gogs.png new file mode 100755 index 0000000..3438553 Binary files /dev/null and b/heimdall/config/www/icons/gogs.png differ diff --git a/heimdall/config/www/icons/gotify.png b/heimdall/config/www/icons/gotify.png new file mode 100755 index 0000000..cb74a8f Binary files /dev/null and b/heimdall/config/www/icons/gotify.png differ diff --git a/heimdall/config/www/icons/grafana.png b/heimdall/config/www/icons/grafana.png new file mode 100755 index 0000000..3ae0302 Binary files /dev/null and b/heimdall/config/www/icons/grafana.png differ diff --git a/heimdall/config/www/icons/grav.png b/heimdall/config/www/icons/grav.png new file mode 100755 index 0000000..e92fbd9 Binary files /dev/null and b/heimdall/config/www/icons/grav.png differ diff --git a/heimdall/config/www/icons/graylog.png b/heimdall/config/www/icons/graylog.png new file mode 100755 index 0000000..4a8031c Binary files /dev/null and b/heimdall/config/www/icons/graylog.png differ diff --git a/heimdall/config/www/icons/grocy.png b/heimdall/config/www/icons/grocy.png new file mode 100755 index 0000000..d60f846 Binary files /dev/null and b/heimdall/config/www/icons/grocy.png differ diff --git a/heimdall/config/www/icons/grocy.svg b/heimdall/config/www/icons/grocy.svg new file mode 100755 index 0000000..a4855b1 --- /dev/null +++ b/heimdall/config/www/icons/grocy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/guacamole.png b/heimdall/config/www/icons/guacamole.png new file mode 100755 index 0000000..5946fb7 Binary files /dev/null and b/heimdall/config/www/icons/guacamole.png differ diff --git a/heimdall/config/www/icons/handbrake.png b/heimdall/config/www/icons/handbrake.png new file mode 100755 index 0000000..ea7f65a Binary files /dev/null and b/heimdall/config/www/icons/handbrake.png differ diff --git a/heimdall/config/www/icons/haproxy.png b/heimdall/config/www/icons/haproxy.png new file mode 100755 index 0000000..04c63ae Binary files /dev/null and b/heimdall/config/www/icons/haproxy.png differ diff --git a/heimdall/config/www/icons/hasura.png b/heimdall/config/www/icons/hasura.png new file mode 100755 index 0000000..b438d0f Binary files /dev/null and b/heimdall/config/www/icons/hasura.png differ diff --git a/heimdall/config/www/icons/hdhomerun.png b/heimdall/config/www/icons/hdhomerun.png new file mode 100755 index 0000000..d09e40a Binary files /dev/null and b/heimdall/config/www/icons/hdhomerun.png differ diff --git a/heimdall/config/www/icons/headphones.png b/heimdall/config/www/icons/headphones.png new file mode 100755 index 0000000..f4b48b2 Binary files /dev/null and b/heimdall/config/www/icons/headphones.png differ diff --git a/heimdall/config/www/icons/healthchecks.png b/heimdall/config/www/icons/healthchecks.png new file mode 100755 index 0000000..f0c2d4e Binary files /dev/null and b/heimdall/config/www/icons/healthchecks.png differ diff --git a/heimdall/config/www/icons/heimdall.png b/heimdall/config/www/icons/heimdall.png new file mode 100755 index 0000000..cff916c Binary files /dev/null and b/heimdall/config/www/icons/heimdall.png differ diff --git a/heimdall/config/www/icons/homeassistant.png b/heimdall/config/www/icons/homeassistant.png new file mode 100755 index 0000000..6f77c74 Binary files /dev/null and b/heimdall/config/www/icons/homeassistant.png differ diff --git a/heimdall/config/www/icons/homebridge.png b/heimdall/config/www/icons/homebridge.png new file mode 100755 index 0000000..81a0533 Binary files /dev/null and b/heimdall/config/www/icons/homebridge.png differ diff --git a/heimdall/config/www/icons/hubitat.png b/heimdall/config/www/icons/hubitat.png new file mode 100755 index 0000000..c043c44 Binary files /dev/null and b/heimdall/config/www/icons/hubitat.png differ diff --git a/heimdall/config/www/icons/huginn.png b/heimdall/config/www/icons/huginn.png new file mode 100755 index 0000000..82a50a8 Binary files /dev/null and b/heimdall/config/www/icons/huginn.png differ diff --git a/heimdall/config/www/icons/iDbaTFHn0GWqs9aS4qRSVi8sMjFy7DzTrNZiQXNB.png b/heimdall/config/www/icons/iDbaTFHn0GWqs9aS4qRSVi8sMjFy7DzTrNZiQXNB.png new file mode 100755 index 0000000..39890b2 Binary files /dev/null and b/heimdall/config/www/icons/iDbaTFHn0GWqs9aS4qRSVi8sMjFy7DzTrNZiQXNB.png differ diff --git a/heimdall/config/www/icons/icecast.png b/heimdall/config/www/icons/icecast.png new file mode 100755 index 0000000..b8eaa7a Binary files /dev/null and b/heimdall/config/www/icons/icecast.png differ diff --git a/heimdall/config/www/icons/icingaweb.svg b/heimdall/config/www/icons/icingaweb.svg new file mode 100755 index 0000000..8cdb3ba --- /dev/null +++ b/heimdall/config/www/icons/icingaweb.svg @@ -0,0 +1,81 @@ + +image/svg+xml + + + + + + + + + + + \ No newline at end of file diff --git a/heimdall/config/www/icons/idrac.png b/heimdall/config/www/icons/idrac.png new file mode 100755 index 0000000..74b0533 Binary files /dev/null and b/heimdall/config/www/icons/idrac.png differ diff --git a/heimdall/config/www/icons/ilo.png b/heimdall/config/www/icons/ilo.png new file mode 100755 index 0000000..09ff14d Binary files /dev/null and b/heimdall/config/www/icons/ilo.png differ diff --git a/heimdall/config/www/icons/influxdb.svg b/heimdall/config/www/icons/influxdb.svg new file mode 100755 index 0000000..f2ac1bf --- /dev/null +++ b/heimdall/config/www/icons/influxdb.svg @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/heimdall/config/www/icons/infoblox.png b/heimdall/config/www/icons/infoblox.png new file mode 100755 index 0000000..af1e518 Binary files /dev/null and b/heimdall/config/www/icons/infoblox.png differ diff --git a/heimdall/config/www/icons/invidious.png b/heimdall/config/www/icons/invidious.png new file mode 100755 index 0000000..453bf72 Binary files /dev/null and b/heimdall/config/www/icons/invidious.png differ diff --git a/heimdall/config/www/icons/invoiceninja.png b/heimdall/config/www/icons/invoiceninja.png new file mode 100755 index 0000000..11b85b8 Binary files /dev/null and b/heimdall/config/www/icons/invoiceninja.png differ diff --git a/heimdall/config/www/icons/iobroker.png b/heimdall/config/www/icons/iobroker.png new file mode 100755 index 0000000..4356aea Binary files /dev/null and b/heimdall/config/www/icons/iobroker.png differ diff --git a/heimdall/config/www/icons/jackett.png b/heimdall/config/www/icons/jackett.png new file mode 100755 index 0000000..fe687a4 Binary files /dev/null and b/heimdall/config/www/icons/jackett.png differ diff --git a/heimdall/config/www/icons/jackett.svg b/heimdall/config/www/icons/jackett.svg new file mode 100755 index 0000000..1ad3f4f --- /dev/null +++ b/heimdall/config/www/icons/jackett.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/jaeger.png b/heimdall/config/www/icons/jaeger.png new file mode 100755 index 0000000..1e17e50 Binary files /dev/null and b/heimdall/config/www/icons/jaeger.png differ diff --git a/heimdall/config/www/icons/jdownloader.png b/heimdall/config/www/icons/jdownloader.png new file mode 100755 index 0000000..4022c97 Binary files /dev/null and b/heimdall/config/www/icons/jdownloader.png differ diff --git a/heimdall/config/www/icons/jeedom.png b/heimdall/config/www/icons/jeedom.png new file mode 100755 index 0000000..358afc0 Binary files /dev/null and b/heimdall/config/www/icons/jeedom.png differ diff --git a/heimdall/config/www/icons/jellyfin.png b/heimdall/config/www/icons/jellyfin.png new file mode 100755 index 0000000..4335d48 Binary files /dev/null and b/heimdall/config/www/icons/jellyfin.png differ diff --git a/heimdall/config/www/icons/jellyfin.svg b/heimdall/config/www/icons/jellyfin.svg new file mode 100755 index 0000000..cf875b2 --- /dev/null +++ b/heimdall/config/www/icons/jellyfin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/jellyseerr.png b/heimdall/config/www/icons/jellyseerr.png new file mode 100755 index 0000000..31a66b3 Binary files /dev/null and b/heimdall/config/www/icons/jellyseerr.png differ diff --git a/heimdall/config/www/icons/jenkins.png b/heimdall/config/www/icons/jenkins.png new file mode 100755 index 0000000..53155f5 Binary files /dev/null and b/heimdall/config/www/icons/jenkins.png differ diff --git a/heimdall/config/www/icons/jira.svg b/heimdall/config/www/icons/jira.svg new file mode 100755 index 0000000..a837bd3 --- /dev/null +++ b/heimdall/config/www/icons/jira.svg @@ -0,0 +1 @@ +jira software-icon-gradient-blue \ No newline at end of file diff --git a/heimdall/config/www/icons/jitsi.png b/heimdall/config/www/icons/jitsi.png new file mode 100755 index 0000000..45724fd Binary files /dev/null and b/heimdall/config/www/icons/jitsi.png differ diff --git a/heimdall/config/www/icons/joomla.png b/heimdall/config/www/icons/joomla.png new file mode 100755 index 0000000..88c743f Binary files /dev/null and b/heimdall/config/www/icons/joomla.png differ diff --git a/heimdall/config/www/icons/jupyter.svg b/heimdall/config/www/icons/jupyter.svg new file mode 100755 index 0000000..f7f0281 --- /dev/null +++ b/heimdall/config/www/icons/jupyter.svg @@ -0,0 +1,226 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Jupyter + + diff --git a/heimdall/config/www/icons/kanboard.png b/heimdall/config/www/icons/kanboard.png new file mode 100755 index 0000000..cc3ca95 Binary files /dev/null and b/heimdall/config/www/icons/kanboard.png differ diff --git a/heimdall/config/www/icons/keycloak.svg b/heimdall/config/www/icons/keycloak.svg new file mode 100755 index 0000000..570bcc1 --- /dev/null +++ b/heimdall/config/www/icons/keycloak.svg @@ -0,0 +1 @@ +keycloak_deliverables \ No newline at end of file diff --git a/heimdall/config/www/icons/kibana.png b/heimdall/config/www/icons/kibana.png new file mode 100755 index 0000000..7732f99 Binary files /dev/null and b/heimdall/config/www/icons/kibana.png differ diff --git a/heimdall/config/www/icons/kimai.png b/heimdall/config/www/icons/kimai.png new file mode 100755 index 0000000..2d80508 Binary files /dev/null and b/heimdall/config/www/icons/kimai.png differ diff --git a/heimdall/config/www/icons/kitana.png b/heimdall/config/www/icons/kitana.png new file mode 100755 index 0000000..12ec88a Binary files /dev/null and b/heimdall/config/www/icons/kitana.png differ diff --git a/heimdall/config/www/icons/kodi.png b/heimdall/config/www/icons/kodi.png new file mode 100755 index 0000000..c88b069 Binary files /dev/null and b/heimdall/config/www/icons/kodi.png differ diff --git a/heimdall/config/www/icons/komga.png b/heimdall/config/www/icons/komga.png new file mode 100755 index 0000000..9b404e7 Binary files /dev/null and b/heimdall/config/www/icons/komga.png differ diff --git a/heimdall/config/www/icons/kopia.png b/heimdall/config/www/icons/kopia.png new file mode 100755 index 0000000..f023f34 Binary files /dev/null and b/heimdall/config/www/icons/kopia.png differ diff --git a/heimdall/config/www/icons/krusader.png b/heimdall/config/www/icons/krusader.png new file mode 100755 index 0000000..66e13c7 Binary files /dev/null and b/heimdall/config/www/icons/krusader.png differ diff --git a/heimdall/config/www/icons/kubernetesdashboard.svg b/heimdall/config/www/icons/kubernetesdashboard.svg new file mode 100755 index 0000000..bedd3b8 --- /dev/null +++ b/heimdall/config/www/icons/kubernetesdashboard.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/heimdall/config/www/icons/lazylibrarian.png b/heimdall/config/www/icons/lazylibrarian.png new file mode 100755 index 0000000..77ff7aa Binary files /dev/null and b/heimdall/config/www/icons/lazylibrarian.png differ diff --git a/heimdall/config/www/icons/lemonldapng.png b/heimdall/config/www/icons/lemonldapng.png new file mode 100755 index 0000000..3d4fd6b Binary files /dev/null and b/heimdall/config/www/icons/lemonldapng.png differ diff --git a/heimdall/config/www/icons/librenms.png b/heimdall/config/www/icons/librenms.png new file mode 100755 index 0000000..6911273 Binary files /dev/null and b/heimdall/config/www/icons/librenms.png differ diff --git a/heimdall/config/www/icons/librespeed.png b/heimdall/config/www/icons/librespeed.png new file mode 100755 index 0000000..814f81c Binary files /dev/null and b/heimdall/config/www/icons/librespeed.png differ diff --git a/heimdall/config/www/icons/lidarr.png b/heimdall/config/www/icons/lidarr.png new file mode 100755 index 0000000..199ca63 Binary files /dev/null and b/heimdall/config/www/icons/lidarr.png differ diff --git a/heimdall/config/www/icons/linkace.png b/heimdall/config/www/icons/linkace.png new file mode 100755 index 0000000..63439a7 Binary files /dev/null and b/heimdall/config/www/icons/linkace.png differ diff --git a/heimdall/config/www/icons/linkace.svg b/heimdall/config/www/icons/linkace.svg new file mode 100755 index 0000000..01d2243 --- /dev/null +++ b/heimdall/config/www/icons/linkace.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/lychee.png b/heimdall/config/www/icons/lychee.png new file mode 100755 index 0000000..121d08e Binary files /dev/null and b/heimdall/config/www/icons/lychee.png differ diff --git a/heimdall/config/www/icons/mailcow.svg b/heimdall/config/www/icons/mailcow.svg new file mode 100755 index 0000000..6ba98e4 --- /dev/null +++ b/heimdall/config/www/icons/mailcow.svg @@ -0,0 +1,182 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/heimdall/config/www/icons/mailcowsogo.svg b/heimdall/config/www/icons/mailcowsogo.svg new file mode 100755 index 0000000..2be4dec --- /dev/null +++ b/heimdall/config/www/icons/mailcowsogo.svg @@ -0,0 +1,3 @@ + + +image/svg+xml \ No newline at end of file diff --git a/heimdall/config/www/icons/mailhog.png b/heimdall/config/www/icons/mailhog.png new file mode 100755 index 0000000..c846729 Binary files /dev/null and b/heimdall/config/www/icons/mailhog.png differ diff --git a/heimdall/config/www/icons/mainsail.png b/heimdall/config/www/icons/mainsail.png new file mode 100755 index 0000000..970ac9d Binary files /dev/null and b/heimdall/config/www/icons/mainsail.png differ diff --git a/heimdall/config/www/icons/mastodon.svg b/heimdall/config/www/icons/mastodon.svg new file mode 100755 index 0000000..3b8451d --- /dev/null +++ b/heimdall/config/www/icons/mastodon.svg @@ -0,0 +1,66 @@ + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/heimdall/config/www/icons/mattermost.png b/heimdall/config/www/icons/mattermost.png new file mode 100755 index 0000000..69078b3 Binary files /dev/null and b/heimdall/config/www/icons/mattermost.png differ diff --git a/heimdall/config/www/icons/mayanedms.png b/heimdall/config/www/icons/mayanedms.png new file mode 100755 index 0000000..1677941 Binary files /dev/null and b/heimdall/config/www/icons/mayanedms.png differ diff --git a/heimdall/config/www/icons/mcmyadmin.png b/heimdall/config/www/icons/mcmyadmin.png new file mode 100755 index 0000000..6693339 Binary files /dev/null and b/heimdall/config/www/icons/mcmyadmin.png differ diff --git a/heimdall/config/www/icons/mealie.png b/heimdall/config/www/icons/mealie.png new file mode 100755 index 0000000..fdfa471 Binary files /dev/null and b/heimdall/config/www/icons/mealie.png differ diff --git a/heimdall/config/www/icons/mediawiki.png b/heimdall/config/www/icons/mediawiki.png new file mode 100755 index 0000000..6172671 Binary files /dev/null and b/heimdall/config/www/icons/mediawiki.png differ diff --git a/heimdall/config/www/icons/medusa.png b/heimdall/config/www/icons/medusa.png new file mode 100755 index 0000000..0dfde2c Binary files /dev/null and b/heimdall/config/www/icons/medusa.png differ diff --git a/heimdall/config/www/icons/meraki.png b/heimdall/config/www/icons/meraki.png new file mode 100755 index 0000000..31008c3 Binary files /dev/null and b/heimdall/config/www/icons/meraki.png differ diff --git a/heimdall/config/www/icons/mineos.png b/heimdall/config/www/icons/mineos.png new file mode 100755 index 0000000..687da5b Binary files /dev/null and b/heimdall/config/www/icons/mineos.png differ diff --git a/heimdall/config/www/icons/miniflux.png b/heimdall/config/www/icons/miniflux.png new file mode 100755 index 0000000..8915982 Binary files /dev/null and b/heimdall/config/www/icons/miniflux.png differ diff --git a/heimdall/config/www/icons/minio.png b/heimdall/config/www/icons/minio.png new file mode 100755 index 0000000..4ac41fc Binary files /dev/null and b/heimdall/config/www/icons/minio.png differ diff --git a/heimdall/config/www/icons/monica.png b/heimdall/config/www/icons/monica.png new file mode 100755 index 0000000..5d3d551 Binary files /dev/null and b/heimdall/config/www/icons/monica.png differ diff --git a/heimdall/config/www/icons/monit.png b/heimdall/config/www/icons/monit.png new file mode 100755 index 0000000..3b04ae8 Binary files /dev/null and b/heimdall/config/www/icons/monit.png differ diff --git a/heimdall/config/www/icons/motioneye.png b/heimdall/config/www/icons/motioneye.png new file mode 100755 index 0000000..b420472 Binary files /dev/null and b/heimdall/config/www/icons/motioneye.png differ diff --git a/heimdall/config/www/icons/musicbrainz.svg b/heimdall/config/www/icons/musicbrainz.svg new file mode 100755 index 0000000..7b6a85b --- /dev/null +++ b/heimdall/config/www/icons/musicbrainz.svg @@ -0,0 +1,146 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/heimdall/config/www/icons/mylar.png b/heimdall/config/www/icons/mylar.png new file mode 100755 index 0000000..96ce51e Binary files /dev/null and b/heimdall/config/www/icons/mylar.png differ diff --git a/heimdall/config/www/icons/n8n.png b/heimdall/config/www/icons/n8n.png new file mode 100755 index 0000000..b9dad93 Binary files /dev/null and b/heimdall/config/www/icons/n8n.png differ diff --git a/heimdall/config/www/icons/navidrome.png b/heimdall/config/www/icons/navidrome.png new file mode 100755 index 0000000..1b8b1a2 Binary files /dev/null and b/heimdall/config/www/icons/navidrome.png differ diff --git a/heimdall/config/www/icons/nessus.png b/heimdall/config/www/icons/nessus.png new file mode 100755 index 0000000..84cb81a Binary files /dev/null and b/heimdall/config/www/icons/nessus.png differ diff --git a/heimdall/config/www/icons/netatmo.png b/heimdall/config/www/icons/netatmo.png new file mode 100755 index 0000000..e8b3ea0 Binary files /dev/null and b/heimdall/config/www/icons/netatmo.png differ diff --git a/heimdall/config/www/icons/netboot.png b/heimdall/config/www/icons/netboot.png new file mode 100755 index 0000000..e818e46 Binary files /dev/null and b/heimdall/config/www/icons/netboot.png differ diff --git a/heimdall/config/www/icons/netbox.png b/heimdall/config/www/icons/netbox.png new file mode 100755 index 0000000..9682d13 Binary files /dev/null and b/heimdall/config/www/icons/netbox.png differ diff --git a/heimdall/config/www/icons/netdata.png b/heimdall/config/www/icons/netdata.png new file mode 100755 index 0000000..297cee5 Binary files /dev/null and b/heimdall/config/www/icons/netdata.png differ diff --git a/heimdall/config/www/icons/netdata.svg b/heimdall/config/www/icons/netdata.svg new file mode 100755 index 0000000..c1d2c8a --- /dev/null +++ b/heimdall/config/www/icons/netdata.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/nextcloud.png b/heimdall/config/www/icons/nextcloud.png new file mode 100755 index 0000000..4c84a3c Binary files /dev/null and b/heimdall/config/www/icons/nextcloud.png differ diff --git a/heimdall/config/www/icons/nextcloud.svg b/heimdall/config/www/icons/nextcloud.svg new file mode 100755 index 0000000..95cf68c --- /dev/null +++ b/heimdall/config/www/icons/nextcloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/nginxproxymanager.png b/heimdall/config/www/icons/nginxproxymanager.png new file mode 100755 index 0000000..7c5b28a Binary files /dev/null and b/heimdall/config/www/icons/nginxproxymanager.png differ diff --git a/heimdall/config/www/icons/nitter.svg b/heimdall/config/www/icons/nitter.svg new file mode 100755 index 0000000..cd9a061 --- /dev/null +++ b/heimdall/config/www/icons/nitter.svg @@ -0,0 +1,56 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/heimdall/config/www/icons/nodered.png b/heimdall/config/www/icons/nodered.png new file mode 100755 index 0000000..4dad86e Binary files /dev/null and b/heimdall/config/www/icons/nodered.png differ diff --git a/heimdall/config/www/icons/nowshowing.png b/heimdall/config/www/icons/nowshowing.png new file mode 100755 index 0000000..06d5c74 Binary files /dev/null and b/heimdall/config/www/icons/nowshowing.png differ diff --git a/heimdall/config/www/icons/nxfilter.png b/heimdall/config/www/icons/nxfilter.png new file mode 100755 index 0000000..eaa26e7 Binary files /dev/null and b/heimdall/config/www/icons/nxfilter.png differ diff --git a/heimdall/config/www/icons/nzbget.png b/heimdall/config/www/icons/nzbget.png new file mode 100755 index 0000000..a44c575 Binary files /dev/null and b/heimdall/config/www/icons/nzbget.png differ diff --git a/heimdall/config/www/icons/nzbhydra.png b/heimdall/config/www/icons/nzbhydra.png new file mode 100755 index 0000000..1a3cd8e Binary files /dev/null and b/heimdall/config/www/icons/nzbhydra.png differ diff --git a/heimdall/config/www/icons/octoprint.png b/heimdall/config/www/icons/octoprint.png new file mode 100755 index 0000000..41f1093 Binary files /dev/null and b/heimdall/config/www/icons/octoprint.png differ diff --git a/heimdall/config/www/icons/ombi.png b/heimdall/config/www/icons/ombi.png new file mode 100755 index 0000000..f0d733c Binary files /dev/null and b/heimdall/config/www/icons/ombi.png differ diff --git a/heimdall/config/www/icons/omnidb.png b/heimdall/config/www/icons/omnidb.png new file mode 100755 index 0000000..2456312 Binary files /dev/null and b/heimdall/config/www/icons/omnidb.png differ diff --git a/heimdall/config/www/icons/onlyoffice.png b/heimdall/config/www/icons/onlyoffice.png new file mode 100755 index 0000000..9d7f463 Binary files /dev/null and b/heimdall/config/www/icons/onlyoffice.png differ diff --git a/heimdall/config/www/icons/openhab.png b/heimdall/config/www/icons/openhab.png new file mode 100755 index 0000000..12031bf Binary files /dev/null and b/heimdall/config/www/icons/openhab.png differ diff --git a/heimdall/config/www/icons/openmaptiler.png b/heimdall/config/www/icons/openmaptiler.png new file mode 100755 index 0000000..ce5d615 Binary files /dev/null and b/heimdall/config/www/icons/openmaptiler.png differ diff --git a/heimdall/config/www/icons/openmediavault.png b/heimdall/config/www/icons/openmediavault.png new file mode 100755 index 0000000..29fa840 Binary files /dev/null and b/heimdall/config/www/icons/openmediavault.png differ diff --git a/heimdall/config/www/icons/openspeedtest.png b/heimdall/config/www/icons/openspeedtest.png new file mode 100755 index 0000000..633c486 Binary files /dev/null and b/heimdall/config/www/icons/openspeedtest.png differ diff --git a/heimdall/config/www/icons/opensprinkler.png b/heimdall/config/www/icons/opensprinkler.png new file mode 100755 index 0000000..555a135 Binary files /dev/null and b/heimdall/config/www/icons/opensprinkler.png differ diff --git a/heimdall/config/www/icons/openwrt.png b/heimdall/config/www/icons/openwrt.png new file mode 100755 index 0000000..5b3bc89 Binary files /dev/null and b/heimdall/config/www/icons/openwrt.png differ diff --git a/heimdall/config/www/icons/opnsense.png b/heimdall/config/www/icons/opnsense.png new file mode 100755 index 0000000..887280e Binary files /dev/null and b/heimdall/config/www/icons/opnsense.png differ diff --git a/heimdall/config/www/icons/oscarr.svg b/heimdall/config/www/icons/oscarr.svg new file mode 100755 index 0000000..ef1e32b --- /dev/null +++ b/heimdall/config/www/icons/oscarr.svg @@ -0,0 +1,38 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + + + diff --git a/heimdall/config/www/icons/osticket.png b/heimdall/config/www/icons/osticket.png new file mode 100755 index 0000000..cc9f77b Binary files /dev/null and b/heimdall/config/www/icons/osticket.png differ diff --git a/heimdall/config/www/icons/overseerr.png b/heimdall/config/www/icons/overseerr.png new file mode 100755 index 0000000..e0f5ed6 Binary files /dev/null and b/heimdall/config/www/icons/overseerr.png differ diff --git a/heimdall/config/www/icons/owncloud.png b/heimdall/config/www/icons/owncloud.png new file mode 100755 index 0000000..a780061 Binary files /dev/null and b/heimdall/config/www/icons/owncloud.png differ diff --git a/heimdall/config/www/icons/ownphotos.png b/heimdall/config/www/icons/ownphotos.png new file mode 100755 index 0000000..1877a78 Binary files /dev/null and b/heimdall/config/www/icons/ownphotos.png differ diff --git a/heimdall/config/www/icons/paloaltonetworks.png b/heimdall/config/www/icons/paloaltonetworks.png new file mode 100755 index 0000000..84c9c77 Binary files /dev/null and b/heimdall/config/www/icons/paloaltonetworks.png differ diff --git a/heimdall/config/www/icons/paperless.png b/heimdall/config/www/icons/paperless.png new file mode 100755 index 0000000..f952800 Binary files /dev/null and b/heimdall/config/www/icons/paperless.png differ diff --git a/heimdall/config/www/icons/paperlessngx.svg b/heimdall/config/www/icons/paperlessngx.svg new file mode 100755 index 0000000..70e711e --- /dev/null +++ b/heimdall/config/www/icons/paperlessngx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/partkeepr.png b/heimdall/config/www/icons/partkeepr.png new file mode 100755 index 0000000..d59dd45 Binary files /dev/null and b/heimdall/config/www/icons/partkeepr.png differ diff --git a/heimdall/config/www/icons/peertube.png b/heimdall/config/www/icons/peertube.png new file mode 100755 index 0000000..4c201d2 Binary files /dev/null and b/heimdall/config/www/icons/peertube.png differ diff --git a/heimdall/config/www/icons/pfsense.svg b/heimdall/config/www/icons/pfsense.svg new file mode 100755 index 0000000..f6d4b47 --- /dev/null +++ b/heimdall/config/www/icons/pfsense.svg @@ -0,0 +1,7 @@ + + +pfSense Logo + + + + \ No newline at end of file diff --git a/heimdall/config/www/icons/pgadmin.png b/heimdall/config/www/icons/pgadmin.png new file mode 100755 index 0000000..da334fe Binary files /dev/null and b/heimdall/config/www/icons/pgadmin.png differ diff --git a/heimdall/config/www/icons/photonix.png b/heimdall/config/www/icons/photonix.png new file mode 100755 index 0000000..1eff863 Binary files /dev/null and b/heimdall/config/www/icons/photonix.png differ diff --git a/heimdall/config/www/icons/photoprism.png b/heimdall/config/www/icons/photoprism.png new file mode 100755 index 0000000..b832557 Binary files /dev/null and b/heimdall/config/www/icons/photoprism.png differ diff --git a/heimdall/config/www/icons/phpipam.jpeg b/heimdall/config/www/icons/phpipam.jpeg new file mode 100755 index 0000000..26f644d Binary files /dev/null and b/heimdall/config/www/icons/phpipam.jpeg differ diff --git a/heimdall/config/www/icons/phpipam.png b/heimdall/config/www/icons/phpipam.png new file mode 100755 index 0000000..9c01fdf Binary files /dev/null and b/heimdall/config/www/icons/phpipam.png differ diff --git a/heimdall/config/www/icons/phpldapadmin.png b/heimdall/config/www/icons/phpldapadmin.png new file mode 100755 index 0000000..a95539e Binary files /dev/null and b/heimdall/config/www/icons/phpldapadmin.png differ diff --git a/heimdall/config/www/icons/phpmyadmin.png b/heimdall/config/www/icons/phpmyadmin.png new file mode 100755 index 0000000..e8672ae Binary files /dev/null and b/heimdall/config/www/icons/phpmyadmin.png differ diff --git a/heimdall/config/www/icons/piaware.png b/heimdall/config/www/icons/piaware.png new file mode 100755 index 0000000..7cfc49e Binary files /dev/null and b/heimdall/config/www/icons/piaware.png differ diff --git a/heimdall/config/www/icons/pihole.png b/heimdall/config/www/icons/pihole.png new file mode 100755 index 0000000..93b6b3c Binary files /dev/null and b/heimdall/config/www/icons/pihole.png differ diff --git a/heimdall/config/www/icons/pivpn.png b/heimdall/config/www/icons/pivpn.png new file mode 100755 index 0000000..af9d396 Binary files /dev/null and b/heimdall/config/www/icons/pivpn.png differ diff --git a/heimdall/config/www/icons/piwigo.png b/heimdall/config/www/icons/piwigo.png new file mode 100755 index 0000000..fe7b4fe Binary files /dev/null and b/heimdall/config/www/icons/piwigo.png differ diff --git a/heimdall/config/www/icons/pleroma.png b/heimdall/config/www/icons/pleroma.png new file mode 100755 index 0000000..1c1db0e Binary files /dev/null and b/heimdall/config/www/icons/pleroma.png differ diff --git a/heimdall/config/www/icons/plesk.png b/heimdall/config/www/icons/plesk.png new file mode 100755 index 0000000..b432186 Binary files /dev/null and b/heimdall/config/www/icons/plesk.png differ diff --git a/heimdall/config/www/icons/plex.png b/heimdall/config/www/icons/plex.png new file mode 100755 index 0000000..08eb2c6 Binary files /dev/null and b/heimdall/config/www/icons/plex.png differ diff --git a/heimdall/config/www/icons/plexrequests.png b/heimdall/config/www/icons/plexrequests.png new file mode 100755 index 0000000..fd431e7 Binary files /dev/null and b/heimdall/config/www/icons/plexrequests.png differ diff --git a/heimdall/config/www/icons/plume.png b/heimdall/config/www/icons/plume.png new file mode 100755 index 0000000..d8946ac Binary files /dev/null and b/heimdall/config/www/icons/plume.png differ diff --git a/heimdall/config/www/icons/portainer.png b/heimdall/config/www/icons/portainer.png new file mode 100755 index 0000000..77eca35 Binary files /dev/null and b/heimdall/config/www/icons/portainer.png differ diff --git a/heimdall/config/www/icons/portainer.svg b/heimdall/config/www/icons/portainer.svg new file mode 100755 index 0000000..b488eb2 --- /dev/null +++ b/heimdall/config/www/icons/portainer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/printer.png b/heimdall/config/www/icons/printer.png new file mode 100755 index 0000000..9cbfba4 Binary files /dev/null and b/heimdall/config/www/icons/printer.png differ diff --git a/heimdall/config/www/icons/privatebin.png b/heimdall/config/www/icons/privatebin.png new file mode 100755 index 0000000..cd4f186 Binary files /dev/null and b/heimdall/config/www/icons/privatebin.png differ diff --git a/heimdall/config/www/icons/projectsend.png b/heimdall/config/www/icons/projectsend.png new file mode 100755 index 0000000..81f4004 Binary files /dev/null and b/heimdall/config/www/icons/projectsend.png differ diff --git a/heimdall/config/www/icons/prometheus.png b/heimdall/config/www/icons/prometheus.png new file mode 100755 index 0000000..2f902cc Binary files /dev/null and b/heimdall/config/www/icons/prometheus.png differ diff --git a/heimdall/config/www/icons/prowlarr.png b/heimdall/config/www/icons/prowlarr.png new file mode 100755 index 0000000..1045c03 Binary files /dev/null and b/heimdall/config/www/icons/prowlarr.png differ diff --git a/heimdall/config/www/icons/proxmox.png b/heimdall/config/www/icons/proxmox.png new file mode 100755 index 0000000..3310ce0 Binary files /dev/null and b/heimdall/config/www/icons/proxmox.png differ diff --git a/heimdall/config/www/icons/proxmox.svg b/heimdall/config/www/icons/proxmox.svg new file mode 100755 index 0000000..a7a9feb --- /dev/null +++ b/heimdall/config/www/icons/proxmox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/prtg.png b/heimdall/config/www/icons/prtg.png new file mode 100755 index 0000000..3dc1690 Binary files /dev/null and b/heimdall/config/www/icons/prtg.png differ diff --git a/heimdall/config/www/icons/psitransfer.png b/heimdall/config/www/icons/psitransfer.png new file mode 100755 index 0000000..3b58b49 Binary files /dev/null and b/heimdall/config/www/icons/psitransfer.png differ diff --git a/heimdall/config/www/icons/pterodactyl.png b/heimdall/config/www/icons/pterodactyl.png new file mode 100755 index 0000000..47c1ba6 Binary files /dev/null and b/heimdall/config/www/icons/pterodactyl.png differ diff --git a/heimdall/config/www/icons/pyload.png b/heimdall/config/www/icons/pyload.png new file mode 100755 index 0000000..33712cc Binary files /dev/null and b/heimdall/config/www/icons/pyload.png differ diff --git a/heimdall/config/www/icons/q65MV7QJQcTwzXvX7wjh8LQOToASxFdSEbWdGUVp.png b/heimdall/config/www/icons/q65MV7QJQcTwzXvX7wjh8LQOToASxFdSEbWdGUVp.png new file mode 100755 index 0000000..1902009 Binary files /dev/null and b/heimdall/config/www/icons/q65MV7QJQcTwzXvX7wjh8LQOToASxFdSEbWdGUVp.png differ diff --git a/heimdall/config/www/icons/qbittorrent.png b/heimdall/config/www/icons/qbittorrent.png new file mode 100755 index 0000000..d85cb60 Binary files /dev/null and b/heimdall/config/www/icons/qbittorrent.png differ diff --git a/heimdall/config/www/icons/qbittorrent.svg b/heimdall/config/www/icons/qbittorrent.svg new file mode 100755 index 0000000..b56bffb --- /dev/null +++ b/heimdall/config/www/icons/qbittorrent.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/qnap.png b/heimdall/config/www/icons/qnap.png new file mode 100755 index 0000000..c7aefdb Binary files /dev/null and b/heimdall/config/www/icons/qnap.png differ diff --git a/heimdall/config/www/icons/r8X1ikRc6hsUsGoY7GeLL7oBb1pqMgau5GKHFy71.png b/heimdall/config/www/icons/r8X1ikRc6hsUsGoY7GeLL7oBb1pqMgau5GKHFy71.png new file mode 100755 index 0000000..38182d2 Binary files /dev/null and b/heimdall/config/www/icons/r8X1ikRc6hsUsGoY7GeLL7oBb1pqMgau5GKHFy71.png differ diff --git a/heimdall/config/www/icons/radarr.png b/heimdall/config/www/icons/radarr.png new file mode 100755 index 0000000..5603d63 Binary files /dev/null and b/heimdall/config/www/icons/radarr.png differ diff --git a/heimdall/config/www/icons/radarr.svg b/heimdall/config/www/icons/radarr.svg new file mode 100755 index 0000000..6d7a2f5 --- /dev/null +++ b/heimdall/config/www/icons/radarr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/rainloop.png b/heimdall/config/www/icons/rainloop.png new file mode 100755 index 0000000..1cb320c Binary files /dev/null and b/heimdall/config/www/icons/rainloop.png differ diff --git a/heimdall/config/www/icons/rancher.png b/heimdall/config/www/icons/rancher.png new file mode 100755 index 0000000..1455e83 Binary files /dev/null and b/heimdall/config/www/icons/rancher.png differ diff --git a/heimdall/config/www/icons/raneto.png b/heimdall/config/www/icons/raneto.png new file mode 100755 index 0000000..2cb676b Binary files /dev/null and b/heimdall/config/www/icons/raneto.png differ diff --git a/heimdall/config/www/icons/rclone.png b/heimdall/config/www/icons/rclone.png new file mode 100755 index 0000000..2060f5c Binary files /dev/null and b/heimdall/config/www/icons/rclone.png differ diff --git a/heimdall/config/www/icons/readarr.png b/heimdall/config/www/icons/readarr.png new file mode 100755 index 0000000..5cfce49 Binary files /dev/null and b/heimdall/config/www/icons/readarr.png differ diff --git a/heimdall/config/www/icons/recalbox.png b/heimdall/config/www/icons/recalbox.png new file mode 100755 index 0000000..9e3e111 Binary files /dev/null and b/heimdall/config/www/icons/recalbox.png differ diff --git a/heimdall/config/www/icons/requestrr.png b/heimdall/config/www/icons/requestrr.png new file mode 100755 index 0000000..5bc1d3a Binary files /dev/null and b/heimdall/config/www/icons/requestrr.png differ diff --git a/heimdall/config/www/icons/resiliosync.png b/heimdall/config/www/icons/resiliosync.png new file mode 100755 index 0000000..1a1c56a Binary files /dev/null and b/heimdall/config/www/icons/resiliosync.png differ diff --git a/heimdall/config/www/icons/riotweb.svg b/heimdall/config/www/icons/riotweb.svg new file mode 100755 index 0000000..d0e0ddd --- /dev/null +++ b/heimdall/config/www/icons/riotweb.svg @@ -0,0 +1,26 @@ + + + + + + + diff --git a/heimdall/config/www/icons/rocketchat.png b/heimdall/config/www/icons/rocketchat.png new file mode 100755 index 0000000..11b8122 Binary files /dev/null and b/heimdall/config/www/icons/rocketchat.png differ diff --git a/heimdall/config/www/icons/rompya.png b/heimdall/config/www/icons/rompya.png new file mode 100755 index 0000000..4e774b6 Binary files /dev/null and b/heimdall/config/www/icons/rompya.png differ diff --git a/heimdall/config/www/icons/roundcube.png b/heimdall/config/www/icons/roundcube.png new file mode 100755 index 0000000..e1ad5a6 Binary files /dev/null and b/heimdall/config/www/icons/roundcube.png differ diff --git a/heimdall/config/www/icons/router.png b/heimdall/config/www/icons/router.png new file mode 100755 index 0000000..4478b5f Binary files /dev/null and b/heimdall/config/www/icons/router.png differ diff --git a/heimdall/config/www/icons/rspamd.png b/heimdall/config/www/icons/rspamd.png new file mode 100755 index 0000000..fcbc8b7 Binary files /dev/null and b/heimdall/config/www/icons/rspamd.png differ diff --git a/heimdall/config/www/icons/rstudioserver.png b/heimdall/config/www/icons/rstudioserver.png new file mode 100755 index 0000000..65b6080 Binary files /dev/null and b/heimdall/config/www/icons/rstudioserver.png differ diff --git a/heimdall/config/www/icons/rundeck.png b/heimdall/config/www/icons/rundeck.png new file mode 100755 index 0000000..739822e Binary files /dev/null and b/heimdall/config/www/icons/rundeck.png differ diff --git a/heimdall/config/www/icons/runeaudio.png b/heimdall/config/www/icons/runeaudio.png new file mode 100755 index 0000000..e5e488e Binary files /dev/null and b/heimdall/config/www/icons/runeaudio.png differ diff --git a/heimdall/config/www/icons/rutorrent.png b/heimdall/config/www/icons/rutorrent.png new file mode 100755 index 0000000..0b52230 Binary files /dev/null and b/heimdall/config/www/icons/rutorrent.png differ diff --git a/heimdall/config/www/icons/sabnzbd.png b/heimdall/config/www/icons/sabnzbd.png new file mode 100755 index 0000000..acf3d27 Binary files /dev/null and b/heimdall/config/www/icons/sabnzbd.png differ diff --git a/heimdall/config/www/icons/seafile.png b/heimdall/config/www/icons/seafile.png new file mode 100755 index 0000000..d491c6e Binary files /dev/null and b/heimdall/config/www/icons/seafile.png differ diff --git a/heimdall/config/www/icons/searxmetasearchengine.png b/heimdall/config/www/icons/searxmetasearchengine.png new file mode 100755 index 0000000..9427900 Binary files /dev/null and b/heimdall/config/www/icons/searxmetasearchengine.png differ diff --git a/heimdall/config/www/icons/serviio.png b/heimdall/config/www/icons/serviio.png new file mode 100755 index 0000000..58e964c Binary files /dev/null and b/heimdall/config/www/icons/serviio.png differ diff --git a/heimdall/config/www/icons/shaarli.png b/heimdall/config/www/icons/shaarli.png new file mode 100755 index 0000000..25e6d43 Binary files /dev/null and b/heimdall/config/www/icons/shaarli.png differ diff --git a/heimdall/config/www/icons/shinobi.png b/heimdall/config/www/icons/shinobi.png new file mode 100755 index 0000000..a1089d0 Binary files /dev/null and b/heimdall/config/www/icons/shinobi.png differ diff --git a/heimdall/config/www/icons/sickbeard.png b/heimdall/config/www/icons/sickbeard.png new file mode 100755 index 0000000..aca2249 Binary files /dev/null and b/heimdall/config/www/icons/sickbeard.png differ diff --git a/heimdall/config/www/icons/sickchill.png b/heimdall/config/www/icons/sickchill.png new file mode 100755 index 0000000..aaeb508 Binary files /dev/null and b/heimdall/config/www/icons/sickchill.png differ diff --git a/heimdall/config/www/icons/sickgear.png b/heimdall/config/www/icons/sickgear.png new file mode 100755 index 0000000..1c2393f Binary files /dev/null and b/heimdall/config/www/icons/sickgear.png differ diff --git a/heimdall/config/www/icons/slack.png b/heimdall/config/www/icons/slack.png new file mode 100755 index 0000000..f0d1af7 Binary files /dev/null and b/heimdall/config/www/icons/slack.png differ diff --git a/heimdall/config/www/icons/snibox.png b/heimdall/config/www/icons/snibox.png new file mode 100755 index 0000000..9844ee2 Binary files /dev/null and b/heimdall/config/www/icons/snibox.png differ diff --git a/heimdall/config/www/icons/sogo.svg b/heimdall/config/www/icons/sogo.svg new file mode 100755 index 0000000..8411e9c --- /dev/null +++ b/heimdall/config/www/icons/sogo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/heimdall/config/www/icons/sonarqube.png b/heimdall/config/www/icons/sonarqube.png new file mode 100755 index 0000000..ab0e40d Binary files /dev/null and b/heimdall/config/www/icons/sonarqube.png differ diff --git a/heimdall/config/www/icons/sonarr.png b/heimdall/config/www/icons/sonarr.png new file mode 100755 index 0000000..33e3446 Binary files /dev/null and b/heimdall/config/www/icons/sonarr.png differ diff --git a/heimdall/config/www/icons/sourcegraph.png b/heimdall/config/www/icons/sourcegraph.png new file mode 100755 index 0000000..e5c68bf Binary files /dev/null and b/heimdall/config/www/icons/sourcegraph.png differ diff --git a/heimdall/config/www/icons/splunk.png b/heimdall/config/www/icons/splunk.png new file mode 100755 index 0000000..33e09f5 Binary files /dev/null and b/heimdall/config/www/icons/splunk.png differ diff --git a/heimdall/config/www/icons/spotweb.png b/heimdall/config/www/icons/spotweb.png new file mode 100755 index 0000000..29d1957 Binary files /dev/null and b/heimdall/config/www/icons/spotweb.png differ diff --git a/heimdall/config/www/icons/squidex.png b/heimdall/config/www/icons/squidex.png new file mode 100755 index 0000000..55546e2 Binary files /dev/null and b/heimdall/config/www/icons/squidex.png differ diff --git a/heimdall/config/www/icons/stash.png b/heimdall/config/www/icons/stash.png new file mode 100755 index 0000000..6ff0465 Binary files /dev/null and b/heimdall/config/www/icons/stash.png differ diff --git a/heimdall/config/www/icons/statping.png b/heimdall/config/www/icons/statping.png new file mode 100755 index 0000000..6497a68 Binary files /dev/null and b/heimdall/config/www/icons/statping.png differ diff --git a/heimdall/config/www/icons/stirlingpdf.svg b/heimdall/config/www/icons/stirlingpdf.svg new file mode 100755 index 0000000..2de1840 --- /dev/null +++ b/heimdall/config/www/icons/stirlingpdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/strapi.png b/heimdall/config/www/icons/strapi.png new file mode 100755 index 0000000..0560716 Binary files /dev/null and b/heimdall/config/www/icons/strapi.png differ diff --git a/heimdall/config/www/icons/streama.png b/heimdall/config/www/icons/streama.png new file mode 100755 index 0000000..19a70a4 Binary files /dev/null and b/heimdall/config/www/icons/streama.png differ diff --git a/heimdall/config/www/icons/sympa.svg b/heimdall/config/www/icons/sympa.svg new file mode 100755 index 0000000..d11760a --- /dev/null +++ b/heimdall/config/www/icons/sympa.svg @@ -0,0 +1,463 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/heimdall/config/www/icons/synclounge.png b/heimdall/config/www/icons/synclounge.png new file mode 100755 index 0000000..e78c34f Binary files /dev/null and b/heimdall/config/www/icons/synclounge.png differ diff --git a/heimdall/config/www/icons/syncthing.png b/heimdall/config/www/icons/syncthing.png new file mode 100755 index 0000000..0f0f9e9 Binary files /dev/null and b/heimdall/config/www/icons/syncthing.png differ diff --git a/heimdall/config/www/icons/synology.png b/heimdall/config/www/icons/synology.png new file mode 100755 index 0000000..53b23d3 Binary files /dev/null and b/heimdall/config/www/icons/synology.png differ diff --git a/heimdall/config/www/icons/taiga.png b/heimdall/config/www/icons/taiga.png new file mode 100755 index 0000000..c28e86a Binary files /dev/null and b/heimdall/config/www/icons/taiga.png differ diff --git a/heimdall/config/www/icons/tandoorrecipes.png b/heimdall/config/www/icons/tandoorrecipes.png new file mode 100755 index 0000000..3208e45 Binary files /dev/null and b/heimdall/config/www/icons/tandoorrecipes.png differ diff --git a/heimdall/config/www/icons/tar1090.png b/heimdall/config/www/icons/tar1090.png new file mode 100755 index 0000000..bc06392 Binary files /dev/null and b/heimdall/config/www/icons/tar1090.png differ diff --git a/heimdall/config/www/icons/tasmoadmin.png b/heimdall/config/www/icons/tasmoadmin.png new file mode 100755 index 0000000..26db0c9 Binary files /dev/null and b/heimdall/config/www/icons/tasmoadmin.png differ diff --git a/heimdall/config/www/icons/tasmota.png b/heimdall/config/www/icons/tasmota.png new file mode 100755 index 0000000..49739fe Binary files /dev/null and b/heimdall/config/www/icons/tasmota.png differ diff --git a/heimdall/config/www/icons/tautulli.png b/heimdall/config/www/icons/tautulli.png new file mode 100755 index 0000000..439704b Binary files /dev/null and b/heimdall/config/www/icons/tautulli.png differ diff --git a/heimdall/config/www/icons/tdarr.png b/heimdall/config/www/icons/tdarr.png new file mode 100755 index 0000000..71e8804 Binary files /dev/null and b/heimdall/config/www/icons/tdarr.png differ diff --git a/heimdall/config/www/icons/teedy.png b/heimdall/config/www/icons/teedy.png new file mode 100755 index 0000000..c9a9ca3 Binary files /dev/null and b/heimdall/config/www/icons/teedy.png differ diff --git a/heimdall/config/www/icons/thelounge.png b/heimdall/config/www/icons/thelounge.png new file mode 100755 index 0000000..5c05d50 Binary files /dev/null and b/heimdall/config/www/icons/thelounge.png differ diff --git a/heimdall/config/www/icons/tinytinyrss.png b/heimdall/config/www/icons/tinytinyrss.png new file mode 100755 index 0000000..36fc8d6 Binary files /dev/null and b/heimdall/config/www/icons/tinytinyrss.png differ diff --git a/heimdall/config/www/icons/traccar.png b/heimdall/config/www/icons/traccar.png new file mode 100755 index 0000000..98b53dc Binary files /dev/null and b/heimdall/config/www/icons/traccar.png differ diff --git a/heimdall/config/www/icons/traefik.png b/heimdall/config/www/icons/traefik.png new file mode 100755 index 0000000..45438b3 Binary files /dev/null and b/heimdall/config/www/icons/traefik.png differ diff --git a/heimdall/config/www/icons/transmission.png b/heimdall/config/www/icons/transmission.png new file mode 100755 index 0000000..f24d9e3 Binary files /dev/null and b/heimdall/config/www/icons/transmission.png differ diff --git a/heimdall/config/www/icons/transmission.svg b/heimdall/config/www/icons/transmission.svg new file mode 100755 index 0000000..955f3e3 --- /dev/null +++ b/heimdall/config/www/icons/transmission.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/trilium.png b/heimdall/config/www/icons/trilium.png new file mode 100755 index 0000000..927755f Binary files /dev/null and b/heimdall/config/www/icons/trilium.png differ diff --git a/heimdall/config/www/icons/truenas.png b/heimdall/config/www/icons/truenas.png new file mode 100755 index 0000000..1ea9216 Binary files /dev/null and b/heimdall/config/www/icons/truenas.png differ diff --git a/heimdall/config/www/icons/truenascore.png b/heimdall/config/www/icons/truenascore.png new file mode 100755 index 0000000..6ead508 Binary files /dev/null and b/heimdall/config/www/icons/truenascore.png differ diff --git a/heimdall/config/www/icons/tvheadend.png b/heimdall/config/www/icons/tvheadend.png new file mode 100755 index 0000000..e118ff2 Binary files /dev/null and b/heimdall/config/www/icons/tvheadend.png differ diff --git a/heimdall/config/www/icons/typo3.svg b/heimdall/config/www/icons/typo3.svg new file mode 100755 index 0000000..8aa7472 --- /dev/null +++ b/heimdall/config/www/icons/typo3.svg @@ -0,0 +1,77 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/heimdall/config/www/icons/ubooquity.png b/heimdall/config/www/icons/ubooquity.png new file mode 100755 index 0000000..cf37a87 Binary files /dev/null and b/heimdall/config/www/icons/ubooquity.png differ diff --git a/heimdall/config/www/icons/unifi.png b/heimdall/config/www/icons/unifi.png new file mode 100755 index 0000000..7eaa608 Binary files /dev/null and b/heimdall/config/www/icons/unifi.png differ diff --git a/heimdall/config/www/icons/unraid.png b/heimdall/config/www/icons/unraid.png new file mode 100755 index 0000000..c9f2244 Binary files /dev/null and b/heimdall/config/www/icons/unraid.png differ diff --git a/heimdall/config/www/icons/uptimekuma.svg b/heimdall/config/www/icons/uptimekuma.svg new file mode 100755 index 0000000..9bfa082 --- /dev/null +++ b/heimdall/config/www/icons/uptimekuma.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/urbackup.png b/heimdall/config/www/icons/urbackup.png new file mode 100755 index 0000000..ffcbf5a Binary files /dev/null and b/heimdall/config/www/icons/urbackup.png differ diff --git a/heimdall/config/www/icons/vimbadmin.jpeg b/heimdall/config/www/icons/vimbadmin.jpeg new file mode 100755 index 0000000..e3b5556 Binary files /dev/null and b/heimdall/config/www/icons/vimbadmin.jpeg differ diff --git a/heimdall/config/www/icons/virtualmin.svg b/heimdall/config/www/icons/virtualmin.svg new file mode 100755 index 0000000..6e9268e --- /dev/null +++ b/heimdall/config/www/icons/virtualmin.svg @@ -0,0 +1,152 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/heimdall/config/www/icons/virtualradarserver.png b/heimdall/config/www/icons/virtualradarserver.png new file mode 100755 index 0000000..eb97eb7 Binary files /dev/null and b/heimdall/config/www/icons/virtualradarserver.png differ diff --git a/heimdall/config/www/icons/vmwareesxi.png b/heimdall/config/www/icons/vmwareesxi.png new file mode 100755 index 0000000..e424995 Binary files /dev/null and b/heimdall/config/www/icons/vmwareesxi.png differ diff --git a/heimdall/config/www/icons/vmwarehorizon.png b/heimdall/config/www/icons/vmwarehorizon.png new file mode 100755 index 0000000..a0548b6 Binary files /dev/null and b/heimdall/config/www/icons/vmwarehorizon.png differ diff --git a/heimdall/config/www/icons/vmwarevcenter.png b/heimdall/config/www/icons/vmwarevcenter.png new file mode 100755 index 0000000..583642a Binary files /dev/null and b/heimdall/config/www/icons/vmwarevcenter.png differ diff --git a/heimdall/config/www/icons/volumio.png b/heimdall/config/www/icons/volumio.png new file mode 100755 index 0000000..4710107 Binary files /dev/null and b/heimdall/config/www/icons/volumio.png differ diff --git a/heimdall/config/www/icons/vpUvMvc5QsrMultnGxAX5mAPJ5mH7oZpD7RIKF3V.png b/heimdall/config/www/icons/vpUvMvc5QsrMultnGxAX5mAPJ5mH7oZpD7RIKF3V.png new file mode 100755 index 0000000..10150bc Binary files /dev/null and b/heimdall/config/www/icons/vpUvMvc5QsrMultnGxAX5mAPJ5mH7oZpD7RIKF3V.png differ diff --git a/heimdall/config/www/icons/vuplus.png b/heimdall/config/www/icons/vuplus.png new file mode 100755 index 0000000..0a9906a Binary files /dev/null and b/heimdall/config/www/icons/vuplus.png differ diff --git a/heimdall/config/www/icons/wallabag.png b/heimdall/config/www/icons/wallabag.png new file mode 100755 index 0000000..65dc607 Binary files /dev/null and b/heimdall/config/www/icons/wallabag.png differ diff --git a/heimdall/config/www/icons/wanikani.png b/heimdall/config/www/icons/wanikani.png new file mode 100755 index 0000000..46f6c13 Binary files /dev/null and b/heimdall/config/www/icons/wanikani.png differ diff --git a/heimdall/config/www/icons/watcher.png b/heimdall/config/www/icons/watcher.png new file mode 100755 index 0000000..a8956cc Binary files /dev/null and b/heimdall/config/www/icons/watcher.png differ diff --git a/heimdall/config/www/icons/watchyourlan.png b/heimdall/config/www/icons/watchyourlan.png new file mode 100755 index 0000000..cf3e682 Binary files /dev/null and b/heimdall/config/www/icons/watchyourlan.png differ diff --git a/heimdall/config/www/icons/webmin.svg b/heimdall/config/www/icons/webmin.svg new file mode 100755 index 0000000..08dfc4e --- /dev/null +++ b/heimdall/config/www/icons/webmin.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/heimdall/config/www/icons/webtools.png b/heimdall/config/www/icons/webtools.png new file mode 100755 index 0000000..25f6527 Binary files /dev/null and b/heimdall/config/www/icons/webtools.png differ diff --git a/heimdall/config/www/icons/wekan.png b/heimdall/config/www/icons/wekan.png new file mode 100755 index 0000000..ee96df0 Binary files /dev/null and b/heimdall/config/www/icons/wekan.png differ diff --git a/heimdall/config/www/icons/wetty.png b/heimdall/config/www/icons/wetty.png new file mode 100755 index 0000000..554aa49 Binary files /dev/null and b/heimdall/config/www/icons/wetty.png differ diff --git a/heimdall/config/www/icons/wggenweb.png b/heimdall/config/www/icons/wggenweb.png new file mode 100755 index 0000000..d23d0e7 Binary files /dev/null and b/heimdall/config/www/icons/wggenweb.png differ diff --git a/heimdall/config/www/icons/wikijs.png b/heimdall/config/www/icons/wikijs.png new file mode 100755 index 0000000..261c157 Binary files /dev/null and b/heimdall/config/www/icons/wikijs.png differ diff --git a/heimdall/config/www/icons/wireguard.png b/heimdall/config/www/icons/wireguard.png new file mode 100755 index 0000000..3ef3846 Binary files /dev/null and b/heimdall/config/www/icons/wireguard.png differ diff --git a/heimdall/config/www/icons/wordpress.png b/heimdall/config/www/icons/wordpress.png new file mode 100755 index 0000000..dc129ab Binary files /dev/null and b/heimdall/config/www/icons/wordpress.png differ diff --git a/heimdall/config/www/icons/wordpress.svg b/heimdall/config/www/icons/wordpress.svg new file mode 100755 index 0000000..a162e31 --- /dev/null +++ b/heimdall/config/www/icons/wordpress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/heimdall/config/www/icons/xenorchestra.png b/heimdall/config/www/icons/xenorchestra.png new file mode 100755 index 0000000..a3f5ce3 Binary files /dev/null and b/heimdall/config/www/icons/xenorchestra.png differ diff --git a/heimdall/config/www/icons/xigmanas.png b/heimdall/config/www/icons/xigmanas.png new file mode 100755 index 0000000..7874f03 Binary files /dev/null and b/heimdall/config/www/icons/xigmanas.png differ diff --git a/heimdall/config/www/icons/xteve.png b/heimdall/config/www/icons/xteve.png new file mode 100755 index 0000000..e8db599 Binary files /dev/null and b/heimdall/config/www/icons/xteve.png differ diff --git a/heimdall/config/www/icons/xwiki.png b/heimdall/config/www/icons/xwiki.png new file mode 100755 index 0000000..30786e5 Binary files /dev/null and b/heimdall/config/www/icons/xwiki.png differ diff --git a/heimdall/config/www/icons/ynab.png b/heimdall/config/www/icons/ynab.png new file mode 100755 index 0000000..6347b89 Binary files /dev/null and b/heimdall/config/www/icons/ynab.png differ diff --git a/heimdall/config/www/icons/youtubedl.png b/heimdall/config/www/icons/youtubedl.png new file mode 100755 index 0000000..96df033 Binary files /dev/null and b/heimdall/config/www/icons/youtubedl.png differ diff --git a/heimdall/config/www/icons/zabbix.png b/heimdall/config/www/icons/zabbix.png new file mode 100755 index 0000000..6378425 Binary files /dev/null and b/heimdall/config/www/icons/zabbix.png differ diff --git a/heimdall/config/www/icons/zammad.svg b/heimdall/config/www/icons/zammad.svg new file mode 100755 index 0000000..0685eb7 --- /dev/null +++ b/heimdall/config/www/icons/zammad.svg @@ -0,0 +1,30 @@ + + + + logo + Created with Sketch. + + + + + \ No newline at end of file diff --git a/heimdall/config/www/icons/znc.png b/heimdall/config/www/icons/znc.png new file mode 100755 index 0000000..ae06f47 Binary files /dev/null and b/heimdall/config/www/icons/znc.png differ diff --git a/heimdall/config/www/icons/zoneminder.png b/heimdall/config/www/icons/zoneminder.png new file mode 100755 index 0000000..0524140 Binary files /dev/null and b/heimdall/config/www/icons/zoneminder.png differ diff --git a/heimdall/config/www/icons/zulip.png b/heimdall/config/www/icons/zulip.png new file mode 100755 index 0000000..09835b8 Binary files /dev/null and b/heimdall/config/www/icons/zulip.png differ diff --git a/heimdall/config/www/index.html b/heimdall/config/www/index.html new file mode 100755 index 0000000..8351def --- /dev/null +++ b/heimdall/config/www/index.html @@ -0,0 +1,34 @@ + + + Welcome to our server + + + +
+

Welcome to our server

+

The website is currently being setup under this address.

+

For help and support, please contact: me@example.com

+
+ + diff --git a/heimdall/config/www/searchproviders.yaml b/heimdall/config/www/searchproviders.yaml new file mode 100755 index 0000000..bbb13d6 --- /dev/null +++ b/heimdall/config/www/searchproviders.yaml @@ -0,0 +1,44 @@ +tiles: + id: tiles + name: Tiles + target: _blank + +baidu: + id: baidu + url: https://www.baidu.com/s + name: Baidu + method: get + target: _blank + query: wd + +bing: + id: bing + url: https://www.bing.com/search + name: Bing + method: get + target: _blank + query: q + +ddg: + id: ddg + url: https://duckduckgo.com/ + name: DuckDuckGo + method: get + target: _blank + query: q + +google: + id: google + url: https://www.google.com/search + name: Google + method: get + target: _blank + query: q + +startpage: + id: startpage + url: https://www.startpage.com/do/dsearch + name: Startpage + method: get + target: _blank + query: query diff --git a/heimdall/docker-compose.yaml b/heimdall/docker-compose.yaml new file mode 100644 index 0000000..a72bbe8 --- /dev/null +++ b/heimdall/docker-compose.yaml @@ -0,0 +1,16 @@ +--- +#version: "2.1" +services: + heimdall: + image: lscr.io/linuxserver/heimdall:latest + container_name: heimdall + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Paris + volumes: + - ./config:/config + ports: + - 8002:80 + - 7843:443 + restart: unless-stopped