Custom Apps - Python

pknw1/notflix_adduser:sso-v5.5



/home/apps/frontend/sso-registration

 

name: frontend
services:
  sso-registration:
    image: pknw1/notflix_adduser:sso-v5.5
    container_name: sso-registration
    hostname: sso-registration
    ports:
      - 172.22.20.1:3334:3334
    environment:
      - VIRTUAL_HOST=notflix.pknw1.co.uk,containers.notflix.pknw1.co.uk,containers.pknw1.co.uk,signup.notflix.pknw1.co.uk
      - VIRTUAL_PORT=3334
      - TZ=Europe/Paris
    networks:
      - proxy
    volumes:
      - ./config:/config
      - ./logs:/logs
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/localtime:/etc/localtime:ro
    restart: unless-stopped

networks:
  proxy:
    external: true
config/
signup.ini
; signup.ini


[DEFAULT]
[cookies]
enabled = false
key = 5crxnvCUG768Kwm08MwSt7-cM_J3UvPFUjo6kp-Qm7w=



[index]
enabled = false
Create New User = /register
More Info = https://info.notflix.pknw1.co.uk
Apps for Users = https://apps.notflix.pknw1.co.uk
Apps for Admin = https://apps.admin.pknw1.co.uk
OnDemand Apps = /containers/status
Status = https://status.pknw1.co.uk


[index_static_content]
enabled = false
title = Notflix Registration
text = Registration and Info Options : Choose a topic below


[sso_register]
enabled = false
ldap_Server = ldap://172.22.20.1:3890
base_dn = dc=pknw1,dc=co,dc=uk
ldap_cn = api_register_sso
ldap_password = 4as3bpni3qupbteth5kxjpz4bephdtho

[notflix]
enabled = true
url = http://jellyseerr-admin:8056/user/invite
title = Add Notflix & Requests accounts
api_key = 
api_data = {"code": "DATA_CODE", "email": "DATA_EMAIL", "username": "DATA_USERNAME", "password": "DATA_PASSWORD"}
select = Notflix

[filebrowser]
enabled = false
title = Add Download Account
url = https://fb.pknw1.co.uk/api/users
api_key = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiIiLCJuYW1lIjoiYWRkdXNlciIsImNyZWF0ZWRBdCI6MTc1MDEwMDUyMiwiZXhwaXJlc0F0Ijo0MzM5NTA4NTIyLCJiZWxvbmdzVG8iOjIsIlBlcm1pc3Npb25zIjp7ImFwaSI6dHJ1ZSwiYWRtaW4iOnRydWUsIm1vZGlmeSI6dHJ1ZSwic2hhcmUiOnRydWUsInJlYWx0aW1lIjpmYWxzZX19.MXfAGHi2N0HGdqAfPG1cq0HV9JW2i9iLWjbfmekrnZ0
api_data = {"what":"user","which":[],"data":{"stickySidebar":true,"darkMode":true,"locale":"en","viewMode":"normal","singleClick":false,"showHidden":false,"dateFormat":false,"gallerySize":3,"themeColor":"var(--blue)","quickDownload":false,"disableOnlyOfficeExt":".txt .csv .html .pdf","disableOfficePreviewExt":"","lockPassword":false,"preview":{"highQuality":true,"image":true,"video":true,"motionVideoPreview":false,"office":false,"popup":true},"permissions":{"api":false,"admin":false,"modify":false,"share":true,"realtime":false},"loginMethod":"password","password":"DATA_PASSWORD","scopes":[{"path":"/srv","name":"srv","config":{"indexingInterval":0,"disabled":false,"maxWatchers":0,"neverWatchPaths":null,"ignoreHidden":false,"ignoreZeroSizeFolders":false,"exclude":{"files":null,"folders":null,"fileEndsWith":null},"include":{"files":null,"folders":null,"fileEndsWith":null},"defaultUserScope":"/","defaultEnabled":true,"createUserDir":false}}],"username":"DATA_USERNAME"}}


