├── .dockerignore
├── Dockerfile
├── LICENSE
├── README.md
├── images
├── avatar.png
├── background-admin3-optimized.png
├── background-admin3.png
├── background-m.png
├── background.jpg
├── favicon.ico
├── imdb.png
├── logo.png
├── nowshowing-color.png
├── nowshowing-icon.png
├── nowshowing-icon2.png
├── nowshowing-iconx100.png
├── nowshowing-white.png
├── nowshowing.png
├── nowshowing250x250.png
├── ns_v2_menu.png
├── ns_v2_stats.png
├── ns_v2_title.png
├── plex.png
├── stats-web-grid.png
├── stats-web-table.png
└── youtube.png
├── root
├── etc
│ ├── cont-init.d
│ │ ├── 10-set-uidgid
│ │ └── 20-setup
│ ├── fix-attrs.d
│ │ └── 10-apply-perms
│ ├── lighttpd
│ │ ├── lighttpd.conf
│ │ └── mod_fastcgi.conf
│ ├── logrotate.conf
│ └── logrotate.d
│ │ ├── fail2ban
│ │ └── lighttpd
├── opt
│ ├── announcementSubject
│ ├── announcement_email_body.erb
│ ├── avatar.png
│ ├── config
│ │ ├── announcement_body.html
│ │ ├── cfg
│ │ │ ├── advanced.yaml
│ │ │ ├── secure.php
│ │ │ └── version
│ │ ├── email_body.erb
│ │ ├── logs
│ │ │ ├── fail2ban.log
│ │ │ ├── lighttpd_access.log
│ │ │ ├── nowshowing.log
│ │ │ └── plex_token_errors.log
│ │ ├── web_body.erb
│ │ └── www
│ │ │ ├── admin
│ │ │ ├── announcement.php
│ │ │ ├── changepass.php
│ │ │ ├── gettoken-pipes-setup.php
│ │ │ ├── gettoken-pipes.php
│ │ │ ├── index.html
│ │ │ ├── index.php
│ │ │ ├── logs.php
│ │ │ ├── ondemand_report.php
│ │ │ ├── reset.php
│ │ │ ├── save_announcement.php
│ │ │ ├── save_settings.php
│ │ │ ├── save_setup.php
│ │ │ ├── tautulli_check.php
│ │ │ └── test_report.php
│ │ │ ├── css
│ │ │ ├── admin_style.css
│ │ │ ├── pure-min.css
│ │ │ └── style.css
│ │ │ ├── img
│ │ │ ├── background-admin3.png
│ │ │ ├── background-m.png
│ │ │ ├── background.jpg
│ │ │ ├── favicon.ico
│ │ │ ├── imdb.png
│ │ │ ├── logo.png
│ │ │ ├── nowshowing-icon.png
│ │ │ ├── nowshowing-icon2.png
│ │ │ ├── nowshowing.png
│ │ │ ├── preloader.svg
│ │ │ └── youtube.png
│ │ │ ├── js
│ │ │ ├── admin_custom.js
│ │ │ ├── custom.js
│ │ │ └── modal_steps.js
│ │ │ └── lib
│ │ │ ├── admin
│ │ │ ├── bootstrap.min.css
│ │ │ ├── bootstrap.min.js
│ │ │ └── jquery.min.js
│ │ │ ├── animate-css
│ │ │ └── animate.min.css
│ │ │ ├── bootstrap
│ │ │ ├── css
│ │ │ │ ├── bootstrap-theme.css
│ │ │ │ ├── bootstrap-theme.css.map
│ │ │ │ ├── bootstrap-theme.min.css
│ │ │ │ ├── bootstrap-theme.min.css.map
│ │ │ │ ├── bootstrap.css
│ │ │ │ ├── bootstrap.css.map
│ │ │ │ ├── bootstrap.min.css
│ │ │ │ └── bootstrap.min.css.map
│ │ │ ├── fonts
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ └── js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── bootstrap.min.js
│ │ │ │ └── npm.js
│ │ │ ├── easing
│ │ │ ├── easing.js
│ │ │ └── easing.min.js
│ │ │ ├── font-awesome
│ │ │ ├── css
│ │ │ │ ├── font-awesome.css
│ │ │ │ └── font-awesome.min.css
│ │ │ └── fonts
│ │ │ │ ├── FontAwesome.otf
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ ├── fontawesome-webfont.woff
│ │ │ │ └── fontawesome-webfont.woff2
│ │ │ ├── jquery
│ │ │ ├── jquery-migrate.min.js
│ │ │ └── jquery.min.js
│ │ │ ├── morphext
│ │ │ ├── morphext.js
│ │ │ └── morphext.min.js
│ │ │ ├── stickyjs
│ │ │ └── sticky.js
│ │ │ ├── superfish
│ │ │ ├── hoverIntent.js
│ │ │ ├── superfish.js
│ │ │ └── superfish.min.js
│ │ │ └── wow
│ │ │ ├── wow.js
│ │ │ └── wow.min.js
│ ├── f2b
│ │ ├── fail2ban.local
│ │ ├── iptables-common.conf
│ │ ├── jail.local
│ │ └── nowshowing.conf
│ ├── gem
│ │ ├── Gemfile
│ │ └── Gemfile.lock
│ ├── index.html
│ ├── php
│ │ ├── changepass.php
│ │ ├── loadadvanced.php
│ │ ├── logs.php
│ │ ├── randomPass.php
│ │ ├── reset.php
│ │ ├── run_announcement.php
│ │ ├── run_gettoken_pipes.php
│ │ ├── run_ondemand_report.php
│ │ ├── run_tautulli_check.php
│ │ ├── run_test_report.php
│ │ ├── spyc.php
│ │ ├── writeadvanced.php
│ │ ├── writeannouncement.php
│ │ └── writesetup.php
│ └── smtp.rb
├── usr
│ └── local
│ │ └── sbin
│ │ ├── announcementreport
│ │ ├── combinedreport
│ │ ├── create-cron
│ │ ├── emailreport
│ │ ├── gettoken-pipes
│ │ ├── ondemand_report
│ │ ├── tautulli_check
│ │ ├── webreport
│ │ └── webserver
└── var
│ └── lib
│ └── nowshowing
│ ├── locales
│ ├── de.yml
│ ├── en.yml
│ ├── fr.yml
│ └── no.yml
│ ├── mailAnnouncement.rb
│ ├── mailReport.rb
│ ├── omdb.rb
│ ├── plex.rb
│ ├── plexTv.rb
│ ├── tautulli.rb
│ ├── themoviedb.rb
│ └── thetvdb.rb
└── s6-overlay
├── bin
├── background
├── backtick
├── cd
├── define
├── dollarat
├── elgetopt
├── elgetpositionals
├── elglob
├── emptyenv
├── exec
├── execlineb
├── exit
├── export
├── fdblock
├── fdclose
├── fdmove
├── fdreserve
├── fdswap
├── forbacktickx
├── foreground
├── forstdin
├── forx
├── getcwd
├── getpid
├── heredoc
├── homeof
├── if
├── ifelse
├── ifte
├── ifthenelse
├── import
├── importas
├── loopwhilex
├── minidentd
├── multidefine
├── multisubstitute
├── pipeline
├── piperw
├── redirfd
├── runblock
├── s6-accessrules-cdb-from-fs
├── s6-accessrules-fs-from-cdb
├── s6-applyuidgid
├── s6-basename
├── s6-cat
├── s6-chmod
├── s6-chown
├── s6-chroot
├── s6-cleanfifodir
├── s6-clock
├── s6-clockadd
├── s6-clockview
├── s6-connlimit
├── s6-cut
├── s6-devd
├── s6-dirname
├── s6-dnsip4
├── s6-dnsip4-filter
├── s6-dnsip6
├── s6-dnsip6-filter
├── s6-dnsmx
├── s6-dnsname
├── s6-dnsname-filter
├── s6-dnsns
├── s6-dnsq
├── s6-dnsqr
├── s6-dnsqualify
├── s6-dnssoa
├── s6-dnssrv
├── s6-dnstxt
├── s6-dumpenv
├── s6-echo
├── s6-env
├── s6-envdir
├── s6-envuidgid
├── s6-expr
├── s6-false
├── s6-fdholder-daemon
├── s6-fdholder-delete
├── s6-fdholder-deletec
├── s6-fdholder-getdump
├── s6-fdholder-getdumpc
├── s6-fdholder-list
├── s6-fdholder-listc
├── s6-fdholder-retrieve
├── s6-fdholder-retrievec
├── s6-fdholder-setdump
├── s6-fdholder-setdumpc
├── s6-fdholder-store
├── s6-fdholder-storec
├── s6-fdholder-transferdump
├── s6-fdholder-transferdumpc
├── s6-fdholderd
├── s6-fghack
├── s6-fillurandompool
├── s6-format-filter
├── s6-freeramdisk
├── s6-ftrig-listen
├── s6-ftrig-listen1
├── s6-ftrig-notify
├── s6-ftrig-wait
├── s6-ftrigrd
├── s6-getservbyname
├── s6-grep
├── s6-head
├── s6-hiercopy
├── s6-hostname
├── s6-ident-client
├── s6-ioconnect
├── s6-ipcclient
├── s6-ipcserver
├── s6-ipcserver-access
├── s6-ipcserver-socketbinder
├── s6-ipcserverd
├── s6-linkname
├── s6-ln
├── s6-log
├── s6-logwatch
├── s6-ls
├── s6-maximumtime
├── s6-mkdir
├── s6-mkfifo
├── s6-mkfifodir
├── s6-mount
├── s6-nice
├── s6-nuke
├── s6-pause
├── s6-pivotchroot
├── s6-printenv
├── s6-ps
├── s6-quote
├── s6-quote-filter
├── s6-randomip
├── s6-rc
├── s6-rc-bundle
├── s6-rc-compile
├── s6-rc-db
├── s6-rc-dryrun
├── s6-rc-init
├── s6-rc-update
├── s6-rename
├── s6-rmrf
├── s6-seq
├── s6-setlock
├── s6-setsid
├── s6-setuidgid
├── s6-sleep
├── s6-sntpclock
├── s6-softlimit
├── s6-sort
├── s6-sudo
├── s6-sudoc
├── s6-sudod
├── s6-supervise
├── s6-svc
├── s6-svlisten
├── s6-svlisten1
├── s6-svok
├── s6-svscan
├── s6-svscanctl
├── s6-svstat
├── s6-svwait
├── s6-swapoff
├── s6-swapon
├── s6-sync
├── s6-tai64n
├── s6-tai64nlocal
├── s6-taiclock
├── s6-taiclockd
├── s6-tail
├── s6-tcpclient
├── s6-tcpserver
├── s6-tcpserver-access
├── s6-tcpserver4
├── s6-tcpserver4-socketbinder
├── s6-tcpserver4d
├── s6-tcpserver6
├── s6-tcpserver6-socketbinder
├── s6-tcpserver6d
├── s6-test
├── s6-touch
├── s6-true
├── s6-uevent-listener
├── s6-uevent-spawner
├── s6-umount
├── s6-uniquename
├── s6-unquote
├── s6-unquote-filter
├── s6-update-symlinks
├── s6lockd
├── seekablepipe
├── shift
├── skadnsd
├── trap
├── tryexec
├── ucspilogd
├── umask
├── unexport
├── wait
└── withstdinas
├── etc
├── cont-finish.d
│ └── .gitignore
├── cont-init.d
│ └── .gitignore
├── fix-attrs.d
│ └── .gitignore
├── leapsecs.dat
├── s6
│ ├── init-catchall
│ │ ├── init-stage1
│ │ └── init-stage2
│ ├── init-no-catchall
│ │ ├── init-stage1
│ │ └── init-stage2
│ ├── init
│ │ ├── env-stage2
│ │ │ └── .gitignore
│ │ ├── env
│ │ │ └── PATH
│ │ ├── init-stage1
│ │ ├── init-stage2
│ │ ├── init-stage2-fixattrs.txt
│ │ ├── init-stage2-redirfd
│ │ └── init-stage3
│ └── services
│ │ ├── .s6-svscan
│ │ ├── crash
│ │ └── finish
│ │ ├── s6-fdholderd
│ │ ├── down
│ │ ├── notification-fd
│ │ ├── rules
│ │ │ └── uid
│ │ │ │ ├── 0
│ │ │ │ ├── allow
│ │ │ │ └── env
│ │ │ │ │ ├── S6_FDHOLDER_GETDUMP
│ │ │ │ │ ├── S6_FDHOLDER_LIST
│ │ │ │ │ ├── S6_FDHOLDER_RETRIEVE_REGEX
│ │ │ │ │ ├── S6_FDHOLDER_SETDUMP
│ │ │ │ │ └── S6_FDHOLDER_STORE_REGEX
│ │ │ │ └── default
│ │ │ │ ├── allow
│ │ │ │ └── env
│ │ │ │ └── S6_FDHOLDER_LIST
│ │ ├── run
│ │ └── supervise
│ │ │ └── .gitignore
│ │ └── s6-svscan-log
│ │ └── run
└── services.d
│ └── .gitignore
├── init
├── libexec
├── s6-rc-fdholder-filler
├── s6-rc-oneshot-run
└── s6lockd-helper
└── usr
└── bin
├── execlineb
├── fix-attrs
├── logutil-newfifo
├── logutil-service
├── logutil-service-main
├── printcontenv
├── with-contenv
└── with-retries
/.dockerignore:
--------------------------------------------------------------------------------
1 | .git
2 | .gitignore
3 | images
4 | LICENSE
5 | VERSION
6 | README.md
7 | Changelog.md
8 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM alpine:3.5
2 | MAINTAINER ninthwalker
3 |
4 | ENV UPDATED_ON 28APR2018
5 | ENV NOWSHOWING_VERSION 2.0.3
6 |
7 | VOLUME /config
8 | EXPOSE 6878
9 |
10 | #copy app and s6-overlay files
11 | COPY root/ s6-overlay/ /
12 |
13 | # Install permanent packages
14 | RUN apk add --no-cache ruby ruby-json ruby-io-console curl-dev lighttpd php7-cgi php7-json php7-curl php7-mbstring busybox-suid fail2ban ca-certificates wget tzdata shadow && \
15 |
16 | # Install temporary build dependencies
17 | apk add --no-cache --virtual build-dependencies \
18 | ruby-dev \
19 | ruby-bundler \
20 | libc-dev \
21 | make \
22 | gcc && \
23 |
24 | # Create default user & lighttpd path
25 | groupmod -g 1000 users && \
26 | useradd -u 99 -U -d /config -s /bin/false xyz && \
27 | groupmod -o -g 100 xyz && \
28 | usermod -G users xyz && \
29 | mkdir /run/lighttpd /var/run/fail2ban && \
30 |
31 | # fail2ban setup - remove alpine default jail & copy in our jail settings and filter
32 | rm /etc/fail2ban/jail.d/* && \
33 | cp /opt/f2b/fail2ban.local /opt/f2b/jail.local /etc/fail2ban/ && \
34 | cp /opt/f2b/nowshowing.conf /etc/fail2ban/filter.d/ && \
35 | cp /opt/f2b/iptables-common.conf /etc/fail2ban/action.d/ && \
36 |
37 | # smtp.rb mail fix
38 | cp /opt/smtp.rb /usr/lib/ruby/2.3.0/net/ && \
39 |
40 | # Insall NowShowing app dependencies
41 | bundle config --global silence_root_warning 1 && \
42 | cd /opt/gem ; bundle install && \
43 |
44 | # Remove temp files
45 | apk del --purge build-dependencies
46 |
47 | # Start s6 init & webserver
48 | ENTRYPOINT ["/init"]
49 | CMD ["lighttpd", "-D", "-f", "/etc/lighttpd/lighttpd.conf"]
50 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 ninthwalker
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # NowShowing v2
3 |
4 | 
5 |
6 |
7 | [](https://hub.docker.com/r/ninthwalker/nowshowing/)  [](https://microbadger.com/images/ninthwalker/nowshowing:v2 "NowShowing") [](https://hub.docker.com/r/ninthwalker/nowshowing/)
8 |
9 | ## Introduction
10 | The NowShowing docker provides a summary of new media that has recently been added to Plex, giving the Plex owner the option of delivering the information in two ways:
11 | 1) An email summary sent to all or selected users of the Plex Server
12 | 2) A web page for users to visit
13 |
14 | ## Description / Background
15 | NowShowing is the successor of the popular plexReport docker. The original brainchild of [bstascavage](https://github.com/bstascavage/plexReport). Further developed by NinthWalker & enhanced by GroxyPod, NowShowing adds additional improvements and features in a friendly, easy to install docker.
16 |
17 | ## New in v2:
18 | ### Complete code rewrite with tons of new features!
19 | * Same great Email/webpage for Plex recently added as v1
20 | * All new Web Interface for settings and customization
21 | * Library Filtering!
22 | * Movie/TV Trailers
23 | * [Tautilli](https://github.com/Tautulli/Tautulli) Statistics integration
24 | * New user Setup Wizard
25 | * Announcement Emails
26 | * Web based Log Viewer
27 | * Easy Plex token retrieval
28 | * Most email providers supported
29 | * BCC users instead of multiple emails
30 | * Web tools including On-Demand and Test reports
31 |
32 |
33 |
34 | ### [Screenshots](https://github.com/ninthwalker/NowShowing/wiki/Screenshots)
35 |
36 | ## Supported Platforms
37 | * Docker (Windows or Linux based) [See Wiki](https://github.com/ninthwalker/NowShowing/wiki/Other-Docker-Platforms)
38 | * unRAID v6+
39 |
40 |
41 | ## Supported Email Clients
42 | * Most Email providers with SSL SMTP support [see Wiki FAQ](https://github.com/ninthwalker/NowShowing/wiki/FAQ-&-Known-Issues)
43 |
44 | ## Supported Plex Agents
45 | * Plex Movie
46 | * TheMovieDB
47 | * TheTVDB
48 |
49 | ## Prerequisites
50 | 1. Plex
51 | 2. Docker
52 | 3. Plex Movie or TheMovieDB set as your Agent for Movie sections on the Plex server
53 | 4. TheTVDB set as your Agent for TV sections on the Plex server
54 | 5. An Email account that supports SSL SMTP
55 |
56 | ## Installation on unRAID
57 | [See unRAID Wiki](https://github.com/ninthwalker/NowShowing/wiki/unRAID-Instructions)
58 |
59 | ## Installation on other Docker platforms
60 | [See Other Docker platforms Wiki](https://github.com/ninthwalker/NowShowing/wiki/Other-Docker-Platforms)
61 |
62 | ## Advanced settings, FAQ, Command-line options & other questions:
63 | [See Github Wiki](https://github.com/ninthwalker/NowShowing/wiki)
64 |
--------------------------------------------------------------------------------
/images/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/avatar.png
--------------------------------------------------------------------------------
/images/background-admin3-optimized.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/background-admin3-optimized.png
--------------------------------------------------------------------------------
/images/background-admin3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/background-admin3.png
--------------------------------------------------------------------------------
/images/background-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/background-m.png
--------------------------------------------------------------------------------
/images/background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/background.jpg
--------------------------------------------------------------------------------
/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/favicon.ico
--------------------------------------------------------------------------------
/images/imdb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/imdb.png
--------------------------------------------------------------------------------
/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/logo.png
--------------------------------------------------------------------------------
/images/nowshowing-color.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/nowshowing-color.png
--------------------------------------------------------------------------------
/images/nowshowing-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/nowshowing-icon.png
--------------------------------------------------------------------------------
/images/nowshowing-icon2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/nowshowing-icon2.png
--------------------------------------------------------------------------------
/images/nowshowing-iconx100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/nowshowing-iconx100.png
--------------------------------------------------------------------------------
/images/nowshowing-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/nowshowing-white.png
--------------------------------------------------------------------------------
/images/nowshowing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/nowshowing.png
--------------------------------------------------------------------------------
/images/nowshowing250x250.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/nowshowing250x250.png
--------------------------------------------------------------------------------
/images/ns_v2_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/ns_v2_menu.png
--------------------------------------------------------------------------------
/images/ns_v2_stats.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/ns_v2_stats.png
--------------------------------------------------------------------------------
/images/ns_v2_title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/ns_v2_title.png
--------------------------------------------------------------------------------
/images/plex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/plex.png
--------------------------------------------------------------------------------
/images/stats-web-grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/stats-web-grid.png
--------------------------------------------------------------------------------
/images/stats-web-table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/stats-web-table.png
--------------------------------------------------------------------------------
/images/youtube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/images/youtube.png
--------------------------------------------------------------------------------
/root/etc/cont-init.d/10-set-uidgid:
--------------------------------------------------------------------------------
1 | #!/usr/bin/with-contenv sh
2 |
3 | PUID=${PUID:-99}
4 | PGID=${PGID:-100}
5 |
6 | groupmod -o -g "$PGID" xyz
7 | usermod -o -u "$PUID" xyz
8 | chown -R xyz:xyz /opt /run/lighttpd
9 | echo "
10 | -----------------------------------------
11 | NowShowing
12 | -----------------------------------------
13 | Brought to you by:
14 |
15 | Ninthwalker/GroxyPod/Limen75
16 |
17 | -----------------------------------------
18 | User xyz set to: $(id -u xyz)
19 | Group xyz set to: $(id -g xyz)
20 | -----------------------------------------
21 | "
22 |
--------------------------------------------------------------------------------
/root/etc/cont-init.d/20-setup:
--------------------------------------------------------------------------------
1 | #!/usr/bin/with-contenv sh
2 |
3 | # current version
4 | this_version=2.0.3
5 |
6 | # get version
7 | if [ -f /config/cfg/version ]; then
8 | their_version=$(cat /config/cfg/version)
9 | else
10 | echo "version not detected."
11 | fi
12 |
13 | #Copies config files and creates advanced config file if not present
14 | if [ -f /config/cfg/advanced.yaml ]; then
15 | echo "Advanced config file detected. Checking version .."
16 | if [ $their_version = $this_version ]; then
17 | # do nothing, latest version
18 | echo "Latest $this_version release found. Nothing to update."
19 | elif [ $their_version != $this_version ]; then
20 | # copy files since last version
21 | echo "Version $their_version found."
22 | echo "Backing up files to /config/backup/ & upgrading to $this_version release."
23 | mkdir -p /config/backup && chmod 775 /config/backup
24 | cp -Rfp /config/cfg/ /config/www /config/announcement_body.html /config/email_body.erb /config/web_body.erb /config/backup/
25 | cp -Rfp /opt/config/www /opt/config/announcement_body.html /opt/config/email_body.erb /opt/config/web_body.erb /config/
26 | rm /config/www/admin/gettoken-pipes-setup.php /config/www/admin/index.html /config/www/admin/save_setup.php
27 | cp -fp /opt/config/cfg/version /config/cfg/
28 | chown xyz:xyz -R /config/backup/
29 | fi
30 |
31 | else
32 | # copy files incl advanced.yaml
33 | echo "New Install detected. Installing $this_version release .."
34 | cp -Rfp /opt/config/. /config/
35 | cp -fp /opt/avatar.png /config/www/img/
36 | cp -fp /opt/index.html /config/www/
37 | # set password to a random one
38 | php-cgi7 /opt/php/randomPass.php
39 | fi
40 |
41 | # Always load latest cron settings
42 | ruby /usr/local/sbin/create-cron
43 |
44 | #fail2ban start
45 | fail2ban-client start
46 |
47 | #read nowshowing_schedule.cron on container startup and add to crontab.
48 | chown xyz:xyz /opt/nowshowing_schedule.cron
49 | crontab -u xyz /opt/nowshowing_schedule.cron
50 |
51 | #start cron
52 | crond
53 |
54 | echo "Please go to http://hostIP:hostPort/admin to configure settings"
55 |
--------------------------------------------------------------------------------
/root/etc/fix-attrs.d/10-apply-perms:
--------------------------------------------------------------------------------
1 | /opt true xyz 0664 0775
2 |
--------------------------------------------------------------------------------
/root/etc/lighttpd/lighttpd.conf:
--------------------------------------------------------------------------------
1 | server.document-root = "/config/www/"
2 |
3 | server.port = 6878
4 |
5 | server.username = "xyz"
6 | server.groupname = "xyz"
7 |
8 | server.modules = (
9 | "mod_access",
10 | "mod_accesslog"
11 | )
12 |
13 | mimetype.assign = (
14 | ".html" => "text/html",
15 | ".htm" => "text/html",
16 | ".txt" => "text/plain",
17 | ".jpg" => "image/jpeg",
18 | ".png" => "image/png",
19 | ".js" => "text/javascript",
20 | ".css" => "text/css"
21 | )
22 |
23 | include "mod_fastcgi.conf"
24 |
25 | static-file.exclude-extensions = ( ".fcgi", ".php", ".rb", "~", ".inc" )
26 | index-file.names = ( "index.html", "index.htm" , "index.php")
27 |
28 | server.pid-file = "/var/run/lighttpd.pid"
29 | accesslog.filename = "/config/logs/lighttpd_access.log"
30 |
--------------------------------------------------------------------------------
/root/etc/lighttpd/mod_fastcgi.conf:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # mod_fastcgi.conf
3 | # include'd by lighttpd.conf.
4 | # $Header: /var/cvsroot/gentoo-x86/www-servers/lighttpd/files/conf/mod_fastcgi.conf-1.4.13-r2,v 1.1 2007/04/01 23:22:00 robbat2 Exp $
5 | ###############################################################################
6 |
7 | server.modules += ("mod_fastcgi")
8 | fastcgi.server = ( ".php" =>
9 | ( "localhost" =>
10 | (
11 | "socket" => "/run/lighttpd/lighttpd-fastcgi-php-" + PID + ".socket",
12 | "bin-path" => "/usr/bin/php-cgi7"
13 | )
14 | )
15 | )
16 |
17 | # vim: set ft=conf foldmethod=marker et :
18 |
--------------------------------------------------------------------------------
/root/etc/logrotate.conf:
--------------------------------------------------------------------------------
1 | # see "man logrotate" for details
2 | # rotate log files weekly
3 | weekly
4 | su xyz xyz
5 | # keep 4 weeks worth of backlogs
6 | rotate 4
7 |
8 | # create new (empty) log files after rotating old ones
9 | create
10 |
11 | # use date as a suffix of the rotated file
12 | dateext
13 |
14 | # exclude alpine files
15 | tabooext + .apk-new
16 |
17 | # uncomment this if you want your log files compressed
18 | compress
19 |
20 | # main log file
21 | #/var/log/messages {}
22 |
23 | # apk packages drop log rotation information into this directory
24 | include /etc/logrotate.d
25 |
26 | # system-specific logs may be also be configured here.
27 |
--------------------------------------------------------------------------------
/root/etc/logrotate.d/fail2ban:
--------------------------------------------------------------------------------
1 | /config/logs/fail2ban.log {
2 | daily
3 | maxsize 25M
4 | rotate 2
5 | missingok
6 | compress
7 | postrotate
8 | /usr/bin/fail2ban-client flushlogs 1>/dev/null || true
9 | endscript
10 | }
11 |
--------------------------------------------------------------------------------
/root/etc/logrotate.d/lighttpd:
--------------------------------------------------------------------------------
1 | # $Header: /var/cvsroot/gentoo-x86/www-servers/lighttpd/files/lighttpd.logrotate,v 1.2 2006/05/30 19:49:29 bangert Exp $
2 | # lighttpd logrotate script for Gentoo
3 |
4 | /config/logs/lighttpd_access.log {
5 | daily
6 | maxsize 25M
7 | missingok
8 | copytruncate
9 | rotate 2
10 | compress
11 | notifempty
12 | sharedscripts
13 | postrotate
14 | kill -hup $(cat /var/run/lighttpd.pid)
15 | endscript
16 | }
17 |
--------------------------------------------------------------------------------
/root/opt/announcementSubject:
--------------------------------------------------------------------------------
1 | Plex Announcement
--------------------------------------------------------------------------------
/root/opt/announcement_email_body.erb:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <%= $announcement %>
9 |
10 |
--------------------------------------------------------------------------------
/root/opt/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/avatar.png
--------------------------------------------------------------------------------
/root/opt/config/announcement_body.html:
--------------------------------------------------------------------------------
1 | Example Announcement
2 | This is a test announcement!
3 | The Plex Server will be offline
4 | for maintenance on April 1st for
5 | approximately 2 hours.
6 |
7 | We apologize for any inconvenience.
8 | Thanks for watching!
9 |
--------------------------------------------------------------------------------
/root/opt/config/cfg/advanced.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | email:
3 | title: "New This Week"
4 | image: "http://i.imgur.com/LNTSbFl.png"
5 | footer: "Thanks for watching!"
6 | language: "en"
7 | web:
8 | title_image: "img/nowshowing.png"
9 | logo: "img/logo.png"
10 | headline_title: 'Just added:'
11 | headliners: "Laughs,Screams,Thrills,Entertainment"
12 | footer: "Thanks for watching!"
13 | language: "en"
14 | plex:
15 | plex_user_emails: "yes"
16 | libraries_to_skip:
17 | - ""
18 | server: ""
19 | mail:
20 | from: "Plex Server"
21 | subject: "Now Showing"
22 | recipients_email:
23 | - ""
24 | recipients:
25 | - ""
26 | provider: ""
27 | address: ""
28 | port: ""
29 | username: ""
30 | password: ""
31 | report:
32 | interval: "7"
33 | report_type: "both"
34 | email_report_time: '30 10 * * 5'
35 | web_report_time: '30 23 * * *'
36 | extra_details: "no"
37 | test: "disable"
38 | tautulli:
39 | server: ""
40 | port: ""
41 | api_key: ""
42 | httproot: ""
43 | https: "no"
44 | title: "Statistics:"
45 | stats: ""
46 | token:
47 | api_key: ""
48 |
--------------------------------------------------------------------------------
/root/opt/config/cfg/secure.php:
--------------------------------------------------------------------------------
1 | 'NowShowing'
11 | );
12 |
13 | // request login? true - show login and password boxes, false - password box only
14 | define('USE_USERNAME', true);
15 |
16 | // User will be redirected to this page after logout
17 | // define('LOGOUT_URL', '../');
18 |
19 | // time out after NN minutes of inactivity. Set to 0 to not timeout
20 | // I set to 3 days
21 | define('TIMEOUT_MINUTES', 4320);
22 |
23 | // This parameter is only useful when TIMEOUT_MINUTES is not zero
24 | // true - timeout time from last activity, false - timeout time from login
25 | define('TIMEOUT_CHECK_ACTIVITY', false);
26 |
27 | ##################################################################
28 | # SETTINGS END
29 | ##################################################################
30 |
31 | ///////////////////////////////////////////////////////
32 | // do not change code below
33 | ///////////////////////////////////////////////////////
34 |
35 | // show usage example
36 | if(isset($_GET['help'])) {
37 | die('Include following code into every page you would like to protect, at the very beginning (first line):
<?php include("' . str_replace('\\','\\\\',__FILE__) . '"); ?>');
38 | }
39 |
40 | // timeout in seconds
41 | $timeout = (TIMEOUT_MINUTES == 0 ? 0 : time() + TIMEOUT_MINUTES * 60);
42 |
43 | // logout?
44 | if(isset($_GET['logout'])) {
45 | setcookie("NowShowing", '', $timeout, '/'); // clear password;
46 | header("Location: http://".$_SERVER['HTTP_HOST']."/admin/index.php");
47 | exit();
48 | }
49 |
50 | if(!function_exists('showLoginPasswordProtect')) {
51 |
52 | // show login form
53 | function showLoginPasswordProtect($error_msg) {
54 | ?>
55 |
56 |
57 | NowShowing
58 |
59 |
60 |
61 |
62 |
63 |
118 |
134 |
135 |
136 |
137 | $val) {
176 | $lp = (USE_USERNAME ? $key : '') .'%'.$val;
177 | if ($_COOKIE['NowShowing'] == md5($lp)) {
178 | $found = true;
179 | // prolong timeout
180 | if (TIMEOUT_CHECK_ACTIVITY) {
181 | setcookie("NowShowing", md5($lp), $timeout, '/');
182 | }
183 | break;
184 | }
185 | }
186 | if (!$found) {
187 | showLoginPasswordProtect("");
188 | }
189 | }
190 | ?>
191 |
--------------------------------------------------------------------------------
/root/opt/config/cfg/version:
--------------------------------------------------------------------------------
1 | 2.0.3
--------------------------------------------------------------------------------
/root/opt/config/logs/fail2ban.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/logs/fail2ban.log
--------------------------------------------------------------------------------
/root/opt/config/logs/lighttpd_access.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/logs/lighttpd_access.log
--------------------------------------------------------------------------------
/root/opt/config/logs/nowshowing.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/logs/nowshowing.log
--------------------------------------------------------------------------------
/root/opt/config/logs/plex_token_errors.log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/logs/plex_token_errors.log
--------------------------------------------------------------------------------
/root/opt/config/www/admin/announcement.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/changepass.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/gettoken-pipes-setup.php:
--------------------------------------------------------------------------------
1 | array("pipe", "r"), // stdin is a pipe that the child will read from
9 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to
10 | 2 => array("file", "/config/logs/plex_token_errors.log", "a") // stderr is a file to write to
11 | );
12 | $process = proc_open('ruby /usr/local/sbin/gettoken-pipes', $descriptorspec, $pipes);
13 |
14 | if (is_resource($process)) {
15 | $userpass = strip_tags($_POST['plex_username']) . '|+/+/+|' . strip_tags($_POST['plex_password']);
16 | fwrite($pipes[0], $userpass);
17 | fclose($pipes[0]);
18 |
19 | $stream = stream_get_contents($pipes[1]);
20 | $stream = str_replace("\n", '', $stream);
21 | $stream = explode(" ",$stream);
22 | $token = $stream[0];
23 | $avatar = isset($stream[1]) ? $stream[1] : "";
24 | fclose($pipes[1]);
25 | proc_close($process);
26 | }
27 |
28 | if (!empty($token)) {
29 | # save token to advanced.yaml
30 | $adv_array = Spyc::YAMLLoad('../../cfg/advanced.yaml');
31 | $adv_array['token'] = array('api_key' => $token);
32 |
33 | # d/l gravatar avatar
34 | exec("wget $avatar -O /config/www/img/avatar.png");
35 |
36 | $adv_yaml = Spyc::YAMLDump($adv_array,2,0);
37 | file_put_contents($adv_file, $adv_yaml);
38 |
39 | $statustext = "Plex Token Saved!";
40 | $tokenarray = array( 'token' => $token, 'statustext' => $statustext);
41 | echo json_encode($tokenarray);
42 | exit;
43 | }
44 | else {
45 | $statustext = "Error: Verify username/password!";
46 | $tokenarray = array( 'statustext' => $statustext);
47 | echo json_encode($tokenarray);
48 | exit;
49 | }
50 | }
51 | echo "Check username/password!";
52 | exit;
53 | ?>
54 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/gettoken-pipes.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/logs.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/ondemand_report.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/reset.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/save_announcement.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/save_settings.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/save_setup.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/tautulli_check.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/root/opt/config/www/admin/test_report.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/root/opt/config/www/img/background-admin3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/img/background-admin3.png
--------------------------------------------------------------------------------
/root/opt/config/www/img/background-m.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/img/background-m.png
--------------------------------------------------------------------------------
/root/opt/config/www/img/background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/img/background.jpg
--------------------------------------------------------------------------------
/root/opt/config/www/img/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/img/favicon.ico
--------------------------------------------------------------------------------
/root/opt/config/www/img/imdb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/img/imdb.png
--------------------------------------------------------------------------------
/root/opt/config/www/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/img/logo.png
--------------------------------------------------------------------------------
/root/opt/config/www/img/nowshowing-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/img/nowshowing-icon.png
--------------------------------------------------------------------------------
/root/opt/config/www/img/nowshowing-icon2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/img/nowshowing-icon2.png
--------------------------------------------------------------------------------
/root/opt/config/www/img/nowshowing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/img/nowshowing.png
--------------------------------------------------------------------------------
/root/opt/config/www/img/preloader.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/root/opt/config/www/img/youtube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/img/youtube.png
--------------------------------------------------------------------------------
/root/opt/config/www/js/custom.js:
--------------------------------------------------------------------------------
1 | jQuery(document).ready(function( $ ) {
2 |
3 | // Preloader
4 | $(window).load(function(){
5 | $('#preloader').delay(100).fadeOut('slow',function(){$(this).remove();});
6 | });
7 |
8 | //Limittext synopsis to 260 char - changed to 225 after adding imdb/trailer img's
9 | $(".limittext").each(function(){
10 | len=$(this).text().length;
11 | if(len>225)
12 | {
13 | $(this).text($(this).text().substr(0,225)+'...');
14 | }
15 | });
16 |
17 | // Hero rotating texts
18 | $("#hero .rotating").Morphext({
19 | animation: "flipInX",
20 | separator: ",",
21 | speed: 3000
22 | });
23 |
24 | // Initiate the wowjs
25 | new WOW().init();
26 |
27 | // Initiate superfish on nav menu
28 | $('.nav-menu').superfish({
29 | animation: {opacity:'show'},
30 | speed: 400
31 | });
32 |
33 | // Mobile Navigation
34 | if( $('#nav-menu-container').length ) {
35 | var $mobile_nav = $('#nav-menu-container').clone().prop({ id: 'mobile-nav'});
36 | $mobile_nav.find('> ul').attr({ 'class' : '', 'id' : '' });
37 | $('body').append( $mobile_nav );
38 | $('body').prepend( '' );
39 | $('body').append( '' );
40 | $('#mobile-nav').find('.menu-has-children').prepend('');
41 |
42 | $(document).on('click', '.menu-has-children i', function(e){
43 | $(this).next().toggleClass('menu-item-active');
44 | $(this).nextAll('ul').eq(0).slideToggle();
45 | $(this).toggleClass("fa-chevron-up fa-chevron-down");
46 | });
47 |
48 | $(document).on('click', '#mobile-nav-toggle', function(e){
49 | $('body').toggleClass('mobile-nav-active');
50 | $('#mobile-nav-toggle i').toggleClass('fa-times fa-bars');
51 | $('#mobile-body-overly').toggle();
52 | });
53 |
54 | $(document).click(function (e) {
55 | var container = $("#mobile-nav, #mobile-nav-toggle");
56 | if (!container.is(e.target) && container.has(e.target).length === 0) {
57 | if ( $('body').hasClass('mobile-nav-active') ) {
58 | $('body').removeClass('mobile-nav-active');
59 | $('#mobile-nav-toggle i').toggleClass('fa-times fa-bars');
60 | $('#mobile-body-overly').fadeOut();
61 | }
62 | }
63 | });
64 | } else if ( $("#mobile-nav, #mobile-nav-toggle").length ) {
65 | $("#mobile-nav, #mobile-nav-toggle").hide();
66 | }
67 |
68 | // Stick the header at top on scroll
69 | $("#header").sticky({topSpacing:0, zIndex: '50'});
70 |
71 | // Smoth scroll on page hash links
72 | $('a[href*="#"]:not([href="#"])').on('click', function() {
73 | if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
74 | var target = $(this.hash);
75 | if (target.length) {
76 |
77 | var top_space = 0;
78 |
79 | if( $('#header').length ) {
80 | top_space = $('#header').outerHeight();
81 | }
82 |
83 | $('html, body').animate({
84 | scrollTop: target.offset().top - top_space
85 | }, 1500, 'easeInOutExpo');
86 |
87 | if ( $(this).parents('.nav-menu').length ) {
88 | $('.nav-menu .menu-active').removeClass('menu-active');
89 | $(this).closest('li').addClass('menu-active');
90 | }
91 |
92 | if ( $('body').hasClass('mobile-nav-active') ) {
93 | $('body').removeClass('mobile-nav-active');
94 | $('#mobile-nav-toggle i').toggleClass('fa-times fa-bars');
95 | $('#mobile-body-overly').fadeOut();
96 | }
97 |
98 | return false;
99 | }
100 | }
101 | });
102 |
103 | // Back to top button
104 | $(window).scroll(function() {
105 |
106 | if ($(this).scrollTop() > 100) {
107 | $('.back-to-top').fadeIn('slow');
108 | } else {
109 | $('.back-to-top').fadeOut('slow');
110 | }
111 |
112 | });
113 |
114 | $('.back-to-top').click(function(){
115 | $('html, body').animate({scrollTop : 0},1500, 'easeInOutExpo');
116 | return false;
117 | });
118 |
119 | var $videoSrc;
120 | $('.video-btn').click(function() {
121 | $videoSrc = $(this).data( "src" );
122 | console.log($videoSrc);
123 | });
124 |
125 | // when the modal is opened autoplay it
126 | $('#myModal').on('shown.bs.modal', function (e) {
127 |
128 | // set the video src to autoplay and not to show related video. Youtube related video is like a box of chocolates... you never know what you're gonna get
129 | $("#video").attr('src',$videoSrc + "?rel=0&showinfo=0&modestbranding=1&autoplay=1" );
130 | })
131 |
132 | // stop playing the youtube video when I close the modal
133 | $('#myModal').on('hide.bs.modal', function (e) {
134 | // a poor man's stop video
135 | $("#video").attr('src',$videoSrc);
136 | })
137 |
138 | });
139 |
140 | //$(document).ready(function() {
141 |
142 | // Gets the video src from the data-src on each button
143 |
144 |
145 |
146 | // document ready
147 | // });
148 |
--------------------------------------------------------------------------------
/root/opt/config/www/lib/bootstrap/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/lib/bootstrap/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/root/opt/config/www/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/root/opt/config/www/lib/bootstrap/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/lib/bootstrap/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/root/opt/config/www/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/root/opt/config/www/lib/bootstrap/js/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/root/opt/config/www/lib/easing/easing.js:
--------------------------------------------------------------------------------
1 | /*
2 | * jQuery Easing v1.4.0 - http://gsgd.co.uk/sandbox/jquery/easing/
3 | * Open source under the BSD License.
4 | * Copyright © 2008 George McGinley Smith
5 | * All rights reserved.
6 | * https://raw.github.com/gdsmith/jquery-easing/master/LICENSE
7 | */
8 |
9 | (function (factory) {
10 | if (typeof define === "function" && define.amd) {
11 | define(['jquery'], function ($) {
12 | return factory($);
13 | });
14 | } else if (typeof module === "object" && typeof module.exports === "object") {
15 | exports = factory(require('jquery'));
16 | } else {
17 | factory(jQuery);
18 | }
19 | })(function($){
20 |
21 | // Preserve the original jQuery "swing" easing as "jswing"
22 | $.easing['jswing'] = $.easing['swing'];
23 |
24 | var pow = Math.pow,
25 | sqrt = Math.sqrt,
26 | sin = Math.sin,
27 | cos = Math.cos,
28 | PI = Math.PI,
29 | c1 = 1.70158,
30 | c2 = c1 * 1.525,
31 | c3 = c1 + 1,
32 | c4 = ( 2 * PI ) / 3,
33 | c5 = ( 2 * PI ) / 4.5;
34 |
35 | // x is the fraction of animation progress, in the range 0..1
36 | function bounceOut(x) {
37 | var n1 = 7.5625,
38 | d1 = 2.75;
39 | if ( x < 1/d1 ) {
40 | return n1*x*x;
41 | } else if ( x < 2/d1 ) {
42 | return n1*(x-=(1.5/d1))*x + .75;
43 | } else if ( x < 2.5/d1 ) {
44 | return n1*(x-=(2.25/d1))*x + .9375;
45 | } else {
46 | return n1*(x-=(2.625/d1))*x + .984375;
47 | }
48 | }
49 |
50 | $.extend( $.easing,
51 | {
52 | def: 'easeOutQuad',
53 | swing: function (x) {
54 | return $.easing[$.easing.def](x);
55 | },
56 | easeInQuad: function (x) {
57 | return x * x;
58 | },
59 | easeOutQuad: function (x) {
60 | return 1 - ( 1 - x ) * ( 1 - x );
61 | },
62 | easeInOutQuad: function (x) {
63 | return x < 0.5 ?
64 | 2 * x * x :
65 | 1 - pow( -2 * x + 2, 2 ) / 2;
66 | },
67 | easeInCubic: function (x) {
68 | return x * x * x;
69 | },
70 | easeOutCubic: function (x) {
71 | return 1 - pow( 1 - x, 3 );
72 | },
73 | easeInOutCubic: function (x) {
74 | return x < 0.5 ?
75 | 4 * x * x * x :
76 | 1 - pow( -2 * x + 2, 3 ) / 2;
77 | },
78 | easeInQuart: function (x) {
79 | return x * x * x * x;
80 | },
81 | easeOutQuart: function (x) {
82 | return 1 - pow( 1 - x, 4 );
83 | },
84 | easeInOutQuart: function (x) {
85 | return x < 0.5 ?
86 | 8 * x * x * x * x :
87 | 1 - pow( -2 * x + 2, 4 ) / 2;
88 | },
89 | easeInQuint: function (x) {
90 | return x * x * x * x * x;
91 | },
92 | easeOutQuint: function (x) {
93 | return 1 - pow( 1 - x, 5 );
94 | },
95 | easeInOutQuint: function (x) {
96 | return x < 0.5 ?
97 | 16 * x * x * x * x * x :
98 | 1 - pow( -2 * x + 2, 5 ) / 2;
99 | },
100 | easeInSine: function (x) {
101 | return 1 - cos( x * PI/2 );
102 | },
103 | easeOutSine: function (x) {
104 | return sin( x * PI/2 );
105 | },
106 | easeInOutSine: function (x) {
107 | return -( cos( PI * x ) - 1 ) / 2;
108 | },
109 | easeInExpo: function (x) {
110 | return x === 0 ? 0 : pow( 2, 10 * x - 10 );
111 | },
112 | easeOutExpo: function (x) {
113 | return x === 1 ? 1 : 1 - pow( 2, -10 * x );
114 | },
115 | easeInOutExpo: function (x) {
116 | return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
117 | pow( 2, 20 * x - 10 ) / 2 :
118 | ( 2 - pow( 2, -20 * x + 10 ) ) / 2;
119 | },
120 | easeInCirc: function (x) {
121 | return 1 - sqrt( 1 - pow( x, 2 ) );
122 | },
123 | easeOutCirc: function (x) {
124 | return sqrt( 1 - pow( x - 1, 2 ) );
125 | },
126 | easeInOutCirc: function (x) {
127 | return x < 0.5 ?
128 | ( 1 - sqrt( 1 - pow( 2 * x, 2 ) ) ) / 2 :
129 | ( sqrt( 1 - pow( -2 * x + 2, 2 ) ) + 1 ) / 2;
130 | },
131 | easeInElastic: function (x) {
132 | return x === 0 ? 0 : x === 1 ? 1 :
133 | -pow( 2, 10 * x - 10 ) * sin( ( x * 10 - 10.75 ) * c4 );
134 | },
135 | easeOutElastic: function (x) {
136 | return x === 0 ? 0 : x === 1 ? 1 :
137 | pow( 2, -10 * x ) * sin( ( x * 10 - 0.75 ) * c4 ) + 1;
138 | },
139 | easeInOutElastic: function (x) {
140 | return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ?
141 | -( pow( 2, 20 * x - 10 ) * sin( ( 20 * x - 11.125 ) * c5 )) / 2 :
142 | pow( 2, -20 * x + 10 ) * sin( ( 20 * x - 11.125 ) * c5 ) / 2 + 1;
143 | },
144 | easeInBack: function (x) {
145 | return c3 * x * x * x - c1 * x * x;
146 | },
147 | easeOutBack: function (x) {
148 | return 1 + c3 * pow( x - 1, 3 ) + c1 * pow( x - 1, 2 );
149 | },
150 | easeInOutBack: function (x) {
151 | return x < 0.5 ?
152 | ( pow( 2 * x, 2 ) * ( ( c2 + 1 ) * 2 * x - c2 ) ) / 2 :
153 | ( pow( 2 * x - 2, 2 ) *( ( c2 + 1 ) * ( x * 2 - 2 ) + c2 ) + 2 ) / 2;
154 | },
155 | easeInBounce: function (x) {
156 | return 1 - bounceOut( 1 - x );
157 | },
158 | easeOutBounce: bounceOut,
159 | easeInOutBounce: function (x) {
160 | return x < 0.5 ?
161 | ( 1 - bounceOut( 1 - 2 * x ) ) / 2 :
162 | ( 1 + bounceOut( 2 * x - 1 ) ) / 2;
163 | }
164 | });
165 |
166 | });
167 |
--------------------------------------------------------------------------------
/root/opt/config/www/lib/easing/easing.min.js:
--------------------------------------------------------------------------------
1 | (function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],function($){return factory($)})}else if(typeof module==="object"&&typeof module.exports==="object"){exports=factory(require("jquery"))}else{factory(jQuery)}})(function($){$.easing["jswing"]=$.easing["swing"];var pow=Math.pow,sqrt=Math.sqrt,sin=Math.sin,cos=Math.cos,PI=Math.PI,c1=1.70158,c2=c1*1.525,c3=c1+1,c4=2*PI/3,c5=2*PI/4.5;function bounceOut(x){var n1=7.5625,d1=2.75;if(x<1/d1){return n1*x*x}else if(x<2/d1){return n1*(x-=1.5/d1)*x+.75}else if(x<2.5/d1){return n1*(x-=2.25/d1)*x+.9375}else{return n1*(x-=2.625/d1)*x+.984375}}$.extend($.easing,{def:"easeOutQuad",swing:function(x){return $.easing[$.easing.def](x)},easeInQuad:function(x){return x*x},easeOutQuad:function(x){return 1-(1-x)*(1-x)},easeInOutQuad:function(x){return x<.5?2*x*x:1-pow(-2*x+2,2)/2},easeInCubic:function(x){return x*x*x},easeOutCubic:function(x){return 1-pow(1-x,3)},easeInOutCubic:function(x){return x<.5?4*x*x*x:1-pow(-2*x+2,3)/2},easeInQuart:function(x){return x*x*x*x},easeOutQuart:function(x){return 1-pow(1-x,4)},easeInOutQuart:function(x){return x<.5?8*x*x*x*x:1-pow(-2*x+2,4)/2},easeInQuint:function(x){return x*x*x*x*x},easeOutQuint:function(x){return 1-pow(1-x,5)},easeInOutQuint:function(x){return x<.5?16*x*x*x*x*x:1-pow(-2*x+2,5)/2},easeInSine:function(x){return 1-cos(x*PI/2)},easeOutSine:function(x){return sin(x*PI/2)},easeInOutSine:function(x){return-(cos(PI*x)-1)/2},easeInExpo:function(x){return x===0?0:pow(2,10*x-10)},easeOutExpo:function(x){return x===1?1:1-pow(2,-10*x)},easeInOutExpo:function(x){return x===0?0:x===1?1:x<.5?pow(2,20*x-10)/2:(2-pow(2,-20*x+10))/2},easeInCirc:function(x){return 1-sqrt(1-pow(x,2))},easeOutCirc:function(x){return sqrt(1-pow(x-1,2))},easeInOutCirc:function(x){return x<.5?(1-sqrt(1-pow(2*x,2)))/2:(sqrt(1-pow(-2*x+2,2))+1)/2},easeInElastic:function(x){return x===0?0:x===1?1:-pow(2,10*x-10)*sin((x*10-10.75)*c4)},easeOutElastic:function(x){return x===0?0:x===1?1:pow(2,-10*x)*sin((x*10-.75)*c4)+1},easeInOutElastic:function(x){return x===0?0:x===1?1:x<.5?-(pow(2,20*x-10)*sin((20*x-11.125)*c5))/2:pow(2,-20*x+10)*sin((20*x-11.125)*c5)/2+1},easeInBack:function(x){return c3*x*x*x-c1*x*x},easeOutBack:function(x){return 1+c3*pow(x-1,3)+c1*pow(x-1,2)},easeInOutBack:function(x){return x<.5?pow(2*x,2)*((c2+1)*2*x-c2)/2:(pow(2*x-2,2)*((c2+1)*(x*2-2)+c2)+2)/2},easeInBounce:function(x){return 1-bounceOut(1-x)},easeOutBounce:bounceOut,easeInOutBounce:function(x){return x<.5?(1-bounceOut(1-2*x))/2:(1+bounceOut(2*x-1))/2}})});
--------------------------------------------------------------------------------
/root/opt/config/www/lib/font-awesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/lib/font-awesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/root/opt/config/www/lib/font-awesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/lib/font-awesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/root/opt/config/www/lib/font-awesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/lib/font-awesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/root/opt/config/www/lib/font-awesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/lib/font-awesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/root/opt/config/www/lib/font-awesome/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/root/opt/config/www/lib/font-awesome/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/root/opt/config/www/lib/jquery/jquery-migrate.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery Migrate v3.0.0 | (c) jQuery Foundation and other contributors | jquery.org/license */
2 | "undefined"==typeof jQuery.migrateMute&&(jQuery.migrateMute=!0),function(a,b){"use strict";function c(c){var d=b.console;e[c]||(e[c]=!0,a.migrateWarnings.push(c),d&&d.warn&&!a.migrateMute&&(d.warn("JQMIGRATE: "+c),a.migrateTrace&&d.trace&&d.trace()))}function d(a,b,d,e){Object.defineProperty(a,b,{configurable:!0,enumerable:!0,get:function(){return c(e),d}})}a.migrateVersion="3.0.0",function(){var c=b.console&&b.console.log&&function(){b.console.log.apply(b.console,arguments)},d=/^[12]\./;c&&(a&&!d.test(a.fn.jquery)||c("JQMIGRATE: jQuery 3.0.0+ REQUIRED"),a.migrateWarnings&&c("JQMIGRATE: Migrate plugin loaded multiple times"),c("JQMIGRATE: Migrate is installed"+(a.migrateMute?"":" with logging active")+", version "+a.migrateVersion))}();var e={};a.migrateWarnings=[],void 0===a.migrateTrace&&(a.migrateTrace=!0),a.migrateReset=function(){e={},a.migrateWarnings.length=0},"BackCompat"===document.compatMode&&c("jQuery is not compatible with Quirks Mode");var f=a.fn.init,g=a.isNumeric,h=a.find,i=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,j=/\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g;a.fn.init=function(a){var b=Array.prototype.slice.call(arguments);return"string"==typeof a&&"#"===a&&(c("jQuery( '#' ) is not a valid selector"),b[0]=[]),f.apply(this,b)},a.fn.init.prototype=a.fn,a.find=function(a){var b=Array.prototype.slice.call(arguments);if("string"==typeof a&&i.test(a))try{document.querySelector(a)}catch(d){a=a.replace(j,function(a,b,c,d){return"["+b+c+'"'+d+'"]'});try{document.querySelector(a),c("Attribute selector with '#' must be quoted: "+b[0]),b[0]=a}catch(e){c("Attribute selector with '#' was not fixed: "+b[0])}}return h.apply(this,b)};var k;for(k in h)Object.prototype.hasOwnProperty.call(h,k)&&(a.find[k]=h[k]);a.fn.size=function(){return c("jQuery.fn.size() is deprecated; use the .length property"),this.length},a.parseJSON=function(){return c("jQuery.parseJSON is deprecated; use JSON.parse"),JSON.parse.apply(null,arguments)},a.isNumeric=function(b){function d(b){var c=b&&b.toString();return!a.isArray(b)&&c-parseFloat(c)+1>=0}var e=g(b),f=d(b);return e!==f&&c("jQuery.isNumeric() should not be called on constructed objects"),f},d(a,"unique",a.uniqueSort,"jQuery.unique is deprecated, use jQuery.uniqueSort"),d(a.expr,"filters",a.expr.pseudos,"jQuery.expr.filters is now jQuery.expr.pseudos"),d(a.expr,":",a.expr.pseudos,'jQuery.expr[":"] is now jQuery.expr.pseudos');var l=a.ajax;a.ajax=function(){var a=l.apply(this,arguments);return a.promise&&(d(a,"success",a.done,"jQXHR.success is deprecated and removed"),d(a,"error",a.fail,"jQXHR.error is deprecated and removed"),d(a,"complete",a.always,"jQXHR.complete is deprecated and removed")),a};var m=a.fn.removeAttr,n=a.fn.toggleClass,o=/\S+/g;a.fn.removeAttr=function(b){var d=this;return a.each(b.match(o),function(b,e){a.expr.match.bool.test(e)&&(c("jQuery.fn.removeAttr no longer sets boolean properties: "+e),d.prop(e,!1))}),m.apply(this,arguments)},a.fn.toggleClass=function(b){return void 0!==b&&"boolean"!=typeof b?n.apply(this,arguments):(c("jQuery.fn.toggleClass( boolean ) is deprecated"),this.each(function(){var c=this.getAttribute&&this.getAttribute("class")||"";c&&a.data(this,"__className__",c),this.setAttribute&&this.setAttribute("class",c||b===!1?"":a.data(this,"__className__")||"")}))};var p=!1;a.swap&&a.each(["height","width","reliableMarginRight"],function(b,c){var d=a.cssHooks[c]&&a.cssHooks[c].get;d&&(a.cssHooks[c].get=function(){var a;return p=!0,a=d.apply(this,arguments),p=!1,a})}),a.swap=function(a,b,d,e){var f,g,h={};p||c("jQuery.swap() is undocumented and deprecated");for(g in b)h[g]=a.style[g],a.style[g]=b[g];f=d.apply(a,e||[]);for(g in b)a.style[g]=h[g];return f};var q=a.data;a.data=function(b,d,e){var f;return d&&d!==a.camelCase(d)&&(f=a.hasData(b)&&q.call(this,b),f&&d in f)?(c("jQuery.data() always sets/gets camelCased names: "+d),arguments.length>2&&(f[d]=e),f[d]):q.apply(this,arguments)};var r=a.Tween.prototype.run;a.Tween.prototype.run=function(b){a.easing[this.easing].length>1&&(c('easing function "jQuery.easing.'+this.easing.toString()+'" should use only first argument'),a.easing[this.easing]=a.easing[this.easing].bind(a.easing,b,this.options.duration*b,0,1,this.options.duration)),r.apply(this,arguments)};var s=a.fn.load,t=a.event.fix;a.event.props=[],a.event.fixHooks={},a.event.fix=function(b){var d,e=b.type,f=this.fixHooks[e],g=a.event.props;if(g.length)for(c("jQuery.event.props are deprecated and removed: "+g.join());g.length;)a.event.addProp(g.pop());if(f&&!f._migrated_&&(f._migrated_=!0,c("jQuery.event.fixHooks are deprecated and removed: "+e),(g=f.props)&&g.length))for(;g.length;)a.event.addProp(g.pop());return d=t.call(this,b),f&&f.filter?f.filter(d,b):d},a.each(["load","unload","error"],function(b,d){a.fn[d]=function(){var a=Array.prototype.slice.call(arguments,0);return"load"===d&&"string"==typeof a[0]?s.apply(this,a):(c("jQuery.fn."+d+"() is deprecated"),a.splice(0,0,d),arguments.length?this.on.apply(this,a):(this.triggerHandler.apply(this,a),this))}}),a(function(){a(document).triggerHandler("ready")}),a.event.special.ready={setup:function(){this===document&&c("'ready' event is deprecated")}},a.fn.extend({bind:function(a,b,d){return c("jQuery.fn.bind() is deprecated"),this.on(a,null,b,d)},unbind:function(a,b){return c("jQuery.fn.unbind() is deprecated"),this.off(a,null,b)},delegate:function(a,b,d,e){return c("jQuery.fn.delegate() is deprecated"),this.on(b,a,d,e)},undelegate:function(a,b,d){return c("jQuery.fn.undelegate() is deprecated"),1===arguments.length?this.off(a,"**"):this.off(b,a||"**",d)}});var u=a.fn.offset;a.fn.offset=function(){var b,d=this[0],e={top:0,left:0};return d&&d.nodeType?(b=(d.ownerDocument||document).documentElement,a.contains(b,d)?u.apply(this,arguments):(c("jQuery.fn.offset() requires an element connected to a document"),e)):(c("jQuery.fn.offset() requires a valid DOM element"),e)};var v=a.param;a.param=function(b,d){var e=a.ajaxSettings&&a.ajaxSettings.traditional;return void 0===d&&e&&(c("jQuery.param() no longer uses jQuery.ajaxSettings.traditional"),d=e),v.call(this,b,d)};var w=a.fn.andSelf||a.fn.addBack;a.fn.andSelf=function(){return c("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)};var x=a.Deferred,y=[["resolve","done",a.Callbacks("once memory"),a.Callbacks("once memory"),"resolved"],["reject","fail",a.Callbacks("once memory"),a.Callbacks("once memory"),"rejected"],["notify","progress",a.Callbacks("memory"),a.Callbacks("memory")]];a.Deferred=function(b){var d=x(),e=d.promise();return d.pipe=e.pipe=function(){var b=arguments;return c("deferred.pipe() is deprecated"),a.Deferred(function(c){a.each(y,function(f,g){var h=a.isFunction(b[f])&&b[f];d[g[1]](function(){var b=h&&h.apply(this,arguments);b&&a.isFunction(b.promise)?b.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[g[0]+"With"](this===e?c.promise():this,h?[b]:arguments)})}),b=null}).promise()},b&&b.call(d,d),d}}(jQuery,window);
--------------------------------------------------------------------------------
/root/opt/config/www/lib/morphext/morphext.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Morphext - Text Rotating Plugin for jQuery
3 | * https://github.com/MrSaints/Morphext
4 | *
5 | * Built on jQuery Boilerplate
6 | * http://jqueryboilerplate.com/
7 | *
8 | * Copyright 2014 Ian Lai and other contributors
9 | * Released under the MIT license
10 | * http://ian.mit-license.org/
11 | */
12 |
13 | /*eslint-env browser */
14 | /*global jQuery:false */
15 | /*eslint-disable no-underscore-dangle */
16 |
17 | (function ($) {
18 | "use strict";
19 |
20 | var pluginName = "Morphext",
21 | defaults = {
22 | animation: "bounceIn",
23 | separator: ",",
24 | speed: 2000,
25 | complete: $.noop
26 | };
27 |
28 | function Plugin (element, options) {
29 | this.element = $(element);
30 |
31 | this.settings = $.extend({}, defaults, options);
32 | this._defaults = defaults;
33 | this._init();
34 | }
35 |
36 | Plugin.prototype = {
37 | _init: function () {
38 | var $that = this;
39 | this.phrases = [];
40 |
41 | this.element.addClass("morphext");
42 |
43 | $.each(this.element.text().split(this.settings.separator), function (key, value) {
44 | $that.phrases.push($.trim(value));
45 | });
46 |
47 | this.index = -1;
48 | this.animate();
49 | this.start();
50 | },
51 | animate: function () {
52 | this.index = ++this.index % this.phrases.length;
53 | this.element[0].innerHTML = "" + this.phrases[this.index] + "";
54 |
55 | if ($.isFunction(this.settings.complete)) {
56 | this.settings.complete.call(this);
57 | }
58 | },
59 | start: function () {
60 | var $that = this;
61 | this._interval = setInterval(function () {
62 | $that.animate();
63 | }, this.settings.speed);
64 | },
65 | stop: function () {
66 | this._interval = clearInterval(this._interval);
67 | }
68 | };
69 |
70 | $.fn[pluginName] = function (options) {
71 | return this.each(function() {
72 | if (!$.data(this, "plugin_" + pluginName)) {
73 | $.data(this, "plugin_" + pluginName, new Plugin(this, options));
74 | }
75 | });
76 | };
77 | })(jQuery);
78 |
--------------------------------------------------------------------------------
/root/opt/config/www/lib/morphext/morphext.min.js:
--------------------------------------------------------------------------------
1 | /*! Morphext - v2.4.4 - 2015-05-21 */!function(a){"use strict";function b(b,c){this.element=a(b),this.settings=a.extend({},d,c),this._defaults=d,this._init()}var c="Morphext",d={animation:"bounceIn",separator:",",speed:2e3,complete:a.noop};b.prototype={_init:function(){var b=this;this.phrases=[],this.element.addClass("morphext"),a.each(this.element.text().split(this.settings.separator),function(c,d){b.phrases.push(a.trim(d))}),this.index=-1,this.animate(),this.start()},animate:function(){this.index=++this.index%this.phrases.length,this.element[0].innerHTML=''+this.phrases[this.index]+"",a.isFunction(this.settings.complete)&&this.settings.complete.call(this)},start:function(){var a=this;this._interval=setInterval(function(){a.animate()},this.settings.speed)},stop:function(){this._interval=clearInterval(this._interval)}},a.fn[c]=function(d){return this.each(function(){a.data(this,"plugin_"+c)||a.data(this,"plugin_"+c,new b(this,d))})}}(jQuery);
--------------------------------------------------------------------------------
/root/opt/config/www/lib/superfish/hoverIntent.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * hoverIntent v1.8.1 // 2014.08.11 // jQuery v1.9.1+
3 | * http://briancherne.github.io/jquery-hoverIntent/
4 | *
5 | * You may use hoverIntent under the terms of the MIT license. Basically that
6 | * means you are free to use hoverIntent as long as this header is left intact.
7 | * Copyright 2007, 2014 Brian Cherne
8 | */
9 |
10 | /* hoverIntent is similar to jQuery's built-in "hover" method except that
11 | * instead of firing the handlerIn function immediately, hoverIntent checks
12 | * to see if the user's mouse has slowed down (beneath the sensitivity
13 | * threshold) before firing the event. The handlerOut function is only
14 | * called after a matching handlerIn.
15 | *
16 | * // basic usage ... just like .hover()
17 | * .hoverIntent( handlerIn, handlerOut )
18 | * .hoverIntent( handlerInOut )
19 | *
20 | * // basic usage ... with event delegation!
21 | * .hoverIntent( handlerIn, handlerOut, selector )
22 | * .hoverIntent( handlerInOut, selector )
23 | *
24 | * // using a basic configuration object
25 | * .hoverIntent( config )
26 | *
27 | * @param handlerIn function OR configuration object
28 | * @param handlerOut function OR selector for delegation OR undefined
29 | * @param selector selector OR undefined
30 | * @author Brian Cherne
31 | */
32 |
33 | ;(function(factory) {
34 | 'use strict';
35 | if (typeof define === 'function' && define.amd) {
36 | define(['jquery'], factory);
37 | } else if (jQuery && !jQuery.fn.hoverIntent) {
38 | factory(jQuery);
39 | }
40 | })(function($) {
41 | 'use strict';
42 |
43 | // default configuration values
44 | var _cfg = {
45 | interval: 100,
46 | sensitivity: 6,
47 | timeout: 0
48 | };
49 |
50 | // counter used to generate an ID for each instance
51 | var INSTANCE_COUNT = 0;
52 |
53 | // current X and Y position of mouse, updated during mousemove tracking (shared across instances)
54 | var cX, cY;
55 |
56 | // saves the current pointer position coordinates based on the given mousemove event
57 | var track = function(ev) {
58 | cX = ev.pageX;
59 | cY = ev.pageY;
60 | };
61 |
62 | // compares current and previous mouse positions
63 | var compare = function(ev,$el,s,cfg) {
64 | // compare mouse positions to see if pointer has slowed enough to trigger `over` function
65 | if ( Math.sqrt( (s.pX-cX)*(s.pX-cX) + (s.pY-cY)*(s.pY-cY) ) < cfg.sensitivity ) {
66 | $el.off(s.event,track);
67 | delete s.timeoutId;
68 | // set hoverIntent state as active for this element (permits `out` handler to trigger)
69 | s.isActive = true;
70 | // overwrite old mouseenter event coordinates with most recent pointer position
71 | ev.pageX = cX; ev.pageY = cY;
72 | // clear coordinate data from state object
73 | delete s.pX; delete s.pY;
74 | return cfg.over.apply($el[0],[ev]);
75 | } else {
76 | // set previous coordinates for next comparison
77 | s.pX = cX; s.pY = cY;
78 | // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
79 | s.timeoutId = setTimeout( function(){compare(ev, $el, s, cfg);} , cfg.interval );
80 | }
81 | };
82 |
83 | // triggers given `out` function at configured `timeout` after a mouseleave and clears state
84 | var delay = function(ev,$el,s,out) {
85 | delete $el.data('hoverIntent')[s.id];
86 | return out.apply($el[0],[ev]);
87 | };
88 |
89 | $.fn.hoverIntent = function(handlerIn,handlerOut,selector) {
90 | // instance ID, used as a key to store and retrieve state information on an element
91 | var instanceId = INSTANCE_COUNT++;
92 |
93 | // extend the default configuration and parse parameters
94 | var cfg = $.extend({}, _cfg);
95 | if ( $.isPlainObject(handlerIn) ) {
96 | cfg = $.extend(cfg, handlerIn);
97 | if ( !$.isFunction(cfg.out) ) {
98 | cfg.out = cfg.over;
99 | }
100 | } else if ( $.isFunction(handlerOut) ) {
101 | cfg = $.extend(cfg, { over: handlerIn, out: handlerOut, selector: selector } );
102 | } else {
103 | cfg = $.extend(cfg, { over: handlerIn, out: handlerIn, selector: handlerOut } );
104 | }
105 |
106 | // A private function for handling mouse 'hovering'
107 | var handleHover = function(e) {
108 | // cloned event to pass to handlers (copy required for event object to be passed in IE)
109 | var ev = $.extend({},e);
110 |
111 | // the current target of the mouse event, wrapped in a jQuery object
112 | var $el = $(this);
113 |
114 | // read hoverIntent data from element (or initialize if not present)
115 | var hoverIntentData = $el.data('hoverIntent');
116 | if (!hoverIntentData) { $el.data('hoverIntent', (hoverIntentData = {})); }
117 |
118 | // read per-instance state from element (or initialize if not present)
119 | var state = hoverIntentData[instanceId];
120 | if (!state) { hoverIntentData[instanceId] = state = { id: instanceId }; }
121 |
122 | // state properties:
123 | // id = instance ID, used to clean up data
124 | // timeoutId = timeout ID, reused for tracking mouse position and delaying "out" handler
125 | // isActive = plugin state, true after `over` is called just until `out` is called
126 | // pX, pY = previously-measured pointer coordinates, updated at each polling interval
127 | // event = string representing the namespaced event used for mouse tracking
128 |
129 | // clear any existing timeout
130 | if (state.timeoutId) { state.timeoutId = clearTimeout(state.timeoutId); }
131 |
132 | // namespaced event used to register and unregister mousemove tracking
133 | var mousemove = state.event = 'mousemove.hoverIntent.hoverIntent'+instanceId;
134 |
135 | // handle the event, based on its type
136 | if (e.type === 'mouseenter') {
137 | // do nothing if already active
138 | if (state.isActive) { return; }
139 | // set "previous" X and Y position based on initial entry point
140 | state.pX = ev.pageX; state.pY = ev.pageY;
141 | // update "current" X and Y position based on mousemove
142 | $el.off(mousemove,track).on(mousemove,track);
143 | // start polling interval (self-calling timeout) to compare mouse coordinates over time
144 | state.timeoutId = setTimeout( function(){compare(ev,$el,state,cfg);} , cfg.interval );
145 | } else { // "mouseleave"
146 | // do nothing if not already active
147 | if (!state.isActive) { return; }
148 | // unbind expensive mousemove event
149 | $el.off(mousemove,track);
150 | // if hoverIntent state is true, then call the mouseOut function after the specified delay
151 | state.timeoutId = setTimeout( function(){delay(ev,$el,state,cfg.out);} , cfg.timeout );
152 | }
153 | };
154 |
155 | // listen for mouseenter and mouseleave
156 | return this.on({'mouseenter.hoverIntent':handleHover,'mouseleave.hoverIntent':handleHover}, cfg.selector);
157 | };
158 | });
159 |
--------------------------------------------------------------------------------
/root/opt/config/www/lib/superfish/superfish.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * jQuery Superfish Menu Plugin - v1.7.9
3 | * Copyright (c) 2016 Joel Birch
4 | *
5 | * Dual licensed under the MIT and GPL licenses:
6 | * http://www.opensource.org/licenses/mit-license.php
7 | * http://www.gnu.org/licenses/gpl.html
8 | */
9 |
10 | ;!function(a,b){"use strict";var c=function(){var c={bcClass:"sf-breadcrumb",menuClass:"sf-js-enabled",anchorClass:"sf-with-ul",menuArrowClass:"sf-arrows"},d=function(){var b=/^(?![\w\W]*Windows Phone)[\w\W]*(iPhone|iPad|iPod)/i.test(navigator.userAgent);return b&&a("html").css("cursor","pointer").on("click",a.noop),b}(),e=function(){var a=document.documentElement.style;return"behavior"in a&&"fill"in a&&/iemobile/i.test(navigator.userAgent)}(),f=function(){return!!b.PointerEvent}(),g=function(a,b,d){var e,f=c.menuClass;b.cssArrows&&(f+=" "+c.menuArrowClass),e=d?"addClass":"removeClass",a[e](f)},h=function(b,d){return b.find("li."+d.pathClass).slice(0,d.pathLevels).addClass(d.hoverClass+" "+c.bcClass).filter(function(){return a(this).children(d.popUpSelector).hide().show().length}).removeClass(d.pathClass)},i=function(a,b){var d=b?"addClass":"removeClass";a.children("a")[d](c.anchorClass)},j=function(a){var b=a.css("ms-touch-action"),c=a.css("touch-action");c=c||b,c="pan-y"===c?"auto":"pan-y",a.css({"ms-touch-action":c,"touch-action":c})},k=function(a){return a.closest("."+c.menuClass)},l=function(a){return k(a).data("sfOptions")},m=function(){var b=a(this),c=l(b);clearTimeout(c.sfTimer),b.siblings().superfish("hide").end().superfish("show")},n=function(b){b.retainPath=a.inArray(this[0],b.$path)>-1,this.superfish("hide"),this.parents("."+b.hoverClass).length||(b.onIdle.call(k(this)),b.$path.length&&a.proxy(m,b.$path)())},o=function(){var b=a(this),c=l(b);d?a.proxy(n,b,c)():(clearTimeout(c.sfTimer),c.sfTimer=setTimeout(a.proxy(n,b,c),c.delay))},p=function(b){var c=a(this),d=l(c),e=c.siblings(b.data.popUpSelector);return d.onHandleTouch.call(e)===!1?this:void(e.length>0&&e.is(":hidden")&&(c.one("click.superfish",!1),"MSPointerDown"===b.type||"pointerdown"===b.type?c.trigger("focus"):a.proxy(m,c.parent("li"))()))},q=function(b,c){var g="li:has("+c.popUpSelector+")";a.fn.hoverIntent&&!c.disableHI?b.hoverIntent(m,o,g):b.on("mouseenter.superfish",g,m).on("mouseleave.superfish",g,o);var h="MSPointerDown.superfish";f&&(h="pointerdown.superfish"),d||(h+=" touchend.superfish"),e&&(h+=" mousedown.superfish"),b.on("focusin.superfish","li",m).on("focusout.superfish","li",o).on(h,"a",c,p)};return{hide:function(b){if(this.length){var c=this,d=l(c);if(!d)return this;var e=d.retainPath===!0?d.$path:"",f=c.find("li."+d.hoverClass).add(this).not(e).removeClass(d.hoverClass).children(d.popUpSelector),g=d.speedOut;if(b&&(f.show(),g=0),d.retainPath=!1,d.onBeforeHide.call(f)===!1)return this;f.stop(!0,!0).animate(d.animationOut,g,function(){var b=a(this);d.onHide.call(b)})}return this},show:function(){var a=l(this);if(!a)return this;var b=this.addClass(a.hoverClass),c=b.children(a.popUpSelector);return a.onBeforeShow.call(c)===!1?this:(c.stop(!0,!0).animate(a.animation,a.speed,function(){a.onShow.call(c)}),this)},destroy:function(){return this.each(function(){var b,d=a(this),e=d.data("sfOptions");return e?(b=d.find(e.popUpSelector).parent("li"),clearTimeout(e.sfTimer),g(d,e),i(b),j(d),d.off(".superfish").off(".hoverIntent"),b.children(e.popUpSelector).attr("style",function(a,b){return b.replace(/display[^;]+;?/g,"")}),e.$path.removeClass(e.hoverClass+" "+c.bcClass).addClass(e.pathClass),d.find("."+e.hoverClass).removeClass(e.hoverClass),e.onDestroy.call(d),void d.removeData("sfOptions")):!1})},init:function(b){return this.each(function(){var d=a(this);if(d.data("sfOptions"))return!1;var e=a.extend({},a.fn.superfish.defaults,b),f=d.find(e.popUpSelector).parent("li");e.$path=h(d,e),d.data("sfOptions",e),g(d,e,!0),i(f,!0),j(d),q(d,e),f.not("."+c.bcClass).superfish("hide",!0),e.onInit.call(this)})}}}();a.fn.superfish=function(b,d){return c[b]?c[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?a.error("Method "+b+" does not exist on jQuery.fn.superfish"):c.init.apply(this,arguments)},a.fn.superfish.defaults={popUpSelector:"ul,.sf-mega",hoverClass:"sfHover",pathClass:"overrideThisToUse",pathLevels:1,delay:800,animation:{opacity:"show"},animationOut:{opacity:"hide"},speed:"normal",speedOut:"fast",cssArrows:!0,disableHI:!1,onInit:a.noop,onBeforeShow:a.noop,onShow:a.noop,onBeforeHide:a.noop,onHide:a.noop,onIdle:a.noop,onDestroy:a.noop,onHandleTouch:a.noop}}(jQuery,window);
--------------------------------------------------------------------------------
/root/opt/f2b/fail2ban.local:
--------------------------------------------------------------------------------
1 | # NowShowing Fail2Ban config
2 | #
3 | # [Definition]
4 | # loglevel = DEBUG
5 | #
6 |
7 | [Definition]
8 |
9 | # Option: loglevel
10 | # Notes.: Set the log level output.
11 | # CRITICAL
12 | # ERROR
13 | # WARNING
14 | # NOTICE
15 | # INFO
16 | # DEBUG
17 | # Values: [ LEVEL ] Default: ERROR
18 | #
19 | loglevel = INFO
20 |
21 | # Option: logtarget
22 | # Notes.: Set the log target. This could be a file, SYSLOG, STDERR or STDOUT.
23 | # Only one log target can be specified.
24 | # If you change logtarget from the default value and you are
25 | # using logrotate -- also adjust or disable rotation in the
26 | # corresponding configuration file
27 | # (e.g. /etc/logrotate.d/fail2ban on Debian systems)
28 | # Values: [ STDOUT | STDERR | SYSLOG | FILE ] Default: STDERR
29 | #
30 | logtarget = /config/logs/fail2ban.log
31 |
32 | # Option: syslogsocket
33 | # Notes: Set the syslog socket file. Only used when logtarget is SYSLOG
34 | # auto uses platform.system() to determine predefined paths
35 | # Values: [ auto | FILE ] Default: auto
36 | syslogsocket = auto
37 |
38 | # Option: socket
39 | # Notes.: Set the socket file. This is used to communicate with the daemon. Do
40 | # not remove this file when Fail2ban runs. It will not be possible to
41 | # communicate with the server afterwards.
42 | # Values: [ FILE ] Default: /var/run/fail2ban/fail2ban.sock
43 | #
44 | socket = /var/run/fail2ban/fail2ban.sock
45 |
46 | # Option: pidfile
47 | # Notes.: Set the PID file. This is used to store the process ID of the
48 | # fail2ban server.
49 | # Values: [ FILE ] Default: /var/run/fail2ban/fail2ban.pid
50 | #
51 | pidfile = /var/run/fail2ban/fail2ban.pid
52 |
53 | # Options: dbfile
54 | # Notes.: Set the file for the fail2ban persistent data to be stored.
55 | # A value of ":memory:" means database is only stored in memory
56 | # and data is lost when fail2ban is stopped.
57 | # A value of "None" disables the database.
58 | # Values: [ None :memory: FILE ] Default: /var/lib/fail2ban/fail2ban.sqlite3
59 | dbfile = None
60 |
61 | # Options: dbpurgeage
62 | # Notes.: Sets age at which bans should be purged from the database
63 | # Values: [ SECONDS ] Default: 86400 (24hours)
64 | # dbpurgeage = 1d
65 |
--------------------------------------------------------------------------------
/root/opt/f2b/iptables-common.conf:
--------------------------------------------------------------------------------
1 | # Fail2Ban configuration file
2 | #
3 | # Author: Daniel Black
4 | #
5 | # This is a included configuration file and includes the definitions for the iptables
6 | # used in all iptables based actions by default.
7 | #
8 | # The user can override the defaults in iptables-common.local
9 | #
10 | # Modified: Alexander Koeppe , Serg G. Brester
11 | # made config file IPv6 capable (see new section Init?family=inet6)
12 |
13 | [INCLUDES]
14 |
15 | after = iptables-blocktype.local
16 | iptables-common.local
17 | # iptables-blocktype.local is obsolete
18 |
19 |
20 | [Init]
21 |
22 | # Option: chain
23 | # Notes specifies the iptables chain to which the Fail2Ban rules should be
24 | # added
25 | # Values: STRING Default: INPUT
26 | chain = INPUT
27 |
28 | # Default name of the chain
29 | #
30 | name = default
31 |
32 | # Option: port
33 | # Notes.: specifies port to monitor
34 | # Values: [ NUM | STRING ] Default:
35 | #
36 | port = ssh
37 |
38 | # Option: protocol
39 | # Notes.: internally used by config reader for interpolations.
40 | # Values: [ tcp | udp | icmp | all ] Default: tcp
41 | #
42 | protocol = tcp
43 |
44 | # Option: blocktype
45 | # Note: This is what the action does with rules. This can be any jump target
46 | # as per the iptables man page (section 8). Common values are DROP
47 | # REJECT, REJECT --reject-with icmp-port-unreachable
48 | # Values: STRING
49 | blocktype = REJECT --reject-with icmp-port-unreachable
50 |
51 | # Option: returntype
52 | # Note: This is the default rule on "actionstart". This should be RETURN
53 | # in all (blocking) actions, except REJECT in allowing actions.
54 | # Values: STRING
55 | returntype = RETURN
56 |
57 | # Option: lockingopt
58 | # Notes.: Option was introduced to iptables to prevent multiple instances from
59 | # running concurrently and causing irratic behavior. -w was introduced
60 | # in iptables 1.4.20, so might be absent on older systems
61 | # See https://github.com/fail2ban/fail2ban/issues/1122
62 | # Values: STRING
63 | lockingopt = -w
64 |
65 | # Option: iptables
66 | # Notes.: Actual command to be executed, including common to all calls options
67 | # Values: STRING
68 | iptables = iptables
69 |
70 |
71 | #[Init?family=inet6]
72 |
73 | # Option: blocktype (ipv6)
74 | # Note: This is what the action does with rules. This can be any jump target
75 | # as per the iptables man page (section 8). Common values are DROP
76 | # REJECT, REJECT --reject-with icmp6-port-unreachable
77 | # Values: STRING
78 | #blocktype = REJECT --reject-with icmp6-port-unreachable
79 |
80 | # Option: iptables (ipv6)
81 | # Notes.: Actual command to be executed, including common to all calls options
82 | # Values: STRING
83 | #iptables = ip6tables
84 |
85 |
--------------------------------------------------------------------------------
/root/opt/f2b/jail.local:
--------------------------------------------------------------------------------
1 | # NowShowing Jail
2 | #
3 | # The DEFAULT allows a global definition of the options. They can be overridden
4 | # in each jail afterwards.
5 |
6 | [DEFAULT]
7 |
8 | #
9 | # MISCELLANEOUS OPTIONS
10 | #
11 |
12 | # "usedns" specifies if jails should trust hostnames in logs,
13 | # warn when DNS lookups are performed, or ignore all hostnames in logs
14 | #
15 | # yes: if a hostname is encountered, a DNS lookup will be performed.
16 | # warn: if a hostname is encountered, a DNS lookup will be performed,
17 | # but it will be logged as a warning.
18 | # no: if a hostname is encountered, will not be used for banning,
19 | # but it will be logged as info.
20 | # raw: use raw value (no hostname), allow use it for no-host filters/actions (example user)
21 | usedns = warn
22 |
23 | # "logencoding" specifies the encoding of the log files handled by the jail
24 | # This is used to decode the lines from the log file.
25 | # Typical examples: "ascii", "utf-8"
26 | # auto: will use the system locale setting
27 | logencoding = auto
28 |
29 | #defaul disable jail rule
30 | enabled = false
31 |
32 | #
33 | # ACTIONS
34 | #
35 |
36 | # Specify chain where jumps would need to be added in iptables-* actions
37 | chain = INPUT
38 |
39 | # Format of user-agent https://tools.ietf.org/html/rfc7231#section-5.5.3
40 | fail2ban_agent = Fail2Ban/%(fail2ban_version)s
41 |
42 | #
43 | # JAILS
44 | #
45 |
46 | [nowshowing]
47 | enabled = true
48 | filter = nowshowing
49 | action = iptables[name=NOWSHOWING, port="6878", protocol=TCP]
50 | logpath = /config/logs/lighttpd_access.log
51 | bantime = 10m
52 | findtime = 5m
53 | maxretry = 15
54 | backend = polling
55 | ignoreip = 127.0.0.1/8 ::1
56 |
--------------------------------------------------------------------------------
/root/opt/f2b/nowshowing.conf:
--------------------------------------------------------------------------------
1 | [Definition]
2 | failregex = ^ .* "POST /admin
3 | ignoreregex =
4 |
--------------------------------------------------------------------------------
/root/opt/gem/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | gem 'json', '1.8.2'
4 | gem 'httparty', '0.13.1'
5 | gem 'mail', '2.6.3'
6 | gem 'logger', '1.2.8'
7 | gem 'highline', '1.7.1'
8 | gem 'i18n', '0.7.0'
9 |
--------------------------------------------------------------------------------
/root/opt/gem/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | highline (1.7.1)
5 | httparty (0.13.1)
6 | json (1.8.2)
7 | multi_xml (>= 0.5.2)
8 | i18n (0.7.0)
9 | json (1.8.2)
10 | logger (1.2.8)
11 | mail (2.6.3)
12 | mime-types (>= 1.16, < 3)
13 | mime-types (2.4.3)
14 | multi_xml (0.5.5)
15 |
16 | PLATFORMS
17 | ruby
18 |
19 | DEPENDENCIES
20 | highline (= 1.7.1)
21 | httparty (= 0.13.1)
22 | i18n (= 0.7.0)
23 | json (= 1.8.2)
24 | logger (= 1.2.8)
25 | mail (= 2.6.3)
26 |
--------------------------------------------------------------------------------
/root/opt/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Now Showing
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | Admin
43 |
46 |
47 |
48 |
49 |
50 |
51 |

52 |
53 |
54 |
55 |
Just added: Laughs, Screams, Thrills, Entertainment
56 |
62 |
63 |
64 |
65 |
66 |
69 |
91 |
92 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
THIS WILL BE UPDATED AFTER YOU RUN YOUR FIRST REPORT!
109 |
Click here to access the admin page.
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
162 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
--------------------------------------------------------------------------------
/root/opt/php/changepass.php:
--------------------------------------------------------------------------------
1 | '$pass'";
11 | file_put_contents($login_file , implode("\n", $lines));
12 | }
13 | else {
14 | echo "Fill in username/password fields";
15 | }
16 |
17 | # delete cookie and logout
18 | setcookie("NowShowing", '', -1, '/');
19 | header("Location: http://".$_SERVER['HTTP_HOST']."/admin");
20 | exit;
21 | }
22 | exit;
23 | ?>
24 |
--------------------------------------------------------------------------------
/root/opt/php/loadadvanced.php:
--------------------------------------------------------------------------------
1 | New Version Available!
Update your docker image for latest $cur_ver release.";
49 | }
50 | else {
51 | $update_available = "";
52 | }
53 | ?>
54 |
--------------------------------------------------------------------------------
/root/opt/php/randomPass.php:
--------------------------------------------------------------------------------
1 | \'$pass\'/\" /config/cfg/secure.php");
15 | ?>
--------------------------------------------------------------------------------
/root/opt/php/reset.php:
--------------------------------------------------------------------------------
1 |
21 |
22 |
--------------------------------------------------------------------------------
/root/opt/php/run_announcement.php:
--------------------------------------------------------------------------------
1 |
48 |
--------------------------------------------------------------------------------
/root/opt/php/run_gettoken_pipes.php:
--------------------------------------------------------------------------------
1 | array("pipe", "r"), // stdin is a pipe that the child will read from
9 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to
10 | 2 => array("file", "/config/logs/plex_token_errors.log", "a") // stderr is a file to write to
11 | );
12 | $process = proc_open('ruby /usr/local/sbin/gettoken-pipes', $descriptorspec, $pipes);
13 |
14 | if (is_resource($process)) {
15 | $userpass = strip_tags($_POST['plex_username']) . '|+/+/+|' . strip_tags($_POST['plex_password']);
16 | fwrite($pipes[0], $userpass);
17 | fclose($pipes[0]);
18 |
19 | $stream = stream_get_contents($pipes[1]);
20 | $stream = str_replace("\n", '', $stream);
21 | $stream = explode(" ",$stream);
22 | $token = $stream[0];
23 | $avatar = isset($stream[1]) ? $stream[1] : "";
24 | fclose($pipes[1]);
25 | proc_close($process);
26 | }
27 |
28 | if (!empty($token)) {
29 | # save token to advanced.yaml
30 | $adv_array = Spyc::YAMLLoad('../../cfg/advanced.yaml');
31 | $adv_array['token'] = array('api_key' => $token);
32 | $adv_yaml = Spyc::YAMLDump($adv_array,2,0);
33 | file_put_contents($adv_file, $adv_yaml);
34 |
35 | # d/l gravatar avatar
36 | exec("wget $avatar -O /config/www/img/avatar.png");
37 |
38 | $statustext = "Plex Token Saved!";
39 | $tokenarray = array( 'token' => $token, 'statustext' => $statustext);
40 | echo json_encode($tokenarray);
41 | exit;
42 | }
43 | else {
44 | $statustext = "Error: Verify username/password!";
45 | $tokenarray = array( 'statustext' => $statustext);
46 | echo json_encode($tokenarray);
47 | exit;
48 | }
49 | }
50 | echo "Check username/password!";
51 | exit;
52 | ?>
53 |
--------------------------------------------------------------------------------
/root/opt/php/run_ondemand_report.php:
--------------------------------------------------------------------------------
1 |
17 |
18 |
--------------------------------------------------------------------------------
/root/opt/php/run_tautulli_check.php:
--------------------------------------------------------------------------------
1 | array("pipe", "r"), // stdin is a pipe that the child will read from
9 | 1 => array("pipe", "w"), // stdout is a pipe that the child will write to
10 | 2 => array("file", "/config/logs/nowshowing.log", "a") // stderr is a file to write to
11 | );
12 | $process = proc_open('ruby /usr/local/sbin/tautulli_check', $descriptorspec, $pipes);
13 |
14 | if (is_resource($process)) {
15 | $stream = stream_get_contents($pipes[1]);
16 | $stream = str_replace("\n", '', $stream);
17 | $testy = isset($stream[0]) ? $stream[0] : "failed";
18 | fclose($pipes[1]);
19 | proc_close($process);
20 | }
21 |
22 | if ($testy == "s") {
23 | echo "Successful!";
24 | exit;
25 | }
26 | elseif ($testy == "e") {
27 | echo "Check API key!";
28 | exit;
29 | }
30 | else {
31 | echo "Failed!";
32 | exit;
33 | }
34 | }
35 | echo "Error: Could not divide by zero!";
36 | exit;
37 | ?>
38 |
--------------------------------------------------------------------------------
/root/opt/php/run_test_report.php:
--------------------------------------------------------------------------------
1 |
56 |
57 |
--------------------------------------------------------------------------------
/root/opt/php/writeadvanced.php:
--------------------------------------------------------------------------------
1 | strip_tags($_POST['title']), 'image' => strip_tags($_POST['image']), 'footer' => strip_tags($_POST['footer']), 'language' => strip_tags($_POST['language']));
51 | $adv_array['web'] = array('title_image' => strip_tags($_POST['title_image']), 'logo' => strip_tags($_POST['logo']), 'headline_title' => strip_tags($_POST['headline_title']), 'headliners' => strip_tags($_POST['headliners']), 'footer' => strip_tags($_POST['web_footer']), 'language' => strip_tags($_POST['web_language']));
52 | $adv_array['plex'] = array('plex_user_emails' => strip_tags($_POST['plex_user_emails']), 'libraries_to_skip' => $libraries_to_skip, 'server' => strip_tags($_POST['server']));
53 | $adv_array['mail'] = array('from' => strip_tags($_POST['from']), 'subject' => strip_tags($_POST['subject']), 'recipients_email' => $recipients_email, 'recipients' => $recipients, 'provider' => $provider, 'address' => $smtp_address, 'port' => $smtp_port, 'username' => strip_tags($_POST['email_username']), 'password' => $_POST['email_password']);
54 | $adv_array['report'] = array('interval' => strip_tags($_POST['interval']), 'report_type' => strip_tags($_POST['report_type']), 'email_report_time' => strip_tags($_POST['email_report_time']), 'web_report_time' => strip_tags($_POST['web_report_time']), 'extra_details' => strip_tags($_POST['extra_details']), 'test' => strip_tags($_POST['test']));
55 | $adv_array['tautulli'] = array('server' => strip_tags($_POST['plexpy_server']), 'port' => strip_tags($_POST['plexpy_port']), 'https' => strip_tags($_POST['plexpy_https']), 'httproot' => strip_tags($_POST['plexpy_root']), 'api_key' => strip_tags($_POST['plexpy_api']), 'title' => strip_tags($_POST['plexpy_title']), 'stats' => strip_tags($stats));
56 | $adv_array['token'] = array('api_key' => strip_tags($_POST['plex_token']));
57 |
58 | $adv_yaml = Spyc::YAMLDump($adv_array,2,0);
59 | file_put_contents($adv_file, $adv_yaml);
60 |
61 | # delete current cron entries and creat new cron
62 | exec("/usr/local/sbin/create-cron && crontab /opt/nowshowing_schedule.cron");
63 |
64 | #header("Location: index2.php");
65 | #header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
66 | #header("Location: http://".$_SERVER['HTTP_HOST']."/admin");
67 | echo "Settings Saved!";
68 | }
69 | else {
70 | echo "Error: Failed to save settings!";
71 | }
72 | exit;
73 | ?>
74 |
75 |
--------------------------------------------------------------------------------
/root/opt/php/writeannouncement.php:
--------------------------------------------------------------------------------
1 |
27 |
--------------------------------------------------------------------------------
/root/opt/php/writesetup.php:
--------------------------------------------------------------------------------
1 | '$pass'";
16 | file_put_contents($login_file , implode("\n", $lines));
17 |
18 | # email provider selection
19 | switch ($provider) {
20 | case 'gmail':
21 | $smtp_address = 'smtp.gmail.com';
22 | $smtp_port = '587';
23 | break;
24 | case 'yahoo':
25 | $smtp_address = 'smtp.mail.yahoo.com';
26 | $smtp_port = '587';
27 | break;
28 | case 'microsoft':
29 | $smtp_address = 'smtp.live.com';
30 | $smtp_port = '587';
31 | break;
32 | case 'office365':
33 | $smtp_address = 'smtp.office365.com';
34 | $smtp_port = '587';
35 | break;
36 | case 'mail.com':
37 | $smtp_address = 'smtp.mail.com';
38 | $smtp_port = '587';
39 | break;
40 | case 'zoho':
41 | $smtp_address = 'smtp.zoho.com';
42 | $smtp_port = '587';
43 | break;
44 | case 'other':
45 | $smtp_address = strip_tags($_POST['smtp_address']);
46 | $smtp_port = strip_tags($_POST['smtp_port']);
47 | break;
48 | }
49 |
50 | # save main settings to advanced.yaml
51 | $adv_array['plex'] = array('plex_user_emails' => "yes", 'libraries_to_skip' => "", 'server' => strip_tags($_POST['server']));
52 | $adv_array['mail'] = array('from' => "Plex Server", 'subject' => "Now Showing", 'recipients_email' => "", 'recipients' => "", 'provider' => $provider, 'address' => $smtp_address, 'port' => $smtp_port, 'username' => strip_tags($_POST['email_username']), 'password' => $_POST['email_password']);
53 |
54 | if (!empty($_POST['plex_token'])) {
55 | $adv_array['token'] = array('api_key' => strip_tags($_POST['plex_token']));
56 | }
57 |
58 | $adv_yaml = Spyc::YAMLDump($adv_array,2,0);
59 | file_put_contents($adv_file, $adv_yaml);
60 |
61 | unlink('/config/www/admin/index.html');
62 | unlink('/config/www/admin/gettoken-pipes-setup.php');
63 | unlink('/config/www/admin/save_setup.php');
64 | echo "Setup Completed!";
65 | }
66 | else {
67 | echo "Error: Failed to finish setup!";
68 | }
69 | exit;
70 | ?>
71 |
72 |
--------------------------------------------------------------------------------
/root/usr/local/sbin/announcementreport:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 |
3 | require 'rubygems'
4 | require 'time'
5 | require 'date'
6 | require 'yaml'
7 | require 'erb'
8 | require 'logger'
9 | require 'optparse'
10 | require 'pp'
11 |
12 | require_relative '/var/lib/nowshowing/plex'
13 | require_relative '/var/lib/nowshowing/mailAnnouncement'
14 |
15 | # Class for parsing the Plex server for new movies and TV Shows
16 | #
17 | # Author: Brian Stascavage
18 | # Email: brian@stascavage.com
19 | # Modified by: ninthwalker & GroxyPod
20 | #
21 | class Report
22 | $options = {
23 | :emails => true,
24 | :test_email => false,
25 | :debug => false
26 | }
27 |
28 | OptionParser.new do |opts|
29 |
30 | opts.on("-n", "--no-plex-email", "Do not send emails to Plex friends") do |opt|
31 | $options[:emails] = false
32 | end
33 |
34 | opts.on("-t", "--test-email", "Send email only to the Plex owner (ie yourself). For testing purposes") do |opt|
35 | $options[:test_email] = true
36 | end
37 |
38 | opts.on("-v", "--verbose", "Enable verbose debug logging") do |opt|
39 | $options[:verbose] = true
40 | end
41 | end.parse!
42 |
43 | def initialize
44 | begin
45 | $advanced = YAML.load_file('/config/cfg/advanced.yaml')
46 | $announcement = File.read('/config/announcement_body.html')
47 |
48 | # Log-rotate if greater than 25M
49 | logsize_ns = File.size('/config/logs/nowshowing.log')
50 | logsize_plx = File.size('/config/logs/plex_token_errors.log')
51 |
52 | if logsize_ns > 25000000
53 | File.delete('/config/logs/nowshowing.log')
54 | File.write('/config/logs/nowshowing.log', "")
55 | end
56 | if logsize_plx > 25000000
57 | File.delete('/config/logs/plex_token_errors.log')
58 | File.write('/config/logs/plex_token_errors.log', "")
59 | end
60 |
61 | rescue Errno::ENOENT => e
62 | abort('Configuration file not found. Exiting...')
63 | end
64 |
65 | begin
66 | $logger = Logger.new('/config/logs/nowshowing.log')
67 |
68 | if $options[:verbose]
69 | $logger.level = Logger::DEBUG
70 | else
71 | $logger.level = Logger::INFO
72 | end
73 | rescue
74 | abort('Log file not found. Exiting...')
75 | end
76 | end
77 | end
78 |
79 | # Main method that starts the report
80 | def main
81 | report = Report.new
82 |
83 | YAML.load_file('/config/cfg/advanced.yaml')
84 | template = ERB.new File.new("/opt/announcement_email_body.erb").read, nil, "%"
85 | mail = MailReport.new($advanced, $options)
86 |
87 | mail.sendMail(template.result(binding))
88 |
89 | $logger.info("Announcement Email Sent.")
90 | end
91 | main()
92 |
--------------------------------------------------------------------------------
/root/usr/local/sbin/create-cron:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 | require 'yaml'
3 |
4 | #variables
5 | advanced = YAML.load_file('/config/cfg/advanced.yaml')
6 | reporttype = advanced['report']['report_type']
7 | webtime = advanced['report']['web_report_time']
8 | emailtime = advanced['report']['email_report_time']
9 | details = advanced['report']['extra_details']
10 | plexusers = advanced['plex']['plex_user_emails']
11 | test = advanced['report']['test']
12 |
13 | case
14 | when test == 'enable'
15 | File.write("/opt/nowshowing_schedule.cron", "#{emailtime} combinedreport -t &> /dev/null")
16 |
17 | when reporttype == 'both' && plexusers == 'yes' && details == 'yes'
18 | File.write("/opt/nowshowing_schedule.cron", "#{webtime} webreport -d &> /dev/null\n#{emailtime} emailreport -d &> /dev/null")
19 |
20 | when reporttype == 'both' && plexusers == 'yes' && details == 'no'
21 | File.write("/opt/nowshowing_schedule.cron", "#{webtime} webreport &> /dev/null\n#{emailtime} emailreport &> /dev/null")
22 |
23 | when reporttype == 'both' && plexusers == 'no' && details == 'yes'
24 | File.write("/opt/nowshowing_schedule.cron", "#{webtime} webreport -n -d &> /dev/null\n#{emailtime} emailreport -n -d &> /dev/null")
25 |
26 | when reporttype == 'both' && plexusers == 'no' && details == 'no'
27 | File.write("/opt/nowshowing_schedule.cron", "#{webtime} webreport -n &> /dev/null\n#{emailtime} emailreport -n &> /dev/null")
28 |
29 | when reporttype == 'emailonly' && plexusers == 'yes' && details == 'yes'
30 | File.write("/opt/nowshowing_schedule.cron", "#{emailtime} emailreport -d &> /dev/null")
31 |
32 | when reporttype == 'emailonly' && plexusers == 'yes' && details == 'no'
33 | File.write("/opt/nowshowing_schedule.cron", "#{emailtime} emailreport &> /dev/null")
34 |
35 | when reporttype == 'emailonly' && plexusers == 'no' && details == 'yes'
36 | File.write("/opt/nowshowing_schedule.cron", "#{emailtime} emailreport -n -d &> /dev/null")
37 |
38 | when reporttype == 'emailonly' && plexusers == 'no' && details == 'no'
39 | File.write("/opt/nowshowing_schedule.cron", "#{emailtime} emailreport -n &> /dev/null")
40 |
41 | when reporttype == 'webonly' && plexusers == 'yes' && details == 'yes'
42 | File.write("/opt/nowshowing_schedule.cron", "#{webtime} webreport -d &> /dev/null")
43 |
44 | when reporttype == 'webonly' && plexusers == 'yes' && details == 'no'
45 | File.write("/opt/nowshowing_schedule.cron", "#{webtime} webreport &> /dev/null")
46 |
47 | when reporttype == 'webonly' && plexusers == 'no' && details == 'yes'
48 | File.write("/opt/nowshowing_schedule.cron", "#{webtime} webreport -n -d &> /dev/null")
49 |
50 | when reporttype == 'webonly' && plexusers == 'no' && details == 'no'
51 | File.write("/opt/nowshowing_schedule.cron", "#{webtime} webreport -n &> /dev/null")
52 | end
53 |
--------------------------------------------------------------------------------
/root/usr/local/sbin/gettoken-pipes:
--------------------------------------------------------------------------------
1 | #!/usr/bin/with-contenv ruby
2 | require 'rubygems'
3 | require 'json'
4 | require 'httparty'
5 |
6 | # Retrive Plex Token
7 | # Called from a PHP script with proc_open
8 | # Author: Ninthwalker
9 | # Email: ninthwalker@gmail.com
10 |
11 | class Setup
12 |
13 | include HTTParty
14 | base_uri 'https://plex.tv'
15 | format :xml
16 | #debug_output $stderr
17 |
18 | def getPlexToken
19 | $lines = ARGF.readlines(sep="|+/+/+|")
20 | $plexusername = $lines[0].chomp('|+/+/+|')
21 | $plexpassword = $lines[1]
22 | $UUID = rand(4674..77238345694)
23 | auth = {:username => $plexusername, :password => $plexpassword}
24 |
25 | headers = {
26 | "X-Plex-Product" => "NowShowing",
27 | "X-Plex-Version" => "2.0",
28 | "X-Plex-Client-Identifier" => "$UUID"
29 | }
30 | owner = self.class.post("/users/sign_in.xml", :basic_auth => auth, :headers => headers)
31 | $token = owner['user']['authToken'] + " " + owner['user']['thumb']
32 | end
33 |
34 | def start
35 | self.getPlexToken
36 | puts $token
37 | end
38 | end
39 |
40 | begin
41 | setup_agent = Setup.new
42 | setup_agent.start
43 | rescue
44 | $stderr.puts "Check plex username/password"
45 | end
46 |
--------------------------------------------------------------------------------
/root/usr/local/sbin/ondemand_report:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 | require 'yaml'
3 |
4 | #variables
5 | advanced = YAML.load_file('/config/cfg/advanced.yaml')
6 | reporttype = advanced['report']['report_type']
7 | webtime = advanced['report']['web_report_time']
8 | emailtime = advanced['report']['email_report_time']
9 | details = advanced['report']['extra_details']
10 | plexusers = advanced['plex']['plex_user_emails']
11 | test = advanced['report']['test']
12 |
13 | case
14 | when test == 'enable'
15 | exec('combinedreport -t')
16 |
17 | when reporttype == 'both' && plexusers == 'yes' && details == 'yes'
18 | exec('combinedreport -d')
19 |
20 | when reporttype == 'both' && plexusers == 'yes' && details == 'no'
21 | exec('combinedreport')
22 |
23 | when reporttype == 'both' && plexusers == 'no' && details == 'yes'
24 | exec('combinedreport -n -d')
25 |
26 | when reporttype == 'both' && plexusers == 'no' && details == 'no'
27 | exec('combinedreport -n')
28 |
29 | when reporttype == 'emailonly' && plexusers == 'yes' && details == 'yes'
30 | exec('emailreport -d')
31 |
32 | when reporttype == 'emailonly' && plexusers == 'yes' && details == 'no'
33 | exec('emailreport')
34 |
35 | when reporttype == 'emailonly' && plexusers == 'no' && details == 'yes'
36 | exec('emailreport -n -d')
37 |
38 | when reporttype == 'emailonly' && plexusers == 'no' && details == 'no'
39 | exec('emailreport -n')
40 |
41 | when reporttype == 'webonly' && plexusers == 'yes' && details == 'yes'
42 | exec('webreport -d')
43 |
44 | when reporttype == 'webonly' && plexusers == 'yes' && details == 'no'
45 | exec('webreport')
46 |
47 | when reporttype == 'webonly' && plexusers == 'no' && details == 'yes'
48 | exec('webreport -n -d')
49 |
50 | when reporttype == 'webonly' && plexusers == 'no' && details == 'no'
51 | exec('webreport -n')
52 | end
53 |
--------------------------------------------------------------------------------
/root/usr/local/sbin/tautulli_check:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 | require 'timeout'
3 | require_relative '/var/lib/nowshowing/tautulli'
4 |
5 | Timeout::timeout(8) {
6 | begin
7 | t = Tautulli.new
8 | t.test_connection
9 | puts t.test_result
10 | rescue
11 | $stderr.puts "Failed to connect to Tautulli"
12 | end
13 | }
14 |
--------------------------------------------------------------------------------
/root/usr/local/sbin/webserver:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #start lighttpd webserver
4 | lighttpd -D -f /etc/lighttpd/lighttpd.conf
5 |
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/locales/de.yml:
--------------------------------------------------------------------------------
1 | de:
2 | air_date: "Sendedatum"
3 | cast: "Cast"
4 | credits_sentence: "Alle medialen Inhalte, Zusammenfassungen und Metadaten wurden von themoviedb.org und thetvdb.com bereitgestellt"
5 | date:
6 | abbr_day_names:
7 | - So
8 | - Mo
9 | - Di
10 | - Mi
11 | - Do
12 | - Fr
13 | - Sa
14 | abbr_month_names:
15 | -
16 | - Jan
17 | - Feb
18 | - Mär
19 | - Apr
20 | - Mai
21 | - Jun
22 | - Jul
23 | - Aug
24 | - Sep
25 | - Okt
26 | - Nov
27 | - Dez
28 | day_names:
29 | - Sonntag
30 | - Montag
31 | - Dienstag
32 | - Mittwoch
33 | - Donnerstag
34 | - Freitag
35 | - Samstag
36 | formats:
37 | default: "%d.%m.%Y"
38 | long: "%e. %B %Y"
39 | short: "%e. %b"
40 | month_names:
41 | -
42 | - Januar
43 | - Februar
44 | - März
45 | - April
46 | - Mai
47 | - Juni
48 | - Juli
49 | - August
50 | - September
51 | - Oktober
52 | - November
53 | - Dezember
54 | order:
55 | - :day
56 | - :month
57 | - :year
58 | director: "Regie"
59 | from: "für"
60 | genre: "Genre"
61 | help_page_sentence: "Ein Problem? Diese Seite gefällt Ihnen? Sie möchten helfen? Dann schauen Sie doch einmal auf meiner github-Seite vorbei!"
62 | imdb_rating: "IMDB-Rating"
63 | minutes: "Minuten"
64 | network: "Sender"
65 | new_episodes: "Neue Episoden"
66 | new_movies: "Neue Filme"
67 | new_seasons: "Neue Staffeln"
68 | rating: "Note"
69 | release_date: "Erscheinungsdatum"
70 | runtime: "Dauer"
71 | seasons: {
72 | one: "Staffel",
73 | other: "Staffeln"
74 | }
75 | thanks_sentence: "Das ist alles, Leute - vielen Dank für's Lesen!"
76 | users: "Benutzer"
77 |
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/locales/en.yml:
--------------------------------------------------------------------------------
1 | en:
2 | air_date: "Air date"
3 | cast: "Cast"
4 | credits_sentence: "Art, summaries, and metadata provided by themoviedb.org and thetvdb.com"
5 | date:
6 | abbr_day_names:
7 | - Sun
8 | - Mon
9 | - Tue
10 | - Wed
11 | - Thu
12 | - Fri
13 | - Sat
14 | abbr_month_names:
15 | -
16 | - Jan
17 | - Feb
18 | - Mar
19 | - Apr
20 | - May
21 | - Jun
22 | - Jul
23 | - Aug
24 | - Sep
25 | - Oct
26 | - Nov
27 | - Dec
28 | day_names:
29 | - Sunday
30 | - Monday
31 | - Tuesday
32 | - Wednesday
33 | - Thursday
34 | - Friday
35 | - Saturday
36 | formats:
37 | default: "%m-%d-%Y"
38 | long: "%B %d, %Y"
39 | short: "%b %d"
40 | month_names:
41 | -
42 | - January
43 | - February
44 | - March
45 | - April
46 | - May
47 | - June
48 | - July
49 | - August
50 | - September
51 | - October
52 | - November
53 | - December
54 | order:
55 | - :month
56 | - :day
57 | - :year
58 | director: "Director"
59 | from: "from"
60 | genre: "Genre"
61 | help_page_sentence: "Have an issue? Like what you see? Want to help? Then please check out my github page"
62 | imdb_rating: "IMDB Rating"
63 | minutes: "minutes"
64 | network: "Network"
65 | new_episodes: "New Episodes"
66 | new_movies: "New Movies"
67 | new_seasons: "New Seasons"
68 | rating: "Rating"
69 | release_date: "Release Date"
70 | runtime: "Runtime"
71 | seasons: {
72 | one: "season",
73 | other: "seasons"
74 | }
75 | thanks_sentence: "Thanks for watching!"
76 | users: "users"
77 |
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/locales/fr.yml:
--------------------------------------------------------------------------------
1 | fr:
2 | air_date: "Date de diffusion"
3 | cast: "Casting"
4 | credits_sentence: "Les affiches, résumés et méta-données sont fournies par themoviedb.org et par thetvdb.com"
5 | date:
6 | abbr_day_names:
7 | - dim
8 | - lun
9 | - mar
10 | - mer
11 | - jeu
12 | - ven
13 | - sam
14 | abbr_month_names:
15 | -
16 | - jan.
17 | - fév.
18 | - mar.
19 | - avr.
20 | - mai
21 | - juin
22 | - juil.
23 | - août
24 | - sept.
25 | - oct.
26 | - nov.
27 | - déc.
28 | day_names:
29 | - dimanche
30 | - lundi
31 | - mardi
32 | - mercredi
33 | - jeudi
34 | - vendredi
35 | - samedi
36 | formats:
37 | default: "%d/%m/%Y"
38 | short: "%e %b"
39 | long: "%e %B %Y"
40 | month_names:
41 | -
42 | - janvier
43 | - février
44 | - mars
45 | - avril
46 | - mai
47 | - juin
48 | - juillet
49 | - août
50 | - septembre
51 | - octobre
52 | - novembre
53 | - décembre
54 | order:
55 | - :day
56 | - :month
57 | - :year
58 | director: "Réalisateur"
59 | from: "pour"
60 | genre: "Genre"
61 | help_page_sentence: "Vous avez un problème ? Vous aimez ? Vous voulez aider ? Venez visiter la page github du projet"
62 | imdb_rating: "Note IMDB"
63 | minutes: "minutes"
64 | network: "Chaine"
65 | new_episodes: "Nouveaux épisodes"
66 | new_movies: "Nouveaux films"
67 | new_seasons: "Nouvelles saisons"
68 | rating: "Classification"
69 | release_date: "Date de sortie"
70 | runtime: "Durée"
71 | seasons: {
72 | one: "saison",
73 | other: "saisons"
74 | }
75 | thanks_sentence: "C'est tout, pour le moment. Merci pour votre attention."
76 | users: "utilisateurs"
77 |
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/locales/no.yml:
--------------------------------------------------------------------------------
1 | "no":
2 | air_date: "Sendedato"
3 | cast: "Rollebesetning"
4 | credits_sentence: "Grafikk, tekst og metadata er hentet fra themoviedb.org og thetvdb.com"
5 | date:
6 | abbr_day_names:
7 | - Søn
8 | - Man
9 | - Tir
10 | - Ons
11 | - Tor
12 | - Fre
13 | - Lør
14 | abbr_month_names:
15 | -
16 | - Jan
17 | - Feb
18 | - Mar
19 | - Apr
20 | - Mai
21 | - Jun
22 | - Jul
23 | - Aug
24 | - Sep
25 | - Okt
26 | - Nov
27 | - Des
28 | day_names:
29 | - Søndag
30 | - Mandag
31 | - Tirsdag
32 | - Onsdag
33 | - Torsdag
34 | - Fredag
35 | - Lørdag
36 | formats:
37 | default: "%d.%m.%Y"
38 | long: "%d %B, %Y"
39 | short: "%d %b"
40 | month_names:
41 | -
42 | - Januar
43 | - Februar
44 | - Mars
45 | - April
46 | - Mai
47 | - Juni
48 | - Juli
49 | - August
50 | - September
51 | - Oktober
52 | - November
53 | - Desember
54 | order:
55 | - :måned
56 | - :dag
57 | - :år
58 | director: "Regissør"
59 | from: "fra"
60 | genre: "Sjanger"
61 | help_page_sentence: "Opplever du problemer? Liker du hva du ser? Vil du hjelpe til? Så sjekk ut min github side"
62 | imdb_rating: "IMDB Vurdering"
63 | minutes: "minutter"
64 | network: "Nettverk"
65 | new_episodes: "Nye Episoder"
66 | new_movies: "Nye Filmer"
67 | new_seasons: "Nye Sesonger"
68 | rating: "Vurdering"
69 | release_date: "Utgivelsesdato"
70 | runtime: "Spilletid"
71 | seasons: {
72 | one: "sesong",
73 | other: "sesonger"
74 | }
75 | thanks_sentence: "Takk for at du ser på!"
76 | users: "brukere"
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/mailAnnouncement.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 |
3 | require 'rubygems'
4 | require 'mail'
5 | require 'time'
6 |
7 | require_relative '/var/lib/nowshowing/plexTv'
8 |
9 | # Class for sending out the email notification.
10 | #
11 | # Author: Brian Stascavage
12 | # Email: brian@stascavage.com
13 | # Modified by: ninthwalker
14 | #
15 | class MailReport
16 | def initialize(advanced, options)
17 | $advanced = advanced
18 | $announcementSubject = File.read('/opt/announcementSubject')
19 | $plexEmails = options[:emails]
20 | $testEmail = options[:test_email]
21 | if !$advanced['mail']['port'].nil?
22 | $port = $advanced['mail']['port']
23 | else
24 | $port = 587
25 | end
26 |
27 | if !$announcementSubject.nil?
28 | $subject = $announcementSubject
29 | else
30 | $subject = "Plex Announcement"
31 | end
32 | end
33 |
34 | # Method for pulling the email information from the config and emailing all Plex users
35 | # set auth to nil, and use ruby smtp.rb modified with auto-detection code.
36 | def sendMail(body)
37 | options = { :address => $advanced['mail']['address'],
38 | :port => $port,
39 | :domain => ENV['HOSTNAME'],
40 | :user_name => $advanced['mail']['username'],
41 | :password => $advanced['mail']['password'],
42 | :authentication => nil,
43 | :enable_starttls_auto => true }
44 | Mail.defaults do
45 | delivery_method :smtp, options
46 | end
47 |
48 | users = Array.new
49 |
50 | # Logic for pulling the email accounts from Plex.tv and/or the
51 | # config file
52 | plexTv = PlexTv.new($advanced)
53 |
54 | if !$testEmail
55 | if $plexEmails
56 | plex_users = plexTv.get('/pms/friends/all')
57 |
58 | if plex_users.nil? || plex_users.empty?
59 | $logger.info("No Plex friends found.")
60 | else
61 | plex_users['MediaContainer']['User'].each do | user |
62 | if !user['email'].empty?
63 | users.push(user['email'])
64 | end
65 | end
66 | end
67 | end
68 | if !$advanced['mail']['recipients'].nil? || !$advanced['mail']['recipients_email'].nil?
69 | if !$advanced['mail']['recipients_email'].nil?
70 | $advanced['mail']['recipients_email'].each do | recipient |
71 | users.push(recipient)
72 | end
73 | end
74 | if !$advanced['mail']['recipients'].nil?
75 | $advanced['mail']['recipients'].each do | recipient |
76 | plex_users = plexTv.get('/pms/friends/all')
77 | plex_users['MediaContainer']['User'].each do | user |
78 | if user['username'] == recipient
79 | users.push(user['email'])
80 | end
81 | end
82 | end
83 | end
84 | end
85 | end
86 |
87 | #Get owner's email as well and add it to the list of recpients
88 | users.push(plexTv.get('/users/account')['user']['email'][0])
89 |
90 | #used to send individual email. Now it bcc's one email
91 | #users.each do | user |
92 | mail = Mail.new do
93 | from "#{$advanced['mail']['from']} <#{$advanced['mail']['username']}>"
94 | bcc users
95 | subject $subject
96 | content_type 'text/html; charset=UTF-8'
97 | body body
98 | end
99 | begin
100 | mail.deliver!
101 | rescue => e
102 | $logger.info("SMTP mailing failed!\n#{e.message}#{e.backtrace}")
103 | end
104 | #end
105 | end
106 | end
107 |
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/mailReport.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 |
3 | require 'rubygems'
4 | require 'mail'
5 | require 'time'
6 |
7 | require_relative '/var/lib/nowshowing/plexTv'
8 |
9 | # Class for sending out the email notification.
10 | #
11 | # Author: Brian Stascavage
12 | # Email: brian@stascavage.com
13 | # Modified by: ninthwalker
14 | #
15 | class MailReport
16 | def initialize(advanced, options)
17 | $advanced = advanced
18 | $plexEmails = options[:emails]
19 | $testEmail = options[:test_email]
20 | if !$advanced['mail']['port'].nil?
21 | $port = $advanced['mail']['port']
22 | else
23 | $port = 587
24 | end
25 |
26 | if !$advanced['mail']['subject'].nil?
27 | $subject = $advanced['mail']['subject']
28 | else
29 | $subject = "Plex Summary "
30 | end
31 | end
32 |
33 | # Method for pulling the email information from the config and emailing all Plex users
34 | # set auth to nil, and use ruby smtp.rb modified with auto-detection code.
35 | def sendMail(body)
36 | options = { :address => $advanced['mail']['address'],
37 | :port => $port,
38 | :domain => ENV['HOSTNAME'],
39 | :user_name => $advanced['mail']['username'],
40 | :password => $advanced['mail']['password'],
41 | :authentication => nil,
42 | :enable_starttls_auto => true }
43 | Mail.defaults do
44 | delivery_method :smtp, options
45 | end
46 |
47 | users = Array.new
48 |
49 | # Logic for pulling the email accounts from Plex.tv and/or the
50 | # config file
51 | plexTv = PlexTv.new($advanced)
52 |
53 | if !$testEmail
54 | if $plexEmails
55 | plex_users = plexTv.get('/pms/friends/all')
56 |
57 | if plex_users.nil? || plex_users.empty?
58 | $logger.info("No Plex friends found.")
59 | else
60 | plex_users['MediaContainer']['User'].each do | user |
61 | if !user['email'].empty?
62 | users.push(user['email'])
63 | end
64 | end
65 | end
66 | end
67 | if !$advanced['mail']['recipients'].nil? || !$advanced['mail']['recipients_email'].nil?
68 | if !$advanced['mail']['recipients_email'].nil?
69 | $advanced['mail']['recipients_email'].each do | recipient |
70 | users.push(recipient)
71 | end
72 | end
73 | if !$advanced['mail']['recipients'].nil?
74 | $advanced['mail']['recipients'].each do | recipient |
75 | plex_users = plexTv.get('/pms/friends/all')
76 | plex_users['MediaContainer']['User'].each do | user |
77 | if user['username'] == recipient
78 | users.push(user['email'])
79 | end
80 | end
81 | end
82 | end
83 | end
84 | end
85 |
86 | #Get owner's email as well and add it to the list of recpients
87 | users.push(plexTv.get('/users/account')['user']['email'][0])
88 |
89 | #used to send individual email. Now it bcc's one email
90 | #users.each do | user |
91 | mail = Mail.new do
92 | from "#{$advanced['mail']['from']} <#{$advanced['mail']['username']}>"
93 | bcc users
94 | subject $advanced['mail']['subject'] + " " + (I18n.l Time.now.to_date)
95 | content_type 'text/html; charset=UTF-8'
96 | body body
97 | end
98 | begin
99 | mail.deliver!
100 | rescue => e
101 | $logger.info("SMTP mailing failed!\n#{e.message}#{e.backtrace}")
102 | end
103 | #end
104 | end
105 | end
106 |
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/omdb.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 | require 'rubygems'
3 | require 'json'
4 | require 'httparty'
5 |
6 | # Class that interacts with omdbapi.com.
7 | #
8 | # Author: Brian Stascavage
9 | # Email: brian@stascavage.com
10 | #
11 | class OMDB
12 | include HTTParty
13 | # temporarily add api key since OMBI closed their API and started charging.
14 | # Old: base_uri 'http://www.omdbapi.com//'
15 | base_uri 'https://www.omdbapi.com/?apikey=bab71153'
16 | format :json
17 |
18 | def initialize
19 | end
20 |
21 | def get(query, args=nil)
22 | new_query = '&i=' + query + '&plot=short&r=json'
23 |
24 | response = self.class.get(new_query, :verify => false)
25 |
26 | if response.code != 200
27 | if response.nil?
28 | return 'nil'
29 | end
30 | while retry_attempts < 3 do
31 | $logger.error("Could not connect to omdb. Will retry in 30 seconds")
32 | sleep(30)
33 | $retry_attempts += 1
34 | $logger.debug("Retry attempt: #{$retry_attempts}")
35 | if self.get(query).code == 200
36 | break
37 | end
38 | end
39 | if retry_attempts >= 3
40 | $logger.error "Could not connect to omdb. Exiting script."
41 | exit
42 | end
43 | end
44 | return response
45 | end
46 | end
47 |
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/plex.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 | require 'rubygems'
3 | require 'json'
4 | require 'httparty'
5 |
6 | # Class To interact with a Plex server, for pulling movie and TV info and stuff
7 | #
8 | # Author: Brian Stascavage
9 | # Email: brian@stascavage.com
10 | # Modified by: Ninthwalker
11 | #
12 | class Plex
13 | include HTTParty
14 |
15 | def initialize(config)
16 | $advanced = config
17 | $server = $advanced['plex']['server']
18 | $header = { "X-Plex-Token" => "#{$advanced['token']['api_key']}" }
19 |
20 | self.class.headers['X-Plex-Token'] = $advanced['token']['api_key']
21 | if !$server.nil?
22 | if $server.downcase.include?('http')
23 | self.class.base_uri $server
24 | else
25 | self.class.base_uri "http://#{$server}:32400/"
26 | end
27 | end
28 | end
29 |
30 | base_uri "http://localhost:32400/"
31 | format :xml
32 |
33 | def get(query, args=nil)
34 | self.class.headers['X-Plex-Token'] = $advanced['token']['api_key']
35 | response = self.class.get(query)
36 |
37 | if response.code != 200
38 | if response.code == 401
39 | $logger.error("Unauthorized access to Plex server")
40 | else
41 | $logger.error("Cannot connect to Plex server")
42 | end
43 |
44 | abort
45 | end
46 |
47 | $logger.debug("Debug info for plexmediaserver connection")
48 | $logger.debug(response.code)
49 | $logger.debug(response.request)
50 | $logger.debug(response)
51 | return response
52 | end
53 | end
54 |
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/plexTv.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 | require 'rubygems'
3 | require 'json'
4 | require 'httparty'
5 |
6 | # Class To interact with Plex.tv
7 | #
8 | # Author: Brian Stascavage
9 | # Email: brian@stascavage.com
10 | #
11 | class PlexTv
12 | include HTTParty
13 |
14 | base_uri 'https://plex.tv/'
15 | format :xml
16 |
17 | def initialize(config)
18 | if !config.empty?
19 | if !config['token']['api_key'].empty?
20 | $token = config['token']['api_key']
21 | else
22 | if defined? $logger
23 | $logger.error("Missing Plex token")
24 | end
25 | end
26 | end
27 | end
28 |
29 | def get(query, auth=nil, token_check=false)
30 | if !token_check
31 | new_query = query + "?X-Plex-Token=#{$token}"
32 | else
33 | new_query = query
34 | end
35 |
36 | if auth.nil?
37 | response = self.class.get(new_query)
38 | else
39 | response = self.class.get(new_query, :basic_auth => auth)
40 | end
41 |
42 | if response.code != 200
43 | if response.code == 401
44 | puts "Invalid Plex.tv Credentials!"
45 | abort
46 | else
47 | puts "Cannot connect to Plex.tv! Check connection."
48 | abort
49 | end
50 | end
51 | return response
52 | end
53 | end
54 |
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/themoviedb.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 | require 'rubygems'
3 | require 'json'
4 | require 'httparty'
5 |
6 | # Class that interacts with themoviedb.org.
7 | # Note that themoviedb.org limits API calls to 30 every 10 seconds,
8 | # hence the sleep in this code.
9 | #
10 | # Author: Brian Stascavage
11 | # Email: brian@stascavage.com
12 | # Modified by: ninthwalker
13 | #
14 | class TheMovieDB
15 | include HTTParty
16 |
17 | base_uri 'https://api.themoviedb.org/3//'
18 | format :json
19 |
20 | def initialize(config)
21 | $token = '15cebd6668ef6e90315fe023723ea5a7'
22 | $retry_attempt = 0
23 | end
24 |
25 | def get(query, args=nil)
26 | if args.nil?
27 | new_query = query + "?api_key=#{$token}"
28 | else
29 | new_query = query + "?api_key=#{$token}{args}"
30 | end
31 |
32 | response = self.class.get(new_query, :verify => false)
33 |
34 | if response.code != 200
35 | if response.nil?
36 | return 'nil'
37 | end
38 | while $retry_attempts < 3 do
39 | $logger.error("Could not connect to themoviedb.org. Will retry in 30 seconds")
40 | sleep(30)
41 | $retry_attempts += 1
42 | $logger.debug("Retry attempt: #{$retry_attempts}")
43 | if self.get(query).code == 200
44 | break
45 | end
46 | end
47 | if $retry_attempts >= 3
48 | $logger.error("Could not connect to themoviedb.org. Exiting script")
49 | exit
50 | end
51 | end
52 |
53 | sleep 0.6
54 | $retry_attempt = 0
55 | return response
56 | end
57 | end
58 |
--------------------------------------------------------------------------------
/root/var/lib/nowshowing/thetvdb.rb:
--------------------------------------------------------------------------------
1 | #!/usr/bin/ruby
2 | require 'rubygems'
3 | require 'json'
4 | require 'httparty'
5 |
6 | # Class that interacts with thetvdb.org.
7 | #
8 | # Author: Brian Stascavage
9 | # Email: brian@stascavage.com
10 | # Modified by: ninthwalker
11 |
12 | class TheTVDB
13 | include HTTParty
14 |
15 | token = 'FCBE9A97726CD688'
16 | base_uri "https://thetvdb.com/api/#{token}//"
17 |
18 | def initialize
19 | $retry_attempts = 0
20 | end
21 |
22 | def get(query, args=nil)
23 | begin
24 | response = self.class.get(query, :verify => false)
25 | rescue EOFError
26 | $logger.error("thetvdb.org is providing wrong headers. Blah! Retrying.")
27 | while $retry_attempts < 3 do
28 | $logger.error("Could not connect to thetvdb.com. Will retry in 30 seconds")
29 | sleep(30)
30 | $retry_attempts += 1
31 | $logger.debug("Retry attempt: #{$retry_attempts}i for query #{query}")
32 | if self.get(query).code == 200
33 | break
34 | end
35 | end
36 | if $retry_attempts >= 3
37 | $logger.error("Could not connect to thetvdb. Exiting script. If you are constantly seeing this, please turn on debugging and open an issue.")
38 | $logger.debug("Failed to connect to thetvdb for query: #{query}")
39 | exit
40 | end
41 |
42 | $retry_attempts = 0
43 | return nil
44 | end
45 | $logger.debug("Response from thetvdb for query #{query}: Code: #{response.code}.")
46 |
47 | if response.code != 200
48 | if response.nil?
49 | return 'nil'
50 | end
51 | while $retry_attempts < 3 do
52 | $logger.error("Could not connect to thetvdb.com. Will retry in 30 seconds")
53 | sleep(30)
54 | $retry_attempts += 1
55 | $logger.debug("Retry attempt: #{$retry_attempts} for query #{query}")
56 | if self.get(query).code == 200
57 | break
58 | end
59 | end
60 | if $retry_attempts >= 3
61 | $logger.error("Could not connect to thetvdb. Exiting script. If you are constantly seeing this, please turn on debugging and open an issue.")
62 | $logger.debug("Failed to connect to thetvdb for query: #{query}")
63 | exit
64 | end
65 | end
66 |
67 | $retry_attempts = 0
68 | return response
69 | end
70 | end
71 |
--------------------------------------------------------------------------------
/s6-overlay/bin/background:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/background
--------------------------------------------------------------------------------
/s6-overlay/bin/backtick:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/backtick
--------------------------------------------------------------------------------
/s6-overlay/bin/cd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/cd
--------------------------------------------------------------------------------
/s6-overlay/bin/define:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/define
--------------------------------------------------------------------------------
/s6-overlay/bin/dollarat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/dollarat
--------------------------------------------------------------------------------
/s6-overlay/bin/elgetopt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/elgetopt
--------------------------------------------------------------------------------
/s6-overlay/bin/elgetpositionals:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/elgetpositionals
--------------------------------------------------------------------------------
/s6-overlay/bin/elglob:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/elglob
--------------------------------------------------------------------------------
/s6-overlay/bin/emptyenv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/emptyenv
--------------------------------------------------------------------------------
/s6-overlay/bin/exec:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/exec
--------------------------------------------------------------------------------
/s6-overlay/bin/execlineb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/execlineb
--------------------------------------------------------------------------------
/s6-overlay/bin/exit:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/exit
--------------------------------------------------------------------------------
/s6-overlay/bin/export:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/export
--------------------------------------------------------------------------------
/s6-overlay/bin/fdblock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/fdblock
--------------------------------------------------------------------------------
/s6-overlay/bin/fdclose:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/fdclose
--------------------------------------------------------------------------------
/s6-overlay/bin/fdmove:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/fdmove
--------------------------------------------------------------------------------
/s6-overlay/bin/fdreserve:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/fdreserve
--------------------------------------------------------------------------------
/s6-overlay/bin/fdswap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/fdswap
--------------------------------------------------------------------------------
/s6-overlay/bin/forbacktickx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/forbacktickx
--------------------------------------------------------------------------------
/s6-overlay/bin/foreground:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/foreground
--------------------------------------------------------------------------------
/s6-overlay/bin/forstdin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/forstdin
--------------------------------------------------------------------------------
/s6-overlay/bin/forx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/forx
--------------------------------------------------------------------------------
/s6-overlay/bin/getcwd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/getcwd
--------------------------------------------------------------------------------
/s6-overlay/bin/getpid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/getpid
--------------------------------------------------------------------------------
/s6-overlay/bin/heredoc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/heredoc
--------------------------------------------------------------------------------
/s6-overlay/bin/homeof:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/homeof
--------------------------------------------------------------------------------
/s6-overlay/bin/if:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/if
--------------------------------------------------------------------------------
/s6-overlay/bin/ifelse:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/ifelse
--------------------------------------------------------------------------------
/s6-overlay/bin/ifte:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/ifte
--------------------------------------------------------------------------------
/s6-overlay/bin/ifthenelse:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/ifthenelse
--------------------------------------------------------------------------------
/s6-overlay/bin/import:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/import
--------------------------------------------------------------------------------
/s6-overlay/bin/importas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/importas
--------------------------------------------------------------------------------
/s6-overlay/bin/loopwhilex:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/loopwhilex
--------------------------------------------------------------------------------
/s6-overlay/bin/minidentd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/minidentd
--------------------------------------------------------------------------------
/s6-overlay/bin/multidefine:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/multidefine
--------------------------------------------------------------------------------
/s6-overlay/bin/multisubstitute:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/multisubstitute
--------------------------------------------------------------------------------
/s6-overlay/bin/pipeline:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/pipeline
--------------------------------------------------------------------------------
/s6-overlay/bin/piperw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/piperw
--------------------------------------------------------------------------------
/s6-overlay/bin/redirfd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/redirfd
--------------------------------------------------------------------------------
/s6-overlay/bin/runblock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/runblock
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-accessrules-cdb-from-fs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-accessrules-cdb-from-fs
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-accessrules-fs-from-cdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-accessrules-fs-from-cdb
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-applyuidgid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-applyuidgid
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-basename:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-basename
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-cat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-cat
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-chmod:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-chmod
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-chown:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-chown
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-chroot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-chroot
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-cleanfifodir:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-cleanfifodir
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-clock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-clock
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-clockadd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-clockadd
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-clockview:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-clockview
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-connlimit:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-connlimit
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-cut:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-cut
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-devd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-devd
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dirname:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dirname
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsip4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsip4
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsip4-filter:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsip4-filter
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsip6:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsip6
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsip6-filter:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsip6-filter
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsmx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsmx
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsname:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsname
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsname-filter:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsname-filter
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsns
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsq:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsq
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsqr:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsqr
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnsqualify:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnsqualify
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnssoa:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnssoa
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnssrv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnssrv
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dnstxt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dnstxt
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-dumpenv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-dumpenv
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-echo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-echo
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-env:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-env
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-envdir:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-envdir
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-envuidgid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-envuidgid
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-expr:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-expr
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-false:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-false
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-daemon:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-daemon
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-delete:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-delete
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-deletec:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-deletec
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-getdump:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-getdump
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-getdumpc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-getdumpc
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-list:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-list
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-listc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-listc
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-retrieve:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-retrieve
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-retrievec:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-retrievec
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-setdump:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-setdump
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-setdumpc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-setdumpc
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-store
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-storec:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-storec
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-transferdump:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-transferdump
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholder-transferdumpc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholder-transferdumpc
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fdholderd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fdholderd
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fghack:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fghack
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-fillurandompool:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-fillurandompool
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-format-filter:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-format-filter
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-freeramdisk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-freeramdisk
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ftrig-listen:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ftrig-listen
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ftrig-listen1:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ftrig-listen1
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ftrig-notify:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ftrig-notify
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ftrig-wait:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ftrig-wait
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ftrigrd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ftrigrd
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-getservbyname:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-getservbyname
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-grep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-grep
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-head:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-head
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-hiercopy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-hiercopy
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-hostname:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-hostname
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ident-client:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ident-client
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ioconnect:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ioconnect
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ipcclient:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ipcclient
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ipcserver:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ipcserver
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ipcserver-access:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ipcserver-access
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ipcserver-socketbinder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ipcserver-socketbinder
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ipcserverd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ipcserverd
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-linkname:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-linkname
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ln:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ln
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-log:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-log
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-logwatch:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-logwatch
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ls:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ls
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-maximumtime:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-maximumtime
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-mkdir:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-mkdir
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-mkfifo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-mkfifo
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-mkfifodir:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-mkfifodir
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-mount:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-mount
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-nice:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-nice
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-nuke:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-nuke
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-pause:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-pause
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-pivotchroot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-pivotchroot
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-printenv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-printenv
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-ps:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-ps
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-quote:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-quote
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-quote-filter:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-quote-filter
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-randomip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-randomip
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-rc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-rc
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-rc-bundle:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-rc-bundle
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-rc-compile:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-rc-compile
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-rc-db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-rc-db
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-rc-dryrun:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-rc-dryrun
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-rc-init:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-rc-init
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-rc-update:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-rc-update
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-rename:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-rename
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-rmrf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-rmrf
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-seq:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-seq
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-setlock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-setlock
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-setsid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-setsid
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-setuidgid:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-setuidgid
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-sleep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-sleep
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-sntpclock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-sntpclock
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-softlimit:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-softlimit
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-sort:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-sort
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-sudo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-sudo
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-sudoc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-sudoc
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-sudod:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-sudod
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-supervise:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-supervise
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-svc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-svc
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-svlisten:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-svlisten
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-svlisten1:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-svlisten1
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-svok:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-svok
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-svscan:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-svscan
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-svscanctl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-svscanctl
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-svstat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-svstat
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-svwait:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-svwait
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-swapoff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-swapoff
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-swapon:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-swapon
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-sync:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-sync
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tai64n:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tai64n
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tai64nlocal:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tai64nlocal
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-taiclock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-taiclock
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-taiclockd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-taiclockd
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tail:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tail
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tcpclient:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tcpclient
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tcpserver:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tcpserver
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tcpserver-access:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tcpserver-access
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tcpserver4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tcpserver4
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tcpserver4-socketbinder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tcpserver4-socketbinder
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tcpserver4d:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tcpserver4d
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tcpserver6:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tcpserver6
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tcpserver6-socketbinder:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tcpserver6-socketbinder
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-tcpserver6d:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-tcpserver6d
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-test:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-test
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-touch:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-touch
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-true:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-true
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-uevent-listener:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-uevent-listener
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-uevent-spawner:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-uevent-spawner
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-umount:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-umount
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-uniquename:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-uniquename
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-unquote:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-unquote
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-unquote-filter:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-unquote-filter
--------------------------------------------------------------------------------
/s6-overlay/bin/s6-update-symlinks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6-update-symlinks
--------------------------------------------------------------------------------
/s6-overlay/bin/s6lockd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/s6lockd
--------------------------------------------------------------------------------
/s6-overlay/bin/seekablepipe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/seekablepipe
--------------------------------------------------------------------------------
/s6-overlay/bin/shift:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/shift
--------------------------------------------------------------------------------
/s6-overlay/bin/skadnsd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/skadnsd
--------------------------------------------------------------------------------
/s6-overlay/bin/trap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/trap
--------------------------------------------------------------------------------
/s6-overlay/bin/tryexec:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/tryexec
--------------------------------------------------------------------------------
/s6-overlay/bin/ucspilogd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/ucspilogd
--------------------------------------------------------------------------------
/s6-overlay/bin/umask:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/umask
--------------------------------------------------------------------------------
/s6-overlay/bin/unexport:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/unexport
--------------------------------------------------------------------------------
/s6-overlay/bin/wait:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/wait
--------------------------------------------------------------------------------
/s6-overlay/bin/withstdinas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/bin/withstdinas
--------------------------------------------------------------------------------
/s6-overlay/etc/cont-finish.d/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/s6-overlay/etc/cont-init.d/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/s6-overlay/etc/fix-attrs.d/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/s6-overlay/etc/leapsecs.dat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/etc/leapsecs.dat
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/init-catchall/init-stage1:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 |
3 | ##
4 | ## ensure our vital fifo exists
5 | ##
6 |
7 | if { s6-rmrf /var/run/s6/uncaught-logs-fifo }
8 | if { s6-mkfifo -m 0600 -- /var/run/s6/uncaught-logs-fifo }
9 |
10 |
11 | ##
12 | ## ensure ownership & permissions for our vital files
13 | ##
14 |
15 | if { s6-rmrf /var/log/s6-uncaught-logs }
16 | if { s6-mkdir -p /var/log/s6-uncaught-logs }
17 | if { s6-envuidgid -D 32768:32768 nobody s6-chown -U /var/log/s6-uncaught-logs }
18 | if { s6-chmod 2700 /var/log/s6-uncaught-logs }
19 |
20 |
21 | ##
22 | ## init the scandir with our base services
23 | ##
24 |
25 | if { s6-rmrf /var/run/s6/services }
26 | if { s6-hiercopy /etc/s6/services /var/run/s6/services }
27 |
28 |
29 | ##
30 | ## fork the "init-stage2" script
31 | ##
32 |
33 | background
34 | {
35 | # block until the supervision tree is running
36 | redirfd -w 3 /var/run/s6/uncaught-logs-fifo
37 | fdclose 3
38 |
39 | # add some environment
40 | s6-envdir -- /etc/s6/init/env-stage2
41 |
42 | # run the script
43 | /etc/s6/init-catchall/init-stage2 $@
44 | }
45 | unexport !
46 |
47 |
48 | ##
49 | ## run the rest of stage 1 with sanitized descriptors
50 | ##
51 |
52 | redirfd -r 0 /dev/null
53 | redirfd -wnb 1 /var/run/s6/uncaught-logs-fifo
54 | fdmove -c 2 1
55 |
56 |
57 | ##
58 | ## start the supervision tree
59 | ##
60 |
61 | s6-svscan -t0 /var/run/s6/services
62 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/init-catchall/init-stage2:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 | /etc/s6/init/init-stage2 $@
3 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/init-no-catchall/init-stage1:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 |
3 | ##
4 | ## init the scandir with our base services
5 | ##
6 |
7 | if { s6-rmrf /var/run/s6/services }
8 | if { s6-hiercopy /etc/s6/services /var/run/s6/services }
9 | if { s6-rmrf /var/run/s6/services/s6-svscan-log }
10 |
11 |
12 | ##
13 | ## ensure our vital fifo exists
14 | ##
15 |
16 | if { s6-rmrf /var/run/s6/services/s6-fdholderd/supervise/control }
17 | if { s6-mkfifo -m 0600 /var/run/s6/services/s6-fdholderd/supervise/control }
18 |
19 |
20 | ##
21 | ## fork the "init-stage2" script
22 | ##
23 |
24 | background
25 | {
26 | # block until the supervision tree is running
27 | redirfd -w 3 /var/run/s6/services/s6-fdholderd/supervise/control
28 | fdclose 3
29 |
30 | # add some environment
31 | s6-envdir -- /etc/s6/init/env-stage2
32 |
33 | # run the script
34 | /etc/s6/init-no-catchall/init-stage2 $@
35 | }
36 | unexport !
37 |
38 |
39 | ##
40 | ## run the rest of stage 1 with sanitized descriptors
41 | ##
42 |
43 | redirfd -r 0 /dev/null
44 |
45 |
46 | ##
47 | ## start the supervision tree
48 | ##
49 |
50 | s6-svscan -t0 /var/run/s6/services
51 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/init-no-catchall/init-stage2:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 | /etc/s6/init/init-stage2 $@
3 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/init/env-stage2/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/init/env/PATH:
--------------------------------------------------------------------------------
1 | /usr/bin:/usr/sbin:/bin:/sbin
2 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/init/init-stage1:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 |
3 | ##
4 | ## dump environment into an envdir if S6_KEEP_ENV is unset
5 | ##
6 |
7 | importas -D 0 S6_KEEP_ENV S6_KEEP_ENV
8 | define -s DO_NOT_KEEP_ENV "s6-test ${S6_KEEP_ENV} -eq 0"
9 | if
10 | {
11 | ifelse { ${DO_NOT_KEEP_ENV} }
12 | {
13 | if { s6-mkdir -pm 0755 -- /var/run/s6/container_environment }
14 | s6-dumpenv -- /var/run/s6/container_environment
15 | }
16 | exit 0
17 | }
18 |
19 | ##
20 | ## create env folder for each init stage, although stage1 is always copied from
21 | ## /etc/s6/init/env, it's made available in /var/run/s6/env-stage1 just for
22 | ## consistency.
23 | ##
24 |
25 | if
26 | {
27 | elglob -0 -- envdirs /var/run/s6/env-*
28 | forx -p -- envdir { ${envdirs} }
29 | importas -u envdir envdir
30 | s6-rmrf ${envdir}
31 | }
32 | if { s6-mkdir -pm 0755 -- /var/run/s6 }
33 | if { s6-hiercopy /etc/s6/init/env /var/run/s6/env-stage1 }
34 | if { s6-mkdir -pm 0755 -- /var/run/s6/env-stage2 }
35 | if { s6-mkdir -pm 0755 -- /var/run/s6/env-stage3 }
36 |
37 |
38 | ##
39 | ## run everything else with only the environment defined in
40 | ## /var/run/s6/env-stage1 if we are not instructed to keep
41 | ## docker env. Programs can get back the container
42 | ## environment by using "with-contenv program".
43 | ##
44 |
45 | ifthenelse -s { ${DO_NOT_KEEP_ENV} }
46 | {
47 | exec -c --
48 | s6-envdir /var/run/s6/env-stage1
49 | }
50 | { }
51 |
52 | backtick -n S6_CMD_ARG0 { printcontenv S6_CMD_ARG0 }
53 | importas -d "\n" -s -u S6_CMD_ARG0 S6_CMD_ARG0
54 |
55 | ##
56 | ## route based on what was provided in S6_LOGGING
57 | ##
58 |
59 | backtick -D 0 -n S6_LOGGING { printcontenv S6_LOGGING }
60 | importas -u S6_LOGGING S6_LOGGING
61 | ifelse { s6-test ${S6_LOGGING} -ne 0 }
62 | {
63 | /etc/s6/init-catchall/init-stage1 ${S6_CMD_ARG0} $@
64 | }
65 | /etc/s6/init-no-catchall/init-stage1 ${S6_CMD_ARG0} $@
66 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/init/init-stage2-fixattrs.txt:
--------------------------------------------------------------------------------
1 | /var/run/s6/etc/fix-attrs.d/* false root 0644 0755
2 | /var/run/s6/etc/cont-init.d/* false root 0755 0755
3 | /var/run/s6/etc/cont-finish.d/* false root 0755 0755
4 | /var/run/s6/etc/services.d/*/run false root 0755 0755
5 | /var/run/s6/etc/services.d/*/finish false root 0755 0755
6 | /var/run/s6/etc/services.d/*/log/run false root 0755 0755
7 | /var/run/s6/etc/services.d/*/log/finish false root 0755 0755
8 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/init/init-stage2-redirfd:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 |
3 | backtick -D 0 -n S6_LOGGING { printcontenv S6_LOGGING }
4 | importas -u S6_LOGGING S6_LOGGING
5 | ifelse { s6-test ${S6_LOGGING} -ne 0 }
6 | {
7 | redirfd -w 1 /var/run/s6/uncaught-logs-fifo
8 | fdmove -c 2 1
9 | $@
10 | }
11 | $@
12 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/init/init-stage3:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 |
3 | # This is the shutdown script, running as process 1.
4 | cd /
5 |
6 | # Merge environments from our custom stage into current context
7 | s6-envdir -I /var/run/s6/env-stage3
8 |
9 | # cont-finish.d: one-time finish scripts
10 |
11 | foreground
12 | {
13 | backtick -D 5000 -n S6_KILL_FINISH_MAXTIME { printcontenv S6_KILL_FINISH_MAXTIME }
14 | importas -u S6_KILL_FINISH_MAXTIME S6_KILL_FINISH_MAXTIME
15 | if
16 | {
17 | if -t { s6-test -d /var/run/s6/etc/cont-finish.d }
18 | if { s6-echo "[cont-finish.d] executing container finish scripts..." }
19 | if
20 | {
21 | pipeline { s6-ls -0 -- /var/run/s6/etc/cont-finish.d }
22 | pipeline { s6-sort -0 -- }
23 | forstdin -o 0 -0 -- i
24 | importas -u i i
25 | if { s6-echo -- "[cont-finish.d] ${i}: executing... " }
26 | foreground
27 | {
28 | s6-maximumtime -k ${S6_KILL_FINISH_MAXTIME}
29 | /var/run/s6/etc/cont-finish.d/${i}
30 | }
31 | importas -u ? ?
32 | s6-echo -- "[cont-finish.d] ${i}: exited ${?}."
33 | }
34 | s6-echo -- "[cont-finish.d] done."
35 | }
36 | }
37 |
38 |
39 | # Sync before TERM'n
40 |
41 | foreground { s6-echo "[s6-finish] syncing disks." }
42 | foreground { s6-sync }
43 |
44 |
45 | # Kill everything, gently.
46 |
47 | foreground { s6-echo "[s6-finish] sending all processes the TERM signal." }
48 | foreground { s6-nuke -th } # foreground is process 1: it survives
49 | foreground
50 | {
51 |
52 | backtick -D 3000 -n S6_KILL_GRACETIME { printcontenv S6_KILL_GRACETIME }
53 | importas -u S6_KILL_GRACETIME S6_KILL_GRACETIME
54 | s6-sleep -m -- ${S6_KILL_GRACETIME}
55 | }
56 |
57 | # Last message, then close our pipes and give the logger some time.
58 | foreground { s6-echo "[s6-finish] sending all processes the KILL signal and exiting." }
59 | fdclose 1 fdclose 2
60 | s6-sleep -m 200
61 |
62 |
63 | # Kill everything, brutally.
64 |
65 | foreground { s6-nuke -k } # foreground is process 1: it survives again
66 |
67 |
68 | # Reap all the zombies then sync, and we're done.
69 |
70 | wait { }
71 | foreground { s6-sync }
72 |
73 |
74 | # Use CMD exit code defaulting to zero if not present.
75 |
76 | importas -u -D0 S6_CMD_EXITED S6_CMD_EXITED
77 | exit ${S6_CMD_EXITED}
78 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/.s6-svscan/crash:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -P
2 |
3 | # This file is run when an unrecoverable error happens
4 | # to s6-svscan. Edit it to suit your needs.
5 |
6 | fdmove -c 2 1
7 | foreground { s6-echo "s6-svscan panicked! Dropping to a root shell.\n" }
8 | /bin/sh -i
9 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/.s6-svscan/finish:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 | /etc/s6/init/init-stage3 $@
3 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/down:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/notification-fd:
--------------------------------------------------------------------------------
1 | 1
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/rules/uid/0/allow:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/etc/s6/services/s6-fdholderd/rules/uid/0/allow
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/rules/uid/0/env/S6_FDHOLDER_GETDUMP:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/rules/uid/0/env/S6_FDHOLDER_LIST:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/rules/uid/0/env/S6_FDHOLDER_RETRIEVE_REGEX:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/rules/uid/0/env/S6_FDHOLDER_SETDUMP:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/rules/uid/0/env/S6_FDHOLDER_STORE_REGEX:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/rules/uid/default/allow:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/etc/s6/services/s6-fdholderd/rules/uid/default/allow
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/rules/uid/default/env/S6_FDHOLDER_LIST:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/run:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -P
2 | s6-envuidgid -D 32769:32769 daemon
3 | s6-fdholder-daemon -U -1 -i rules -- /var/run/s6/fdholderd-socket
4 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-fdholderd/supervise/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/s6-overlay/etc/s6/services/s6-svscan-log/run:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -P
2 | logutil-service -f /var/run/s6/uncaught-logs-fifo /var/log/s6-uncaught-logs
3 |
--------------------------------------------------------------------------------
/s6-overlay/etc/services.d/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/s6-overlay/init:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 |
3 | ##
4 | ## load default PATH (the same that Docker includes if not provided) if it doesn't exist,
5 | ## then go ahead with stage1.
6 | ## this was motivated due to this issue:
7 | ## - https://github.com/just-containers/s6-overlay/issues/108
8 | ##
9 |
10 |
11 | /bin/importas -D /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PATH PATH
12 | /etc/s6/init/init-stage1 $@
13 |
--------------------------------------------------------------------------------
/s6-overlay/libexec/s6-rc-fdholder-filler:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/libexec/s6-rc-fdholder-filler
--------------------------------------------------------------------------------
/s6-overlay/libexec/s6-rc-oneshot-run:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/libexec/s6-rc-oneshot-run
--------------------------------------------------------------------------------
/s6-overlay/libexec/s6lockd-helper:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ninthwalker/NowShowing/dd4f8c3dbc822e3379e976510ca437fe1d52afd8/s6-overlay/libexec/s6lockd-helper
--------------------------------------------------------------------------------
/s6-overlay/usr/bin/execlineb:
--------------------------------------------------------------------------------
1 | /bin/execlineb
--------------------------------------------------------------------------------
/s6-overlay/usr/bin/fix-attrs:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -P
2 |
3 | /bin/export PATH /usr/bin:/bin
4 | /bin/export recfunction "\
5 | foreground { s6-chown -u ${3} -g ${4} -- ${1} }
6 | foreground
7 | {
8 | ifelse { s6-test -d ${1} }
9 | {
10 | if -t { s6-test ! ${6} = "-" }
11 | s6-chmod ${6} ${1}
12 | }
13 | if -t { s6-test ! ${5} = "-" }
14 | s6-chmod ${5} ${1}
15 | }
16 | if -t { if { s6-${2} } s6-test -d ${1} }
17 | forbacktickx -0 subfile
18 | {
19 | importas -D 0 S6_FIX_ATTRS_HIDDEN S6_FIX_ATTRS_HIDDEN
20 | ifelse { s6-test ${S6_FIX_ATTRS_HIDDEN} -eq 0 } { s6-ls -0 ${1} }
21 | s6-ls -0 -a ${1}
22 | }
23 | multisubstitute
24 | {
25 | importas -u subfile subfile
26 | importas recfunction recfunction
27 | }
28 | execlineb -S6 -c ${recfunction} ${1}/${subfile} true ${3} ${4} ${5} ${6}"
29 |
30 | # process each line
31 | forstdin -d"\n" -- line
32 | importas -u line line
33 | if { s6-test -n ${line} }
34 | multidefine -0 -Cd" \t" -- ${line} { globex recurse userentry fmode dmode }
35 | # get 'uid' and 'gid'
36 | multidefine -Cd"," -- ${userentry} { account uidgid }
37 | backtick -n envuidgid_opts
38 | {
39 | backtick -n opts
40 | {
41 | ifte { s6-echo -- -D${uidgid} } { s6-echo -- -i }
42 | s6-test -n ${uidgid}
43 | }
44 | importas -u opts opts
45 | ifte { s6-echo -- -nB ${opts} } { s6-echo -- ${opts} }
46 | pipeline { s6-echo ${account} }
47 | if
48 | {
49 | redirfd -w 1 /dev/null
50 | fdmove -c 2 1
51 | s6-grep -- ":"
52 | }
53 | }
54 | importas -u -sCd" \t" envuidgid_opts envuidgid_opts
55 | s6-envuidgid ${envuidgid_opts} ${account}
56 | importas -u uid UID
57 | importas -u gid GID
58 | elglob -0 -- files ${globex}
59 | forx -p -- file { ${files} }
60 | multisubstitute
61 | {
62 | importas -u file file
63 | importas recfunction recfunction
64 | }
65 | execlineb -S6 -c ${recfunction} ${file} ${recurse} ${uid} ${gid} ${fmode} ${dmode}
66 |
--------------------------------------------------------------------------------
/s6-overlay/usr/bin/logutil-newfifo:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb
2 |
3 | elgetopt "m:o:"
4 | multisubstitute
5 | {
6 | importas -u -D "0600" fmode ELGETOPT_m
7 | importas -u -D "root" owner ELGETOPT_o
8 | }
9 | elgetpositionals -P0
10 | emptyenv -P
11 | if { s6-test ${#} -ge 1 }
12 | if { s6-svwait -t 5000 -U /var/run/s6/services/s6-fdholderd }
13 | if { s6-rmrf ${1} }
14 | if { s6-mkfifo -m ${fmode} -- ${1} }
15 | if
16 | {
17 | s6-envuidgid -- ${owner}
18 | s6-chown -U -- ${1}
19 | }
20 | if
21 | {
22 | backtick -n name { s6-uniquename ${1} }
23 | importas -u name name
24 | redirfd -rnb 0 ${1}
25 | s6-fdholder-store /var/run/s6/fdholderd-socket ${name}
26 | }
27 |
--------------------------------------------------------------------------------
/s6-overlay/usr/bin/logutil-service:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb
2 |
3 | # test if arguments were given
4 | elgetopt "f:"
5 | multisubstitute
6 | {
7 | importas -u -D "" fifo ELGETOPT_f
8 | }
9 | elgetpositionals -P0
10 | emptyenv -P
11 | if { s6-test ${#} -ge 1 }
12 |
13 |
14 | # switch between std{out,err} or fifo
15 | ifelse { s6-test -n ${fifo} }
16 | {
17 | redirfd -rnb 0 ${fifo}
18 | logutil-service-main ${1}
19 | }
20 | logutil-service-main ${1}
21 |
--------------------------------------------------------------------------------
/s6-overlay/usr/bin/logutil-service-main:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S1
2 |
3 | # this env decides what to log and how.
4 | backtick -D "n20 s1000000 T" -n S6_LOGGING_SCRIPT { printcontenv S6_LOGGING_SCRIPT }
5 | importas -u -sCd" \t" S6_LOGGING_SCRIPT S6_LOGGING_SCRIPT
6 |
7 | # execute s6-log and drop root rights in favor of nobody
8 | s6-envuidgid -D 32768:32768 nobody
9 | s6-applyuidgid -U
10 | exec -c
11 | s6-log -bp -- ${S6_LOGGING_SCRIPT} ${1}
12 |
--------------------------------------------------------------------------------
/s6-overlay/usr/bin/printcontenv:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 |
3 | # test if arguments were given
4 | if { s6-test ${#} -ge 1 }
5 |
6 | importas -D 0 S6_KEEP_ENV S6_KEEP_ENV
7 | # if S6_KEEP_ENV was passed, whole supervision tree should see
8 | # original docker environement
9 | ifelse { s6-test ${S6_KEEP_ENV} -ne 0 }
10 | {
11 | redirfd -w 2 /dev/null importas -i value ${1}
12 | s6-echo -n -- ${value}
13 | }
14 |
15 | # else: original docker env was dumped into container_environment
16 | # retrieve it from there and print if it exists
17 | if { s6-test -f /var/run/s6/container_environment/${1} }
18 | if
19 | {
20 | backtick value
21 | {
22 | redirfd -r 0 /var/run/s6/container_environment/${1}
23 | s6-cat
24 | }
25 | importas -u value value
26 | s6-echo -- ${value}
27 | }
28 |
--------------------------------------------------------------------------------
/s6-overlay/usr/bin/with-contenv:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb -S0
2 | importas -D 0 S6_KEEP_ENV S6_KEEP_ENV
3 | ifelse { s6-test ${S6_KEEP_ENV} -eq 0 }
4 | {
5 | /bin/exec -c --
6 | /bin/s6-envdir -fn -- /var/run/s6/container_environment
7 | /bin/exec --
8 | $@
9 | }
10 |
11 | $@
12 |
--------------------------------------------------------------------------------
/s6-overlay/usr/bin/with-retries:
--------------------------------------------------------------------------------
1 | #!/bin/execlineb
2 |
3 | #
4 | # with-retries -n numretries -t millisecs prog...
5 | #
6 |
7 | elgetopt "n:t:"
8 | multisubstitute
9 | {
10 | importas -u -D 3 nretries ELGETOPT_n
11 | importas -u -D 500 timeout ELGETOPT_t
12 | }
13 | elgetpositionals -P0
14 | emptyenv -P
15 | forbacktickx -x 0,1 -d"\n" i { s6-seq 0 ${nretries} }
16 | importas -u i i
17 | if { s6-test ${i} -ne ${nretries} }
18 | foreground
19 | {
20 | s6-maximumtime -t ${timeout}
21 | $@
22 | }
23 | importas -u ? ?
24 | if -x 99 { s6-test ${?} -eq 0 }
25 |
--------------------------------------------------------------------------------