[youtube]
enabled = false
url_get = https://proxymanager.admin.pknw1.co.uk/api/nginx/access-lists/4?expand=items
url_auth  = https://proxymanager.admin.pknw1.co.uk/api/tokens 
update_url = https://proxymanager.admin.pknw1.co.uk/api/nginx/access-lists/4
url = https://proxymanager.admin.pknw1.co.uk/api
admin_user = pkswansea@outlook.com
admin_password = !C0nduit77
api_data = { "name": "Updated YTPTube Accesss", "satisfy_any": True, "items": new_items }
title = 

[reddit]
enabled = false
client_id = 3k1mUiepgz-wP7a6d_4zZQ
client_Secret = RZzw-OIqSqCmGJWMAMOi6jM8u2xg9g
reddit_admin = OkBrilliant8092
reddit_password = !C0nduit77
subreddit = pknw1
title = Access r/pknw1 private Subreddit 
api_key = 01792421475

[ntfy]
enabled = false
api_key = tk_seujdzke7j0jwrfy97g1qydtzp1ux
url = https://ntfy.sh/
apps.ini
[DEFAULT]
api_key = 020668000
logs_folder = logs/
auto_refresh = 10
app_port = 5000
redirect_url = https://watch.notflix.pknw1.co.uk
about1 = available routes
about2 = 
about3 = /check			- periodic check for over-running services
about4 = /service/service.fqdn 	- start paused service



[apps.notflix.pknw1.co.uk]
monitoringStatus = true
internal_proxy = true
containerNames = ["iso-user-dashboard"]
monitorLog = logs/proxymanager/proxy-host-*_access.log
monitorUrl = apps.notflix.pknw1.co.uk
idleTime = 5
countdown = 10
currentStatus = running
lastUpdate = 2025-08-21 23:14:39
lastChecked = 2025-08-20T13:00:00

[fb.notflix.pknw1.co.uk]
monitoringStatus = false
internal_proxy = false
containerNames = ["filebrowser2"]
monitorLog = logs/proxymanager/proxy-host-88_access.log
monitorUrl = fb.notflix.pknw1.co.uk
idleTime = 1
countdown = 10
currentStatus = running
lastUpdate = 2025-08-21 23:14:39
lastChecked = 2025-08-20T13:00:00


[info.notflix.pknw1.co.uk]
monitoringStatus = true
internal_proxy = true
containerNames = ["iso-info-dashboard"]
monitorLog = logs/proxymanager/proxy-host-77_access.log
monitorUrl = info.notflix.pknw1.co.uk
idleTime = 5
countdown = 10
currentStatus = stopped
lastUpdate = 2025-08-21 23:00:46
lastChecked = 2025-08-20T13:00:00

[bookstack.notflix.pknw1.co.uk]
monitoringStatus = true
internal_proxy = true
containerNames = ["bookstack","bookstack-mysql"]
monitorLog = logs/proxymanager/proxy-host-77_access.log
monitorUrl = bookstack.notflix.pknw1.co.uk
idleTime = 5
countdown = 25
currentStatus = stopped
lastUpdate = 2025-08-21 23:00:46
lastChecked = 2025-08-20T13:00:00

[vue.notflix.pknw1.co.uk]
monitoringStatus = true
internal_proxy = true
containerNames = ["jellyfin_vue"]
monitorLog = logs/proxymanager/proxy-host-43_access.log
monitorUrl = vue.notflix.pknw1.co.uk
idleTime = 30
countdown = 10
currentStatus = stopped
lastUpdate = 2025-08-21 23:00:46
lastChecked = 2025-08-20T13:00:00

[requests.notflix.pknw1.co.uk]
monitoringStatus = true
internal_proxy = true
containerNames = ["jellyseerr"]
monitorLog = logs/proxymanager/proxy-host-77_access.log
monitorUrl = requests.notflix.pknw1.co.uk
idleTime = 15
countdown = 25
currentStatus = stopped
lastUpdate = 2025-08-21 23:00:46
lastChecked = 2025-08-20T13:00:00

[metube.notflix.pknw1.co.uk]
monitoringStatus = true
internal_proxy = false
containerNames = ["metube"]
monitorLog = logs/proxymanager/proxy-host-80_access.log
monitorUrl = metube.notflix.pknw1.co.uk
idleTime = 30
countdown = 15
currentStatus = stopped
lastUpdate = 2025-08-21 23:00:46
lastChecked = 2025-08-20T13:00:00

[portainer.admin.pknw1.co.uk]
monitoringStatus = true
internal_proxy = true
containerNames = ["portainer"]
monitorLog = logs/proxymanager-admin/proxy-host-3_access.log
monitorUrl = portainer.admin.pknw1.co.uk
idleTime = 20
countdown = 10
currentStatus = stopped
lastUpdate = 2025-08-21 23:00:46
lastChecked = 2025-08-20T13:00:00

[glances.admin.pknw1.co.uk]
monitoringStatus = true
internal_proxy = true
containerNames = ["glances"]
monitorLog = logs/proxymanager-admin/proxy-host-3_access.log
monitorUrl = glances.admin.pknw1.co.uk
idleTime = 30
countdown = 20
currentStatus = running
lastUpdate = 2025-08-21 23:03:42
lastChecked = 2025-08-20T13:00:00

[caddyui.admin.pknw1.co.uk]
monitoringStatus = true
internal_proxy = false
containerNames = ["caddyui-mongodb","caddyui-frontend","caddyui-backend"]
monitorLog = logs/proxymanager-admin/proxy-host-3_access.log
monitorUrl = caddyui.admin.pknw1.co.uk
idleTime = 30
countdown = 20
currentStatus = running
lastUpdate = 2025-08-21 23:03:42
lastChecked = 2025-08-20T13:00:00

[vault.pknw1.co.uk]
monitoringStatus = true
internal_proxy = false
containerNames = ["aliasvault-smtp","aliasvault-reverse-proxy","aliasvault-task-runner","aliasvault-admin","aliasvault-api","aliasvault-postgres","aliasvault-client"]
monitorLog = logs/proxymanager/proxy-host-82_access.log
monitorUrl = vault.pknw1.co.uk
idleTime = 120
countdown = 45
currentStatus = stopped
lastUpdate = 2025-08-21 23:00:46
lastChecked = 2025-08-20T13:00:00

 

 

development

dev tree
├── Dockerfile
├── README.md
├── REMOVE_RESULT
├── RESULT
├── assets
│   ├── animate.css
│   ├── bootstrap-grid.min.css
│   ├── bootstrap-reboot.min.css
│   ├── bootstrap.bundle.min.js
│   ├── bootstrap.min.css
│   ├── css.css
│   ├── error-background.png
│   ├── ezgif-2cb022df995c2e.png
│   ├── google-analytics_analytics.js
│   ├── index.js
│   ├── jarallax.css
│   ├── jarallax.js
│   ├── mbr-additional.css
│   ├── mobirise2.css
│   ├── navbar-dropdown.js
│   ├── notflix-logo-telegram-128x72.png
│   ├── script.js
│   ├── smooth-scroll.js
│   ├── squid-background.png
│   ├── style.css
│   ├── style_002.css
│   ├── style_003.css
│   └── styles.css
├── build.sh
├── config
│   ├── adduser.log
│   ├── apps.ini
│   ├── config.txt
│   ├── config.txt.example
│   ├── images
│   │   ├── logo.png
│   │   ├── poster.gif
│   │   └── poster.png
│   └── signup.ini
├── create_files
│   ├── animate.css
│   ├── bootstrap-grid.min.css
│   ├── bootstrap-reboot.min.css
│   ├── bootstrap.bundle.min.js
│   ├── bootstrap.min.css
│   ├── css.css
│   ├── error-background.png
│   ├── ezgif-2cb022df995c2e.png
│   ├── google-analytics_analytics.js
│   ├── index.js
│   ├── jarallax.css
│   ├── jarallax.js
│   ├── mbr-additional.css
│   ├── mobirise2.css
│   ├── navbar-dropdown.js
│   ├── notflix-logo-telegram-128x72.png
│   ├── script.js
│   ├── smooth-scroll.js
│   ├── squid-background.png
│   ├── style.css
│   ├── style_002.css
│   ├── style_003.css
│   └── styles.css
├── docker-compose.yml
├── lib
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-310.pyc
│   │   ├── __init__.cpython-312.pyc
│   │   ├── autoshutdown.cpython-312.pyc
│   │   ├── cookies.cpython-310.pyc
│   │   ├── cookies.cpython-312.pyc
│   │   ├── filebrowser.cpython-310.pyc
│   │   ├── filebrowser.cpython-312.pyc
│   │   ├── jfaadmin.cpython-310.pyc
│   │   ├── jfaadmin.cpython-312.pyc
│   │   ├── ldap_account.cpython-312.pyc
│   │   ├── ldap_authenticate.cpython-312.pyc
│   │   ├── ldap_register.cpython-312.pyc
│   │   ├── ntfy.cpython-310.pyc
│   │   ├── ntfy.cpython-312.pyc
│   │   ├── reddit_adduser.cpython-312.pyc
│   │   ├── reddit_api.cpython-310.pyc
│   │   ├── reddit_api.cpython-312.pyc
│   │   ├── reddit_subreddit.cpython-312.pyc
│   │   ├── register.cpython-312.pyc
│   │   ├── sonarr_schedule.cpython-312.pyc
│   │   ├── static.cpython-312.pyc
│   │   ├── subreddit.cpython-310.pyc
│   │   └── subreddit.cpython-312.pyc
│   ├── autoshutdown.py
│   ├── cookies.py
│   ├── filebrowser.py
│   ├── jellyfin.py
│   ├── jfaadmin.py
│   ├── ldap_authenticate.py
│   ├── ldap_register.py
│   ├── logout.py
│   ├── nginx_proxy_manager.py
│   ├── ntfy.py
│   ├── reddit_api.py
│   ├── reddit_subreddit.py
│   ├── sonarr_schedule.py
│   ├── static.py
│   └── subreddit.py
├── logs
│   ├── proxymanager -> /home/apps/core/proxymanager/config/data/logs
│   └── proxymanager-admin -> /home/apps/core/proxymanager-admin/config/data/logs
├── middle.py
├── notflix_adduser_service.py
├── npm.ini
├── npm.py
├── npm.sh
├── on-boarding_files
│   ├── amazon-fire-tv-stick-2044516823-1000x600.jpg
│   ├── animate.css
│   ├── bjllgl5iba8y-3307632018-400x62.png
│   ├── bjllgl5iba8y-3307632019-400x62.png
│   ├── bootstrap-grid.min.css
│   ├── bootstrap-reboot.min.css
│   ├── bootstrap.bundle.min.js
│   ├── bootstrap.min.css
│   ├── css.css
│   ├── ezgif-2cb022df995c2e.gif
│   ├── google-analytics_analytics.js
│   ├── index.js
│   ├── jarallax.css
│   ├── jarallax.js
│   ├── mbr-additional.css
│   ├── mbr-switch-arrow.js
│   ├── menu.gif
│   ├── mobirise-icons-bold.css
│   ├── mobirise-mobiles-4-482x757.png
│   ├── mobirise2.css
│   ├── navbar-dropdown.js
│   ├── netflix-background.jpg
│   ├── notflix-jellyfin-1256x573.png
│   ├── notflix-logo-telegram-128x72.png
│   ├── script.js
│   ├── smooth-scroll.js
│   ├── style.css
│   ├── style_002.css
│   ├── style_003.css
│   └── styles.css
├── refactor1.py
├── refactor2.py
├── refactor3.py
├── requirements.txt
├── templates
│   ├── 404.html
│   ├── add_user.html
│   ├── add_user_webhook.html
│   ├── authenticate.html
│   ├── autoshutdown.html
│   ├── check.html
│   ├── coming_soon.html
│   ├── create.html
│   ├── error.html
│   ├── error2.html
│   ├── error3.html
│   ├── ldap_login.html
│   ├── ldap_logout.html
│   ├── ldap_success.html
│   ├── main_menu.html
│   ├── message.html
│   ├── redirect.html
│   ├── register.html
│   ├── squid.html
│   ├── success.html
│   ├── tvshows.html
│   └── webhook_form.html
└── test.py

 

/etc/pknw1/dev/reddit-automation/notflix_useradd_multiapps
root files

 

lib files

 

 

@app.routes

@app.routes /
./refactor3.py:@app.route('/')
./refactor3.py:@app.route('/<static_path>/<path:path>')
./refactor3.py:@app.route('/cookie')
./refactor3.py:@app.route('/cookie/<action>')
./refactor3.py:@app.route('/cookie/get')
./refactor3.py:@app.route('/healthcheck')
./refactor3.py:@app.route('/ntfy/')
./refactor3.py:@app.route('/ntfy/<channel>/<message>')
./refactor3.py:@app.route('/requests', methods=['GET','POST'])
./refactor3.py:@app.route('/squid')
./refactor3.py:@app.route('/webhook/jellyfin',methods=['GET','POST'])
@app.routes /static
./lib/static.py:@static_blueprint.route('/check')
./lib/static.py:@static_blueprint.route('/comingsoon/<feature>', methods=['GET'])
./lib/static.py:@static_blueprint.route('/contact')
./lib/static.py:@static_blueprint.route('/error')
./lib/static.py:@static_blueprint.route('/healthcheck')
./lib/static.py:@static_blueprint.route('/success')

@app.routes /sonarr
@app.routes /sonarr/tvshows
./lib/sonarr_schedule.py:@sonarr_blueprint.route('/sonarr/tvshows', methods=['GET'])


@app.routes /reddit-api
./lib/reddit_api.py:@app.route('/jellyfin', methods=['GET','POST'])
./lib/reddit_api.py:@app.route('/poll', methods=['GET','POST'])


@app.routes /proxymanager
./lib/nginx_proxy_manager.py:@app.route('/')
./lib/nginx_proxy_manager.py:@app.route('/adduser', methods=['GET','POST'])
./lib/nginx_proxy_manager.py:@app.route('/create_files/<path:path>')



@app.routes /ldap_register
./lib/ldap_register.py:@register_blueprint.route('/sso/check_success')
./lib/ldap_register.py:@register_blueprint.route('/sso/register', methods=['GET', 'POST'])
./lib/ldap_register.py:@register_blueprint.route('/sso/register/', methods=['GET', 'POST'])
./lib/ldap_register.py:@register_blueprint.route('/test_ntfy')


@app.routes /ldap_authenticate
./lib/ldap_authenticate.py:@authenticate_blueprint.route('/api/auth', methods=['POST','GET'])
./lib/ldap_authenticate.py:@authenticate_blueprint.route('/sso/auth', methods=['POST','GET'])
./lib/ldap_authenticate.py:@authenticate_blueprint.route('/sso/ldap_success')
./lib/ldap_authenticate.py:@authenticate_blueprint.route('/sso/login', methods=['POST','GET'])
./lib/ldap_authenticate.py:@authenticate_blueprint.route('/sso/logout')


@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers/<app>/logs
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers/about
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])

 

@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])

 

@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])

 

 

 

/containers

The /containers sub-application is designed so that certain apps are stopped until required (OnDemand Apps)

Apps not recently used are stopped

Applications are checked at a period designated by the config option auto_refresh in config/apps.ini however a manual check can be run to identify any apps that can be suspended, by either

If an App is in the stopped state, each app container is started and then, once a confgiured grace period has passed, the user is redirected to the original URL

Apps currently suspended but requested

Any app thhat is requested via it's AP url (noted as the section header and withion section of config/apps.ini) will trigger the default HTTP 503 redirect to https://containers.notflix.pknw1.co.uk/containers/<app>

This will attempt to restart each container for the app to funtion and will then, after a configurable delay, automatically redirect to the originally requested App URL - which should now have been 

App Configuration

The sub-app requires default settings and each application (app url) that is deasired to be configured in config/apps.ini

 Default Section
api_key
logs_folder
auto_refresh
redirect_url
about fields
Per Application Section
[apps.notflix.pknw1.co.uk]
monitoringStatus
internal_proxy
status_source
containerNames
monitorLog
monitorUrl
idleTime
countdown
currentStatus
lastUpdate
lastChecked
@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers/<app>/logs
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers/about
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])

 

@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])

 

@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])
@app.routes /containers
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/<app>/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/about')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/all/logs')
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/check', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/service/stop/<section_name>', methods=['GET'])
./lib/autoshutdown.py:@autoshutdown_blueprint.route('/containers/status', methods=['GET'])

 

 

Sub-Application Routes

Unprotected Routes Description
/containers
/containers/about
/containers/<app>/logs
/containers/<status
/containers/service/<app>
Protected Routes Description
/containers/check?api=<api_key>
/containers/suspend?api=<api_key>
/containers/cservice/stop/<app>?api=<api_key>