Compare commits

...

181 commits

Author SHA1 Message Date
Johannes Zellner 46feafc923 Update nginx config according to upstream 2024-04-29 13:42:10 +02:00
Johannes Zellner c348b44294 Bump version 2024-04-29 13:40:43 +02:00
Johannes Zellner cad464a8c8 storage.original_video_files is now required 2024-04-29 13:37:34 +02:00
Johannes Zellner 539cce44d1 Update test deps 2024-04-29 11:23:23 +02:00
Johannes Zellner 252cee6e1c Update to 6.1.0 2024-04-29 11:23:01 +02:00
Johannes Zellner 942b937a8f Bump version 2024-04-04 15:56:19 +02:00
Johannes Zellner 0bd51a6143 Make tests language independent 2024-04-04 15:52:18 +02:00
Johannes Zellner a54fd42ce9 Update test deps 2024-04-04 15:21:33 +02:00
Johannes Zellner 90c7834d38 Update to 6.0.4 2024-04-04 15:20:03 +02:00
Girish Ramakrishnan 6021c34466 Version 2.15.1 2024-01-18 12:23:32 +01:00
Girish Ramakrishnan a2776ec87f Fix nginx config 2024-01-18 12:23:23 +01:00
Girish Ramakrishnan 441b8dba99 more test fixing 2024-01-18 12:21:14 +01:00
Girish Ramakrishnan 6f63008dd3 Fix tests 2024-01-18 11:47:58 +01:00
Girish Ramakrishnan f97551091d Update Peertube to 6.0.3 2024-01-18 10:58:23 +01:00
Girish Ramakrishnan 854ffa875c Version 2.15.0 2024-01-16 15:31:38 +01:00
Girish Ramakrishnan e92dfaed0b typo 2024-01-16 15:27:31 +01:00
Girish Ramakrishnan 27fb06cd91 optional configure it seems 2024-01-16 15:00:04 +01:00
Girish Ramakrishnan 82be3d5f13 Fix test 2024-01-16 14:23:23 +01:00
Girish Ramakrishnan 3c7afbe0ca always install oidc plugin 2024-01-16 14:22:02 +01:00
Vladimir D 4fcf9b1684 OIDC auth implemented, tests updated 2024-01-15 21:01:40 +04:00
Vladimir D 56009a97dd make it using nginx 2024-01-10 21:04:08 +04:00
Girish Ramakrishnan 07b2808530 Version 2.14.0-1 2024-01-05 13:05:36 +01:00
Girish Ramakrishnan 55d66cd2bb highlight breaking changes 2024-01-05 13:05:26 +01:00
Johannes Zellner 0471f18395 Bump version 2023-12-28 12:38:47 +01:00
Johannes Zellner 98a445de41 Fixup tests 2023-12-28 12:21:57 +01:00
Johannes Zellner 633d8f793c Update test deps 2023-12-24 13:51:30 +01:00
Johannes Zellner b97e25852c Ensure newly required settings 2023-12-24 13:43:56 +01:00
Johannes Zellner e6c37a102f Update to 6.0.2 2023-12-22 17:33:29 +01:00
Girish Ramakrishnan 1782eb10da Version 2.13.0-1 2023-11-22 13:00:15 +01:00
Girish Ramakrishnan 653d756d6e Give 1GB by default 2023-11-22 12:59:40 +01:00
Girish Ramakrishnan cb59b8bda8 Version 2.13.0 2023-10-23 16:52:59 +02:00
Girish Ramakrishnan ab618d6ccc Update test packages 2023-10-23 10:37:51 +02:00
Girish Ramakrishnan 0482d70e78 Update base image to 4.2.0 2023-10-22 19:51:48 +02:00
Johannes Zellner 22c3e9d18c Update test deps 2023-08-30 22:16:27 +02:00
Johannes Zellner 7f600cbce1 Bump version 2023-08-30 22:16:16 +02:00
Girish Ramakrishnan 4c0d48aedd Version 2.12.0-1 2023-07-11 10:00:39 +05:30
Girish Ramakrishnan 902a3c34b3 set maxmemory-policy to noeviction to prevent warnings 2023-07-11 09:34:11 +05:30
Girish Ramakrishnan 73730f82fe Fix issue where initial credentials are not working 2023-07-11 09:25:21 +05:30
Johannes Zellner c91051c145 Better tab closing instructions 2023-06-22 21:09:28 +02:00
Johannes Zellner bf5ec0eae5 Fixup tests 2023-06-21 18:03:32 +02:00
Johannes Zellner 2e661e50f8 New node needs new npm folder 2023-06-21 17:07:26 +02:00
Johannes Zellner 7438ee6b80 Bump version and update nodejs 2023-06-21 16:15:56 +02:00
Girish Ramakrishnan 953ab55b2e Need redis 6 2023-03-21 11:59:41 +01:00
Girish Ramakrishnan 1812ea1aef Version 2.11.0 2023-03-21 11:58:52 +01:00
Girish Ramakrishnan f10e89d4ae Update test packages 2023-03-21 11:55:28 +01:00
Girish Ramakrishnan adbceef3b0 Update PeerTube to 5.1.0 2023-03-21 11:10:57 +01:00
Girish Ramakrishnan 3ef5bd72ba Version 2.10.2 2023-03-06 11:00:31 +01:00
Girish Ramakrishnan 49f62761ca Update test packages 2023-03-06 10:49:16 +01:00
Girish Ramakrishnan ec2620275e remove migration script 2023-01-24 10:57:11 +01:00
Girish Ramakrishnan 5da1da9700 Give it more time 2023-01-05 12:21:57 +01:00
Johannes Zellner 7a7cea05f9 Bump version 2023-01-05 12:07:46 +01:00
Girish Ramakrishnan 9ab0ca8cf5 Update peertube to 5.0.1 2023-01-05 11:24:15 +01:00
Girish Ramakrishnan 8225196f43 Version 2.10.0 2023-01-03 18:55:03 +01:00
Girish Ramakrishnan fdbbf83b52 update base image to 4.0.0 2023-01-03 18:45:50 +01:00
Johannes Zellner b5ea4a34aa Fixup start script 2022-12-16 17:22:52 +01:00
Johannes Zellner 83dffb7e82 Update test deps 2022-12-16 15:54:30 +01:00
Johannes Zellner afae3cc99e Run v5 migration script 2022-12-16 15:53:50 +01:00
Johannes Zellner 73d4a02c4a add missing well_known data storage setting 2022-12-16 15:46:35 +01:00
Johannes Zellner e86ace516f Ensure we have an app secret set, also after update 2022-12-14 15:58:24 +01:00
Johannes Zellner 8543ac28e0 Update test deps 2022-12-13 11:31:00 +01:00
Johannes Zellner a2eba07155 Bump version 2022-12-13 11:30:41 +01:00
Girish Ramakrishnan 171606daa4 Version 2.8.1 2022-11-17 13:39:46 +01:00
Girish Ramakrishnan 7dc76ff44d scroll 2022-11-17 13:38:43 +01:00
Girish Ramakrishnan 205a2721dd Update test packages 2022-11-17 13:11:50 +01:00
Girish Ramakrishnan bd5bd4edc4 Does not support display name
instance name or originator it seems

863477173e/server/lib/emailer.ts (L138)
2022-11-17 12:44:47 +01:00
Girish Ramakrishnan 8087c7f461 Update PeerTube to 4.3.1 2022-11-17 12:43:17 +01:00
Johannes Zellner 3df343c185 Fixup tests 2022-09-21 16:55:48 +02:00
Johannes Zellner 519a2a2628 Bump version 2022-09-21 13:40:22 +02:00
Johannes Zellner 863c687e68 Update test deps 2022-06-28 15:48:47 +02:00
Johannes Zellner fe514b48af Bump version for 4.2.2 2022-06-28 15:48:03 +02:00
Johannes Zellner ab8e5cfba8 Bump version for 4.2.1 2022-06-21 15:43:02 +02:00
Girish Ramakrishnan 9ea3b065ef remove migration 2022-06-07 16:48:47 -07:00
Girish Ramakrishnan 2165462327 Version 2.7.0 2022-06-07 16:48:00 -07:00
Girish Ramakrishnan 6b9e6af286 run migration script as explained in https://github.com/Chocobozzz/PeerTube/releases/tag/v4.2.0 2022-06-07 16:47:03 -07:00
Girish Ramakrishnan 6326d86698 Update test packages 2022-06-07 16:40:06 -07:00
Girish Ramakrishnan 6cb09b4425 remove patches 2022-06-07 12:47:24 -07:00
Girish Ramakrishnan 5b6c702868 update peertube to 4.2.0 2022-06-07 09:53:46 -07:00
Girish Ramakrishnan 2136835456 Version 2.6.4 2022-05-12 11:41:21 -07:00
Girish Ramakrishnan c91747cee4 symlink cache directory
this helps when installing plugins which use node-gyp

https://forum.cloudron.io/topic/4221/trying-to-import-a-whole-yt-channel-via-cli
2022-05-12 11:23:19 -07:00
Girish Ramakrishnan 3eb43da9db Just use upstream prosody
https://github.com/JohnXLivingston/peertube-plugin-livechat/blob/main/documentation/prosody.md#for-standard-peertube-installations
2022-05-06 10:56:13 -07:00
Girish Ramakrishnan 5eda83a948 Merge branch 'master' into 'master'
Added support for the livechat plugin

See merge request cloudron/peertube-app!2
2022-05-06 17:53:28 +00:00
Atridad Lahutton f222b44edb Added support for the livechat plugin 2022-05-05 22:35:01 -06:00
Girish Ramakrishnan 0d82f15f8f Version 2.6.2 2022-04-29 15:27:25 -07:00
Girish Ramakrishnan 9833b559ca lint 2022-04-29 15:16:11 -07:00
Girish Ramakrishnan 76c3a3784c Update test packages 2022-04-29 14:49:12 -07:00
Girish Ramakrishnan 7776e981c3 apply cli patch (https://github.com/Chocobozzz/PeerTube/issues/4858) 2022-04-29 14:30:58 -07:00
Girish Ramakrishnan 814c3b4ca8 Version 2.6.1 2022-03-08 13:22:41 -08:00
Girish Ramakrishnan 2aaab9050e Update peertube to 4.1.1 2022-03-08 12:16:54 -08:00
Girish Ramakrishnan 32da4bba33 Version 2.6.0 2022-03-08 12:13:30 -08:00
Girish Ramakrishnan d9a17c5c3a Update test packages 2022-03-08 11:51:44 -08:00
Girish Ramakrishnan 867fc4e9e4 rework how plugins are installed 2022-03-08 11:48:20 -08:00
Girish Ramakrishnan b50103ed0d more v4 migration removal 2022-03-07 21:22:40 -08:00
Girish Ramakrishnan 4b89c0186d remove superfluous 4.0 migration 2022-03-07 21:12:04 -08:00
Johannes Zellner 8d22e1471c Update test deps 2022-02-23 13:34:30 +01:00
Johannes Zellner 1c667c94bb Bump version for 4.1.0 2022-02-23 13:34:19 +01:00
Girish Ramakrishnan a84f9a3011 Version 2.5.1 2022-01-18 18:09:22 -08:00
Girish Ramakrishnan 728d846bf8 Update test packages 2022-01-18 18:08:58 -08:00
Girish Ramakrishnan 0ca3d4876a Update base image to 3.2.0 2022-01-18 12:54:57 -08:00
Johannes Zellner da87f2c8fb Make tests more predictable 2021-12-16 17:33:47 +01:00
Johannes Zellner 0ce7dbe52b Asyncify tests 2021-12-16 16:56:07 +01:00
Johannes Zellner 9e4ea1cf4d Update lock file to v2 2021-12-16 16:11:37 +01:00
Johannes Zellner 8a6d5d5394 Improve startup logic to make it more stable 2021-12-16 16:11:13 +01:00
Johannes Zellner b3895aab55 Add manual HLS migration script for v4 only 2021-12-16 11:35:04 +01:00
Johannes Zellner 17e3873f8e Add migration for v4 config options 2021-12-15 20:10:36 +01:00
Johannes Zellner b8a3df7ffd Small start.sh fix 2021-12-15 17:41:56 +01:00
Johannes Zellner b10ab51b1d Use new base image 3.1.0 2021-12-15 16:52:49 +01:00
Johannes Zellner 40c23012e7 Use ffmpeg 4.4.1 2021-12-14 11:26:06 +01:00
Johannes Zellner 10148592ae Update test deps 2021-12-14 11:02:01 +01:00
Johannes Zellner f97ae77434 Update to peertube v4 2021-12-14 11:00:22 +01:00
Johannes Zellner dd3a0c7890 Fix tests 2021-10-11 12:07:52 +02:00
Johannes Zellner 607755fee6 Update test deps 2021-10-11 11:17:09 +02:00
Johannes Zellner 3a2cd4780e Bump version for 3.4.1 2021-10-11 11:16:36 +02:00
Girish Ramakrishnan a4da677eda version 2.4.0 2021-09-13 14:28:13 -07:00
Girish Ramakrishnan ec44429f87 install by id 2021-09-13 14:26:45 -07:00
Girish Ramakrishnan 260ab9ca79 fix test 2021-09-13 14:04:40 -07:00
Girish Ramakrishnan 45d574157d bump memory limit for plugin install to work reliably 2021-09-13 13:13:39 -07:00
Girish Ramakrishnan 477ae214fe silent curl 2021-09-13 13:13:22 -07:00
Girish Ramakrishnan 6547dcfe0d typo 2021-09-13 11:20:09 -07:00
Girish Ramakrishnan fb0630314b Update packages 2021-09-13 11:11:06 -07:00
Girish Ramakrishnan de3778cbe0 Update peertube to 3.4.0 2021-09-13 09:20:05 -07:00
Girish Ramakrishnan 5f59f731b2 Add proper peertube command 2021-08-12 14:50:43 -07:00
Girish Ramakrishnan 293b218804 Version 2.3.0-1 2021-07-21 14:32:38 -07:00
Girish Ramakrishnan ff1734e31c Add forumUrl 2021-07-21 14:32:16 -07:00
Girish Ramakrishnan c4b985ae1a Version 2.3.0 2021-07-21 13:01:18 -07:00
Girish Ramakrishnan a2df0244a3 Update test packages 2021-07-21 12:58:48 -07:00
Girish Ramakrishnan 33e91423da Update peertube to 3.3.0 2021-07-21 11:01:48 -07:00
Girish Ramakrishnan 721dbfdc1c Version 2.2.0 2021-06-02 21:08:06 -07:00
Girish Ramakrishnan 12bcc926d2 Fix test 2021-06-02 20:17:59 -07:00
Girish Ramakrishnan 0bd81a757e Update peertube to 3.2.1 2021-06-02 17:42:18 -07:00
Girish Ramakrishnan cd17390944 Update peertube to 3.2.0 2021-06-02 17:41:20 -07:00
Girish Ramakrishnan 3f9d8dda26 Version 2.1.0 2021-03-29 14:00:15 -07:00
Girish Ramakrishnan de5e800c00 Set minBoxVersion since it only supports pg 10 and beyond 2021-03-29 13:48:34 -07:00
Girish Ramakrishnan 51e8a5fd5b Update test packages 2021-03-29 13:46:59 -07:00
Girish Ramakrishnan b3055e5d33 Update peertube to 3.1.0 2021-03-29 13:29:02 -07:00
Johannes Zellner be561c8896 Migrate to yq v4
https://mikefarah.gitbook.io/yq/v/v4.x/upgrading-from-v3
2021-02-24 15:39:06 +01:00
Johannes Zellner 485447583a Remove unused test deps 2021-02-24 14:19:15 +01:00
Johannes Zellner 0cf679634e Bump version for base image v3 2021-02-24 14:17:20 +01:00
Girish Ramakrishnan 6f8f785c5a Version 2.0.1 2021-01-12 16:14:35 -08:00
Girish Ramakrishnan f40099dd36 Update peertube to 3.0.1 2021-01-12 16:13:14 -08:00
Girish Ramakrishnan 7e65810598 Add federated tag 2021-01-12 16:13:14 -08:00
Johannes Zellner d4b1cf2a6e enable required test case 2021-01-07 20:50:44 +01:00
Johannes Zellner 0827c34273 Some test fixes 2021-01-07 17:21:38 +01:00
Johannes Zellner d1ff7ac764 Update test dependencies 2021-01-07 11:51:58 +01:00
Johannes Zellner e956b21df5 Fix description and add changelog 2021-01-07 11:33:49 +01:00
Johannes Zellner 88d120d3e6 Merge branch 'v3-rc1' into 'master'
v1.3.0

See merge request cloudron/peertube-app!1
2021-01-07 10:30:06 +00:00
Atridad Lahiji e4d2fcfa71 Updated for the official Peertube 3.0.0 release 2021-01-07 01:23:13 -07:00
Atridad Lahiji d1c97843f4 v2.0.0 with Peertube v3.0.0 RC1 2020-12-30 15:53:25 -07:00
Girish Ramakrishnan 66a181fff9 Add readme 2020-12-14 14:17:18 -08:00
Girish Ramakrishnan bd03a63300 Add media tag 2020-12-08 10:37:46 -08:00
Girish Ramakrishnan 4023d6f4df Version 1.2.0 2020-12-02 10:22:14 -08:00
Girish Ramakrishnan 73a42b9cb4 Update ffmpeg to 4.1 2020-12-02 10:15:31 -08:00
Girish Ramakrishnan e17dfb5ac5 Update test packages 2020-12-02 10:15:02 -08:00
Girish Ramakrishnan cca52ed3c3 Version 1.1.1 2020-10-15 17:36:47 -07:00
Girish Ramakrishnan 87cf953707 Set cwd as tmp dir when transcoding
https://github.com/Chocobozzz/PeerTube/pull/3198
2020-10-15 17:32:15 -07:00
Girish Ramakrishnan 146532d9cd Add test 2020-10-15 16:59:12 -07:00
Girish Ramakrishnan c3481eb352 Version 1.1.0 2020-10-14 22:49:55 -07:00
Girish Ramakrishnan 26ec47901c Enable LDAP 2020-10-14 22:41:45 -07:00
Girish Ramakrishnan bf58caa6f7 Version 1.0.0 2020-10-14 19:31:17 -07:00
Girish Ramakrishnan c4026054b9 bump the timeout a bit more 2020-10-14 19:21:43 -07:00
Girish Ramakrishnan ec25b08e08 Fix ffmpeg error with EROFS when transcoding 2020-10-14 18:39:04 -07:00
Girish Ramakrishnan 4bf2d3c48f Version 0.7.0 2020-10-13 22:53:37 -07:00
Girish Ramakrishnan 0ed9531bd4 Update peertube to 2.4.0 2020-10-13 22:34:42 -07:00
Girish Ramakrishnan eff50e6df3 Versio 0.6.0 2020-10-13 22:32:59 -07:00
Girish Ramakrishnan e33e56c71a Fix up tests 2020-10-13 22:19:13 -07:00
Girish Ramakrishnan 3b2e99ad6c Fix postinstall 2020-10-13 22:19:02 -07:00
Girish Ramakrishnan 457f583448 Install youtube-dl and also a shortcut for peertube cli 2020-10-13 22:17:15 -07:00
Girish Ramakrishnan c3eabb7097 Install cli tool 2020-10-13 21:58:07 -07:00
Girish Ramakrishnan f0c8d851a5 Update screenshots 2020-09-29 15:08:04 -07:00
Girish Ramakrishnan 642ad72ff7 Move server to /app/code/server 2020-07-24 21:47:21 -07:00
Girish Ramakrishnan efe43a244b Verison 0.5.0 2020-07-22 14:20:36 -07:00
Girish Ramakrishnan 87ba950868 add gitignore 2020-07-22 14:07:46 -07:00
Girish Ramakrishnan 62eefb5582 Use production.yaml instead of local-production.yaml 2020-07-22 14:03:41 -07:00
Girish Ramakrishnan eb1a3f4fe7 Remove important 2020-07-22 12:32:18 -07:00
Girish Ramakrishnan cc2b3a5c63 Version 0.4.0 2020-07-21 15:32:58 -07:00
Girish Ramakrishnan e62edc778e Add tests 2020-07-21 15:30:01 -07:00
Girish Ramakrishnan 2effab3922 initial tests 2020-07-21 13:46:54 -07:00
Girish Ramakrishnan a0d74d4bca Delete suffix from older installations 2020-07-21 13:12:54 -07:00
Girish Ramakrishnan 0f2ef1f346 No need to patch db setup anymore
https://github.com/Chocobozzz/PeerTube/pull/2898 is merged
2020-07-21 11:54:06 -07:00
Girish Ramakrishnan 6e98708194 Update peertube to 2.3.0 2020-07-21 09:53:15 -07:00
Johannes Zellner 41c8b3b4e9 Use common postinstall format 2020-06-29 20:53:34 +02:00
Girish Ramakrishnan 86ecc69896 Fix trust proxy
https://forum.cloudron.io/topic/2727/debug-error
2020-06-25 15:22:56 -07:00
19 changed files with 3856 additions and 101 deletions

View file

@ -2,5 +2,6 @@
.gitignore
.dockerignore
node_modules
screenshots
screenshots/
test/

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
node_modules

View file

@ -1,9 +0,0 @@
[0.1.0]
* Initial version
[0.2.0]
* Update logo
[0.3.0]
* Set min box version to 5.3.0

319
CHANGELOG.md Normal file
View file

@ -0,0 +1,319 @@
[0.1.0]
* Initial version
[0.2.0]
* Update logo
[0.3.0]
* Set min box version to 5.3.0
[0.4.0]
* Set trust proxy correctly
* Update PeerTube to 2.3.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v2.3.0)
* Add global search support (has to be explicitely enabled by admins)
* Add ability for admins to display a banner on their instance
* Support Vietnamese and Kabyle languages. Also re-establish Occitan language locale despite lack of support in Angular
* Add video miniature dropdown in Discover page
* Add channel information in My videos page
* Add videos count per channel in My channels page
[0.5.0]
* Fix issue where configs were not loaded correctly
[0.6.0]
* Install CLI tool in /app/code/cli
[0.7.0]
* Update Peertube to 2.4.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v2.4.0)
* Add global search support (has to be explicitely enabled by admins)
* Add ability for admins to display a banner on their instance
* Support Vietnamese and Kabyle languages. Also re-establish Occitan language locale despite lack of support in Angular
* Moderation:
* Add ability to bulk delete comments of an account
* Add ability to mute accounts from video miniature
* Improve report modal: @rigelk in #2842
* Replaced softies icons by feather icons @rigelk
* Support player hotkeys when it is not focused
* Improve video miniature grids to fill the space as much as possible @rigelk
* Add video miniature dropdown in Discover page
[1.0.0]
* Fix transcoding issues
[1.1.0]
* Enable LDAP
[1.1.1]
* Fix transcoding error with readonly file system
[1.2.0]
* Update ffmpeg to 4.3
[1.2.0]
* Update to Peertube v3.0.0 RC1
[2.0.0]
* Update to Peertube v3.0.0
* Remove deprecated video abuse API
* Update the default configuration to not federate unlisted videos. We recommend to admins to update this [setting](https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L182)
* Update the default configuration to remove remote video views to reduce DB size and improve performances. We recommend to admins to update this [setting](https://github.com/Chocobozzz/PeerTube/blob/develop/config/production.yaml.example#L170)
[2.0.1]
* Update Peertube to 3.0.1
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v3.0.1)
* Security: Fix retrieving data of another user if the username contains _ when fetching my information
* Fix account feed URL
* Log RTMP server error (address already in use)
* Fix NPM theme links in admin theme page
* Don't reject AP actors with empty description
[2.0.2]
* Update base image to v3
[2.1.0]
* Update Peertube to 3.1.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v3.1.0)
* Fair transcoding jobs priority: give an higher priority to optimize jobs and decrease priority of transcoding jobs depending on the amount of videos uploaded by the user during the last 7 days #3637
* Allow admins to choose the transcoding jobs concurrency
* Support Albanian locale
* Async torrent creation on video upload. We hope that it should fix some weird upload errors
* Add .m4a audio upload support
* Stricter youtube-dl format selectors for import (don't import HDR videos and cap to the max supported resolution) #3516
* Don't publish imported videos before the user submitted the second step form
* Implement hot and best trending algorithms #3625 & #3681
* Support webp avatar upload
* Allow user to search through their watch history #3576
* Allow AP resolution for default account/channel pages (/accounts/:name/video-channels and /video-channels/:name/videos)
[2.2.0]
* Update Peertube to 3.2.1
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v3.2.0)
* By default, HLS transcoding is now enabled and webtorrent is disabled. We suggest you to reflect this change.
* PeerTube client now displays bigger video thumbnails.
[2.3.0]
* Update PeerTube to 3.3.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v3.3.0)
[2.4.0]
* Update PeerTube to 3.4.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v3.4.0)
* Add video filters to common video pages (account videos, channel videos, recently added/local/trending videos...)
* Add ability for instances to follow any actor (so specific accounts and channels)
* Updated HLS.js (library to play HLS playlists in PeerTube player) to V1:
* Add ability to search by PeerTube host in search filters
* Disallow search engine indexation of remote channels/accounts
* Support Latin language for videos
[2.4.1]
* Update PeerTube to 3.4.1
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v3.4.1)
* Fix broken PeerTube when cookies are disabled or if the embed iframe does not have appropriate options
* Fix search by channel's handle with an handle containing the local host
* Don't display autoblock message in upload page it is not enabled by the admin
* Don't index /about/peertube page
* Correctly handle OEmbed with an URL containing query parameters
* More robust youtube-dl thumbnail import
* Don't send a new video notification when using create transcoding CLI script
[2.5.0]
* Update PeerTube to 4.0.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.0.0)
[2.5.1]
* Update base image to 3.2.0
[2.6.0]
* Update PeerTube to 4.1.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.1.0)
* Player improvements
* Search improvements
* Video imports
* Add ability for users to delete individual elements in videos history
* Show date and views counter in playlist element miniature #4396
* Add norsk locale support
* Check mute status and display mute badges in channel and account pages
* Add No linguistic content video language option #4631
* Don't send notifications to admins/moderators if an admin/moderator reported an abuse
* Add ability for moderators/admins to edit any channel #4608
* Add a refresh button to admin videos overview page #4753
[2.6.1]
* Update PeerTube to 4.1.1
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.1.1)
* Strip EXIF data when processing images
[2.6.2]
* Patch CLI tool - see #4858
[2.6.3]
* Add prosody for livechat-plugin
[2.6.4]
* Symlink cache folder for node-gyp to work
[2.7.0]
* Update PeerTube to 4.2.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.2.0)
[2.7.1]
* Update PeerTube to 4.2.1
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.2.1)
* Fix live ending job that breaks new live session
* Fix search filters counter
* Fix upload banner icon margin
* Fix button icon margin
* Fix my import expander icon that should only be displayed on import error
* Fix select components styling inconsistency
* Increase max watch section to avoid too much warnings in server
* Optimize broadcast job creation
* Optimize View activities delivery using a dedicated broadcast job queue that can be run in parallel
* Fix video selection buttons placement
* Fix searching into account blocklist
* Fix incorrect instance stats
* Fix broken player on ICE error
* Relax views federation
* Fix peertube user in docker
* Fix playlist element federation with a deleted video
[2.7.2]
* Update PeerTube to 4.2.2
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.2.2)
* Upgrade vulnerable server dependencies
* Fix fast restream in permanent live
* Fix latency mode setting when creating a live
* Fix unique constraint tag violation when importing videos
* Fix latest live sessions order
* Fix server crash feed when accessing feeds that contains a live
* Fix false boolean attribute (data-is-live etc) in custom markup
[2.8.0]
* Update PeerTube to 4.3.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.3.0)
* Use yt-dlp by default instead of youtube-dl for new installations (because of much more dev activity)
* Reduce amount of PeerTube error logs
* Introduce log.log_tracker_unknown_infohash setting to disable "Unknown infoHash" warnings
* Web browsers send their error logs to the server that writes them in its own logs. Can be disabled by log.accept_client_log setting
* Enable metrics export using a Prometheus exporter
* Enable tracing export using a Jaeger exporter
* Automatically rebuild native plugin modules on NodeJS ABI change
[2.8.1]
* Update PeerTube to 4.3.1
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v4.3.1)
* Prevent XSS in sort select on pages that list videos. Thanks to Anthony Roth who reported the vulnerability!
* Fix broken embed player on live reload
* Fix channel follow when manually approve instance followers is enabled
* Fix input with number overflow on small screen
* Fix moderation dropdown overflow on mobile
[2.9.0]
* Update PeerTube to 5.0.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v5.0.0)
* Support object storage for live streams tada
* Support Two Factor authentication (OTP) tada
* Add explanation on disk space used for user quota admin config #5305
* Display channel in my videos list
* Show which playlists videos are added to in my videos list
* Add Channels link in left menu
* Add ... after the truncated video name in miniature
* Add object storage info badge in videos admin overview
* Add links to video files in videos admin overview
* Better indicate the live ended in embed by displaying a message and the live preview
* Force live autoplay by muting the video if necessary when the user was waiting for the live
* Handle network issues in video player #5138
* Cache chunks to upload in server to resume upload later #5224
* Add ability to serve custom static files under /.well-known URL path #5214
* Use account/channel avatar in account/channel RSS feeds #5325
* Add filter to sort videos by name #5351
* Add ability to configure OpenTelemetry Prometheus exporter listening hostname
[2.10.0]
* Update base image to 4.0.0
[2.10.1]
* Update PeerTube to 5.0.1
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v5.0.1)
* Fix HLS player infinite loading when the live stream/video ends
* Do not autoplay live without autoplay setting
* Fix private/internal video playback from Cloudflare object storage
* Fix local channel stats/OpenTelemetry metric
* Also display dropdown for videos from the homepage
* Fix broken P2P with live stream coming from object storage
* Fix responsive of table pagination
[2.10.2]
* Remove invokation of 5.0 upgade script
[2.11.0]
* Update PeerTube to 5.1.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v5.1.0)
* **IMPORTANT**: If your instance has signup enabled, user registration approval is automatically enabled by the default configuration of this release. You can change this setting in your production.yaml or in the configuration page in the web admin
Update web browsers support list:
* Drop support of Safari 11 on iOS
* Drop support of Safari 11 on desktop
* Drop support of Firefox 68 on desktop
* Implement user registration approval (https://docs.joinpeertube.org/admin/managing-users#registration-approval) #5544
* Add "back to live" button in player
* Add Icelandic & Ukrainian locales
* Add Global views default trending algorithm option in admin configuration #5471
[2.12.0]
* Update PeerTube to 5.2.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v5.2.0)
* Implement remote transcoding for VOD videos, Live streams and Studio editions tada #5769
* If enabled, remote PeerTube runners can process these high CPU jobs
* Admin documentation: https://docs.joinpeertube.org/admin/remote-runners
* PeerTube runner CLI documentation: https://docs.joinpeertube.org/maintain/tools#peertube-runner
* Demonstration video: https://peertube2.cpy.re/w/oJwHHYwt4oKjKhLNh2diAY
* Architecture documentation: https://docs.joinpeertube.org/contribute/architecture#remote-vod-live-transcoding
* Add Podcast RSS feed support: #5487
* Add ability to set custom privacy for live replays #5692
* Render images of markdown fields in About page #5732
* Admin can disable user video history by default #5728
* Improve global accessibility
[2.12.1]
* Update PeerTube to 5.2.1
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v5.2.1)
* Fix loading spinner displayed forever on Chrome
* Fix broken replay with long live name
* Fix fps transcoding on remote runners
* Fix terms/code of conduct link toggle
[2.13.0]
* Update base image to 4.2.0
[2.14.0]
* Update PeerTube to 6.0.2
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v6.0.2)
* [Important breaking changes in 6.0](https://github.com/Chocobozzz/PeerTube/blob/develop/CHANGELOG.md#v600). Some keys in `production.yaml` have been renamed (for example, object storage keys).
[2.15.0]
* Migrate to OIDC login
[2.15.1]
* Update PeerTube to 6.0.3
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v6.0.3)
* Fix HTML meta tags with attributes that contain quotes
* Fix time parsing resulting in broken video start time in some cases
* Fix WebTorrent video import crash
* Reload Discover page on logout
* Fix privacy error when updating a live, even if the privacy has not changed
* Fix invalid remote live state change notification that causes the player to reload
* Don't apply big play button skin to settings menu
* Fix downloading video files from object storage with some video names (that include emojis, quotes etc)
[2.15.2]
* Update PeerTube to 6.0.4
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v6.0.4)
* Important: Prevent XSS injection in embed. Thanks Syst3m0ver!
[2.16.0]
* Update PeerTube to 6.1.0
* [Full changelog](https://github.com/Chocobozzz/PeerTube/releases/tag/v6.1.0)
* Compact ActivityPub JSON-LD objects before using them to prevent incorrect access control @tesaguri
* Protect ActivityPub information related to private/internal/blocked videos

View file

@ -1,5 +1,6 @@
{
"version": "0.3.0",
"version": "2.16.0",
"upstreamVersion": "6.1.0",
"id": "org.joinpeertube.cloudronapp",
"title": "PeerTube",
"author": "PeerTube developers",
@ -9,23 +10,35 @@
"tagline": "Take back control of your videos",
"icon": "file://logo.png",
"healthCheckPath": "/",
"httpPort": 9000,
"httpPort": 80,
"tcpPorts": {
"RTMP_PORT": {
"title": "RTMP Port",
"description": "RTMP Port for livestreaming",
"defaultValue": 1935,
"containerPort": 1935
}
},
"addons": {
"localstorage": {},
"postgresql": {},
"redis": {},
"sendmail": {}
"sendmail": { "supportsDisplayName": false },
"oidc": { "loginRedirectUri": "/plugins/auth-openid-connect/router/code-cb" }
},
"tags": [ "video", "youtube", "vimeo", "blog", "instagram" ],
"memoryLimit": 1073741824,
"forumUrl": "https://forum.cloudron.io/category/91/peertube",
"optionalSso": true,
"tags": [ "video", "youtube", "vimeo", "blog", "instagram", "media", "federated" ],
"mediaLinks": [
"https://cloudron-app-screenshots.s3.amazonaws.com/org.joinpeertube.cloudronapp/ae8ff10c10b69017eac15d4bf0f432db932a5082/peertube-screenshot.jpg",
"https://cloudron-app-screenshots.s3.amazonaws.com/org.joinpeertube.cloudronapp/ae8ff10c10b69017eac15d4bf0f432db932a5082/home.png",
"https://cloudron-app-screenshots.s3.amazonaws.com/org.joinpeertube.cloudronapp/ae8ff10c10b69017eac15d4bf0f432db932a5082/subscribe.png"
"https://screenshots.cloudron.io/org.joinpeertube.cloudronapp/peertube-screenshot.jpg",
"https://screenshots.cloudron.io/org.joinpeertube.cloudronapp/home.png",
"https://screenshots.cloudron.io/org.joinpeertube.cloudronapp/subscribe.png"
],
"changelog": "file://CHANGELOG",
"changelog": "file://CHANGELOG.md",
"postInstallMessage": "file://POSTINSTALL.md",
"documentationUrl": "https://cloudron.io/documentation/apps/peertube/",
"minBoxVersion": "5.3.0",
"documentationUrl": "https://docs.cloudron.io/apps/peertube/",
"minBoxVersion": "7.4.0",
"manifestVersion": 2
}

View file

@ -1,5 +1,3 @@
This app packages PeerTube <upstream>2.2.0</upstream>
## About
PeerTube is a free, decentralized and federated video platform developed as an alternative to other platforms that centralize our data and attention, such as YouTube, Dailymotion or Vimeo.

View file

@ -1,35 +1,48 @@
FROM cloudron/base:2.0.0@sha256:f9fea80513aa7c92fe2e7bf3978b54c8ac5222f47a9a32a7f8833edf0eb5a4f4
FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4
RUN mkdir -p /app/code /app/pkg
WORKDIR /app/code
RUN mkdir -p /app/code/server /app/pkg
WORKDIR /app/code/server
RUN apt-get -y update && apt -y install ffmpeg && rm -rf /var/cache/apt /var/lib/apt/lists
RUN apt update && apt install -y prosody && rm -rf /var/cache/apt /var/lib/apt/lists
# install yq
RUN curl -sL https://github.com/mikefarah/yq/releases/download/3.2.1/yq_linux_amd64 -o /usr/bin/yq && \
chmod +x /usr/bin/yq
ARG VERSION=6.1.0
ARG VERSION=2.2.0
# install peertube. the chown is required for some reason for ffmpeg. it fails with EROFS without it when transcoding
RUN curl -sL https://github.com/Chocobozzz/PeerTube/releases/download/v${VERSION}/peertube-v${VERSION}.tar.xz | tar --strip-components 1 -Jxvf - && \
yarn install --production --pure-lockfile
# install peertube
RUN curl -sL https://github.com/Chocobozzz/PeerTube/releases/download/v${VERSION}/peertube-v${VERSION}.tar.xz | tar --strip-components 1 -Jxvf -
RUN yarn install --production --pure-lockfile
RUN npm install -g @peertube/peertube-cli
# remove the peertube suffix of dbname (see https://github.com/Chocobozzz/PeerTube/pull/2898)
RUN sed -e "s/DBNAME: 'peertube' +/DBNAME: /g" -i dist/server/initializers/config.js
# the json is created and managed by web ui. it overrides the yaml file (https://github.com/lorenwest/node-config/wiki/Configuration-Files)
RUN ln -sf /app/data/production.yaml /app/code/server/config/production.yaml && \
ln -sf /app/data/local-production.json /app/code/server/config/local-production.json
# dbname branch
# ARG VERSION=e7fe135b5a5666147256efa11d15474d761c37d4
# RUN curl -L https://github.com/cloudron-io/PeerTube/archive/${VERSION}.tar.gz | tar -zxvf - --strip-components=1
#
# RUN yarn install && npm run build
# youtube-dl
RUN curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl && chmod +x /usr/local/bin/youtube-dl
RUN ln -sf /app/data/production.yaml /app/code/config/local-production.yaml
# required when installing plugins/themes that use node-gyp
RUN rm -rf /home/cloudron/.cache && ln -s /run/peertube/cache /home/cloudron/.cache && \
rm -rf /home/cloudron/.npm && ln -s /run/peertube/npm /home/cloudron/.npm
COPY production.yaml.example start.sh /app/pkg/
ENV NODE_ENV production
ENV NODE_CONFIG_DIR /app/code/config
ENV NODE_CONFIG_DIR /app/code/server/config
RUN printf '#!/bin/bash\n\ncd /app/code/cli && node dist/server/tools/peertube.js $@\n' > /usr/bin/peertube && chmod +x /usr/bin/peertube
# add nginx config
RUN rm /etc/nginx/sites-enabled/*
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
RUN ln -sf /run/peertube-nginx.conf /etc/nginx/sites-enabled/peertube.conf
COPY nginx/readonlyrootfs.conf /etc/nginx/conf.d/readonlyrootfs.conf
COPY nginx/peertube.conf /app/pkg/peertube-nginx.conf
# supervisor
COPY supervisor/ /etc/supervisor/conf.d/
RUN sed -e 's,^logfile=.*$,logfile=/run/supervisord.log,' -i /etc/supervisor/supervisord.conf
CMD [ "/app/pkg/start.sh" ]

View file

@ -1,12 +1,10 @@
PeerTube does not integrate with Cloudron user management.
This app is pre-setup with an admin account. The initial credentials are:
There is a preconfigured administrator account with the following credentials:
**Username**: root<br/>
**Password**: changeme<br/>
* Username: `root`
* Password: `changeme`
Please change the admin password immediately.
(Please change that password on first login)
**IMPORTANT:** PeerTube does not support changing the location of
the app after installation. Doing so, will break the installation.
IMPORTANT: PeerTube does not support changing the location of the app after installation. Doing so, will
break the installation.

36
README.md Normal file
View file

@ -0,0 +1,36 @@
# PeerTube Cloudron App
This repository contains the Cloudron app package source for [PeerTube](https://joinpeertube.org/)
## Installation
[![Install](https://cloudron.io/img/button.svg)](https://cloudron.io/button.html?app=org.joinpeertube.cloudronapp)
or using the [Cloudron command line tooling](https://cloudron.io/references/cli.html)
```
cloudron install --appstore-id org.joinpeertube.cloudronapp
```
## Building
The app package can be built using the [Cloudron command line tooling](https://cloudron.io/references/cli.html).
```
cd peertube-app
cloudron build
cloudron install
```
## Testing
The e2e tests are located in the `test/` folder and require [nodejs](http://nodejs.org/). They are creating a fresh build, install the app on your Cloudron, perform tests, backup, restore and test if the repos are still ok. The tests expect port 29418 to be available.
```
cd peertube-app/test
npm install
USERNAME=<cloudron username> PASSWORD=<cloudron password> mocha --bail test.js
```

217
nginx/peertube.conf Normal file
View file

@ -0,0 +1,217 @@
upstream backend {
server 127.0.0.1:9000;
}
server {
listen 80;
server_name default_server;
##
# Application
##
location @api {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 100k; # default is 1M
proxy_connect_timeout 10m;
proxy_send_timeout 10m;
proxy_read_timeout 10m;
send_timeout 10m;
proxy_pass http://backend;
}
location / {
try_files /dev/null @api;
}
location ~ ^/api/v1/videos/(upload-resumable|([^/]+/source/replace-resumable))$ {
client_max_body_size 0;
proxy_request_buffering off;
try_files /dev/null @api;
}
location ~ ^/api/v1/users/[^/]+/imports/import-resumable$ {
client_max_body_size 0;
proxy_request_buffering off;
try_files /dev/null @api;
}
location ~ ^/api/v1/videos/(upload|([^/]+/studio/edit))$ {
limit_except POST HEAD { deny all; }
# This is the maximum upload size, which roughly matches the maximum size of a video file.
# Note that temporary space is needed equal to the total size of all concurrent uploads.
# This data gets stored in /var/lib/nginx by default, so you may want to put this directory
# on a dedicated filesystem.
client_max_body_size 12G; # default is 1M
add_header X-File-Maximum-Size 8G always; # inform backend of the set value in bytes before mime-encoding (x * 1.4 >= client_max_body_size)
try_files /dev/null @api;
}
location ~ ^/api/v1/runners/jobs/[^/]+/(update|success)$ {
client_max_body_size 12G; # default is 1M
add_header X-File-Maximum-Size 8G always; # inform backend of the set value in bytes before mime-encoding (x * 1.4 >= client_max_body_size)
try_files /dev/null @api;
}
location ~ ^/api/v1/(videos|video-playlists|video-channels|users/me) {
client_max_body_size 6M; # default is 1M
add_header X-File-Maximum-Size 4M always; # inform backend of the set value in bytes before mime-encoding (x * 1.4 >= client_max_body_size)
try_files /dev/null @api;
}
##
# Websocket
##
location @api_websocket {
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://backend;
}
location /socket.io {
try_files /dev/null @api_websocket;
}
location /tracker/socket {
# Peers send a message to the tracker every 15 minutes
# Don't close the websocket before then
proxy_read_timeout 15m; # default is 60s
try_files /dev/null @api_websocket;
}
# Plugin websocket routes
location ~ ^/plugins/[^/]+(/[^/]+)?/ws/ {
try_files /dev/null @api_websocket;
}
##
# Performance optimizations
# For extra performance please refer to https://github.com/denji/nginx-tuning
##
# root /var/www/peertube/storage;
root /app/data/storage;
# Enable compression for JS/CSS/HTML, for improved client load times.
# It might be nice to compress JSON/XML as returned by the API, but
# leaving that out to protect against potential BREACH attack.
gzip on;
gzip_vary on;
gzip_types # text/html is always compressed by HttpGzipModule
text/css
application/javascript
font/truetype
font/opentype
application/vnd.ms-fontobject
image/svg+xml;
gzip_min_length 1000; # default is 20 bytes
gzip_buffers 16 8k;
gzip_comp_level 2; # default is 1
client_body_timeout 30s; # default is 60
client_header_timeout 10s; # default is 60
send_timeout 10s; # default is 60
keepalive_timeout 10s; # default is 75
resolver_timeout 10s; # default is 30
reset_timedout_connection on;
proxy_ignore_client_abort on;
tcp_nopush on; # send headers in one piece
tcp_nodelay on; # don't buffer data sent, good for small data bursts in real time
# If you have a small /var/lib partition, it could be interesting to store temp nginx uploads in a different place
# See https://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_temp_path
#client_body_temp_path /var/www/peertube/storage/nginx/;
# Bypass PeerTube for performance reasons. Optional.
# Should be consistent with client-overrides assets list in client.ts server controller
location ~ ^/client/(assets/images/(icons/icon-36x36\.png|icons/icon-48x48\.png|icons/icon-72x72\.png|icons/icon-96x96\.png|icons/icon-144x144\.png|icons/icon-192x192\.png|icons/icon-512x512\.png|logo\.svg|favicon\.png|default-playlist\.jpg|default-avatar-account\.png|default-avatar-account-48x48\.png|default-avatar-video-channel\.png|default-avatar-video-channel-48x48\.png))$ {
add_header Cache-Control "public, max-age=31536000, immutable"; # Cache 1 year
root /app/code/server;
# try_files /storage/client-overrides/$1 /peertube-latest/client/dist/$1 @api;
try_files /app/data/storage/client-overrides/$1 /app/code/server/client/dist/$1 @api;
}
# Bypass PeerTube for performance reasons. Optional.
location ~ ^/client/(.*\.(js|css|png|svg|woff2|otf|ttf|woff|eot))$ {
add_header Cache-Control "public, max-age=31536000, immutable"; # Cache 1 year
# alias /var/www/peertube/peertube-latest/client/dist/$1;
alias /app/code/server/client/dist/$1;
}
location ~ ^(/static/(webseed|web-videos|streaming-playlists/hls)/private/)|^/download {
# We can't rate limit a try_files directive, so we need to duplicate @api
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_limit_rate 5M;
proxy_pass http://backend;
}
# Bypass PeerTube for performance reasons. Optional.
location ~ ^/static/(webseed|web-videos|redundancy|streaming-playlists)/ {
limit_rate_after 5M;
set $peertube_limit_rate 5M;
# Use this line with nginx >= 1.17.0
limit_rate $peertube_limit_rate;
# Or this line with nginx < 1.17.0
# set $limit_rate $peertube_limit_rate;
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin '*';
add_header Access-Control-Allow-Methods 'GET, OPTIONS';
add_header Access-Control-Allow-Headers 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
add_header Access-Control-Max-Age 1728000; # Preflight request can be cached 20 days
add_header Content-Type 'text/plain charset=UTF-8';
add_header Content-Length 0;
return 204;
}
if ($request_method = 'GET') {
add_header Access-Control-Allow-Origin '*';
add_header Access-Control-Allow-Methods 'GET, OPTIONS';
add_header Access-Control-Allow-Headers 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
# Don't spam access log file with byte range requests
access_log off;
}
# Enabling the sendfile directive eliminates the step of copying the data into the buffer
# and enables direct copying data from one file descriptor to another.
sendfile on;
sendfile_max_chunk 1M; # prevent one fast connection from entirely occupying the worker process. should be > 800k.
aio threads;
# web-videos is the name of the directory mapped to the `storage.web_videos` key in your PeerTube configuration
rewrite ^/static/webseed/(.*)$ /web-videos/$1 break;
rewrite ^/static/(.*)$ /$1 break;
try_files $uri @api;
}
}

View file

@ -0,0 +1,7 @@
# this is already in a http block
client_body_temp_path /run/nginx;
proxy_temp_path /run/nginx;
fastcgi_temp_path /run/nginx;
uwsgi_temp_path /run/nginx;
scgi_temp_path /run/nginx;

View file

@ -30,13 +30,13 @@ rates_limit:
# If you run PeerTube just behind a local proxy (nginx), keep 'loopback'
# If you run PeerTube behind a remote proxy, add the proxy IP address (or subnet)
trust_proxy:
- 172.18.0.0/16
- 'loopback'
# Your database name will be "peertube"+database.suffix
database:
hostname: 'localhost'
name: 'dbname'
port: 5432
suffix: '_prod'
username: 'peertube'
password: 'peertube'
pool:
@ -74,18 +74,20 @@ email:
# From the project root directory
storage:
tmp: '/var/www/peertube/storage/tmp/' # Use to download data (imports etc), store uploaded files before processing...
avatars: '/var/www/peertube/storage/avatars/'
videos: '/var/www/peertube/storage/videos/'
streaming_playlists: '/var/www/peertube/storage/streaming-playlists/'
redundancy: '/var/www/peertube/storage/redundancy/'
logs: '/var/www/peertube/storage/logs/'
previews: '/var/www/peertube/storage/previews/'
thumbnails: '/var/www/peertube/storage/thumbnails/'
torrents: '/var/www/peertube/storage/torrents/'
captions: '/var/www/peertube/storage/captions/'
cache: '/var/www/peertube/storage/cache/'
plugins: '/var/www/peertube/storage/plugins/'
tmp: '/app/data/storage/tmp/' # Use to download data (imports etc), store uploaded files before processing...
avatars: '/app/data/storage/avatars/'
web_videos: '/app/data/storage/web-videos/'
streaming_playlists: '/app/data/storage/streaming-playlists/'
redundancy: '/app/data/storage/redundancy/'
logs: '/app/data/storage/logs/'
previews: '/app/data/storage/previews/'
thumbnails: '/app/data/storage/thumbnails/'
storyboards: '/app/data/storage/storyboards/'
torrents: '/app/data/storage/torrents/'
captions: '/app/data/storage/captions/'
cache: '/app/data/storage/cache/'
plugins: '/app/data/storage/plugins/'
client_overrides: '/app/data/storage/client-overrides/'
log:
level: 'info' # debug/info/warning/error
@ -239,7 +241,7 @@ transcoding:
# Generate videos in a WebTorrent format (what we do since the first PeerTube release)
# If you also enabled the hls format, it will multiply videos storage by 2
# If disabled, breaks federation with PeerTube instances < 2.1
webtorrent:
web_videos:
enabled: true
# /!\ Requires ffmpeg >= 4.1

165
start.sh
View file

@ -2,55 +2,148 @@
set -eu
mkdir -p /app/data/storage
mkdir -p /app/data/storage /run/peertube/cache /run/peertube/npm /tmp/peertube
reset_root_password() {
# do not rely on WORKDIR
cd /app/code/server
migrate_ldap_to_oidc() {
USERS_TO_MIGRATE=$(PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} psql -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} -AXqtc "SELECT count(*) FROM \"user\" u WHERE \"pluginAuth\"='peertube-plugin-auth-ldap'")
echo "==> Migrating users to OIDC";
echo " Users to migrate: ${USERS_TO_MIGRATE}"
if [ ${USERS_TO_MIGRATE} -gt 0 ]; then
PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} psql -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} -c "UPDATE \"user\" SET \"pluginAuth\"='peertube-plugin-auth-openid-connect' WHERE \"pluginAuth\"='peertube-plugin-auth-ldap'"
fi
LDAP_PLUGIN_INSTALLED=$(PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} psql -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} -AXqtc "SELECT count(*) FROM \"plugin\" WHERE name='auth-ldap'")
if [ ${LDAP_PLUGIN_INSTALLED} -gt 0 ]; then
echo "==> Uninstalling LDAP plugin"
gosu cloudron:cloudron npm run plugin:uninstall -- -n peertube-plugin-auth-ldap
echo "==> Deleting LDAP settings"
PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} psql -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} -c "DELETE FROM \"plugin\" WHERE name='auth-ldap'"
fi
}
install_oidc() {
# https://docs.joinpeertube.org/maintain-tools?id=cli-wrapper . Note that we have to restart peertube when installed this way
if [[ -n "${CLOUDRON_OIDC_ISSUER:-}" ]]; then
echo "==> Installing OIDC plugin"
gosu cloudron:cloudron npm run plugin:install -- -n peertube-plugin-auth-openid-connect -v 0.1.1
update_oidc
fi
}
update_oidc() {
echo "==> Updating OIDC config"
PGPASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} psql -h ${CLOUDRON_POSTGRESQL_HOST} -p ${CLOUDRON_POSTGRESQL_PORT} -U ${CLOUDRON_POSTGRESQL_USERNAME} -d ${CLOUDRON_POSTGRESQL_DATABASE} \
-c "UPDATE plugin SET settings='{\"scope\": \"openid email profile\", \"client-id\": \"${CLOUDRON_OIDC_CLIENT_ID}\", \"discover-url\": \"${CLOUDRON_OIDC_DISCOVERY_URL}\", \"client-secret\": \"${CLOUDRON_OIDC_CLIENT_SECRET}\", \"mail-property\": \"email\", \"auth-display-name\": \"Cloudron\", \"username-property\": \"preferred_username\", \"signature-algorithm\": \"RS256\", \"display-name-property\": \"name\"}' WHERE name='auth-openid-connect'"
}
first_time_setup() {
echo "==> Starting peertube to run migrations on first run"
gosu cloudron:cloudron npm start & # be wary of https://stackoverflow.com/questions/70738567/why-does-running-npm-run-script-as-root-switch-user
sleep 10
while ! curl --fail http://localhost:9000/; do
echo "==> (reset root password) Waiting for peertube to initialize..."
while ! curl --silent --output /dev/null --fail http://localhost:9000/; do
echo "==> Waiting for peertube"
sleep 5
done
echo "changeme" | npm run reset-password -- -u root
killall -SIGTERM peertube # this kills the process group
sleep 5
echo "==> Reset root password"
echo "changeme" | gosu cloudron:cloudron npm run reset-password -- -u root
sleep 5 # the above command seems to spawn a separate process to change password in background
install_oidc
echo "==> First time setup complete"
}
update_config() {
echo "==> Ensure and updating configs"
# version 5 needs this now
if [[ `yq eval '.secrets | has("peertube")' /app/data/production.yaml` != "true" ]]; then
yq eval ".secrets.peertube = \"`openssl rand -hex 32`\"" -i /app/data/production.yaml
fi
yq eval ".webserver.hostname = \"${CLOUDRON_APP_DOMAIN}\"" -i /app/data/production.yaml
# database
yq eval ".database.hostname = \"${CLOUDRON_POSTGRESQL_HOST}\"" -i /app/data/production.yaml
yq eval ".database.port = ${CLOUDRON_POSTGRESQL_PORT}" -i /app/data/production.yaml
yq eval ".database.username = \"${CLOUDRON_POSTGRESQL_USERNAME}\"" -i /app/data/production.yaml
yq eval ".database.password = \"${CLOUDRON_POSTGRESQL_PASSWORD}\"" -i /app/data/production.yaml
yq eval ".database.name = \"${CLOUDRON_POSTGRESQL_DATABASE}\"" -i /app/data/production.yaml
yq eval "del(.database.suffix)" -i /app/data/production.yaml
# redis
yq eval ".redis.hostname = \"${CLOUDRON_REDIS_HOST}\"" -i /app/data/production.yaml
yq eval ".redis.port = ${CLOUDRON_REDIS_PORT}" -i /app/data/production.yaml
yq eval ".redis.auth = \"${CLOUDRON_REDIS_PASSWORD}\"" -i /app/data/production.yaml
# smtp
yq eval ".smtp.hostname = \"${CLOUDRON_MAIL_SMTP_SERVER}\"" -i /app/data/production.yaml
yq eval ".smtp.port = ${CLOUDRON_MAIL_SMTP_PORT}" -i /app/data/production.yaml
yq eval ".smtp.username = \"${CLOUDRON_MAIL_SMTP_USERNAME}\"" -i /app/data/production.yaml
yq eval ".smtp.password = \"${CLOUDRON_MAIL_SMTP_PASSWORD}\"" -i /app/data/production.yaml
yq eval ".smtp.tls = false" -i /app/data/production.yaml
yq eval ".smtp.disable_starttls = true" -i /app/data/production.yaml
yq eval ".smtp.from_address = \"${CLOUDRON_MAIL_FROM}\"" -i /app/data/production.yaml
# ensure settings which were later added
yq eval ".storage.bin = \"/app/data/storage/bin/\"" -i /app/data/production.yaml
yq eval ".storage.well_known = \"/app/data/storage/well_known/\"" -i /app/data/production.yaml
yq eval ".storage.tmp_persistent = \"/app/data/storage/tmp_persistent/\"" -i /app/data/production.yaml
# changes for 6.0.0
yq eval ".storage.storyboards = \"/app/data/storage/storyboards/\"" -i /app/data/production.yaml
if [[ -d "/app/data/storage/videos" ]]; then
echo "==> Migrate videos/ to videos-web/"
mv /app/data/storage/videos /app/data/storage/web-videos
fi
yq eval ".storage.web_videos = \"/app/data/storage/web-videos/\"" -i /app/data/production.yaml
yq eval "del(.storage.videos)" -i /app/data/production.yaml
yq eval "del(.transcoding.webtorrent)" -i /app/data/production.yaml
yq eval ".transcoding.web_videos.enabled = true" -i /app/data/production.yaml
# changes for 6.1.0
yq eval ".storage.original_video_files = \"/app/data/storage/original_video_files/\"" -i /app/data/production.yaml
}
echo "==> Changing ownership"
chown -R cloudron:cloudron /app/data /run/peertube /tmp/peertube
# Set eviction policy to prevent warnings - https://docs.bullmq.io/guide/going-to-production#max-memory-policy
while ! REDISCLI_AUTH="${CLOUDRON_REDIS_PASSWORD}" redis-cli -h "${CLOUDRON_REDIS_HOST}" -p "${CLOUDRON_REDIS_PORT}" ping >/dev/null; do
echo "==> Waiting for redis"
sleep 5
done
REDISCLI_AUTH="${CLOUDRON_REDIS_PASSWORD}" redis-cli -h "${CLOUDRON_REDIS_HOST}" -p "${CLOUDRON_REDIS_PORT}" CONFIG SET maxmemory-policy noeviction
# cd /var/www/peertube/peertube-latest/scripts && sudo -H -u peertube ./upgrade.sh
if [[ ! -f "/app/data/production.yaml" ]]; then
echo "==> First run. creating config"
cp /app/pkg/production.yaml.example /app/data/production.yaml
# this is sed because there are too many paths
sed -e 's,/var/www/peertube/storage,/app/data/storage,g' -i /app/data/production.yaml
reset_root_password &
update_config
first_time_setup
else
update_config
if [[ -n "${CLOUDRON_OIDC_ISSUER:-}" ]]; then
install_oidc
migrate_ldap_to_oidc
update_oidc
fi
fi
echo "==> Updating configs"
yq w -i /app/data/production.yaml webserver.hostname "${CLOUDRON_APP_DOMAIN}"
# database
yq w -i /app/data/production.yaml database.hostname "${CLOUDRON_POSTGRESQL_HOST}"
yq w -i /app/data/production.yaml database.port "${CLOUDRON_POSTGRESQL_PORT}"
yq w -i /app/data/production.yaml database.username "${CLOUDRON_POSTGRESQL_USERNAME}"
yq w -i /app/data/production.yaml database.password "${CLOUDRON_POSTGRESQL_PASSWORD}"
yq w -i /app/data/production.yaml database.suffix "${CLOUDRON_POSTGRESQL_DATABASE}"
# redis
yq w -i /app/data/production.yaml redis.hostname "${CLOUDRON_REDIS_HOST}"
yq w -i /app/data/production.yaml redis.port "${CLOUDRON_REDIS_PORT}"
yq w -i /app/data/production.yaml redis.auth "${CLOUDRON_REDIS_PASSWORD}"
# smtp
yq w -i /app/data/production.yaml smtp.hostname "${CLOUDRON_MAIL_SMTP_SERVER}"
yq w -i /app/data/production.yaml smtp.port "${CLOUDRON_MAIL_SMTP_PORT}"
yq w -i /app/data/production.yaml smtp.username "${CLOUDRON_MAIL_SMTP_USERNAME}"
yq w -i /app/data/production.yaml smtp.password "${CLOUDRON_MAIL_SMTP_PASSWORD}"
yq w -i /app/data/production.yaml smtp.tls false
yq w -i /app/data/production.yaml smtp.disable_starttls true
yq w -i /app/data/production.yaml smtp.from_address "${CLOUDRON_MAIL_FROM}"
chown -R cloudron:cloudron /app/data
exec gosu cloudron:cloudron npm start
echo "==> Configuring nginx"
cp /app/pkg/peertube-nginx.conf /run/peertube-nginx.conf
echo "==> Starting PeerTube"
#exec gosu cloudron:cloudron npm start
exec /usr/bin/supervisord --configuration /etc/supervisor/supervisord.conf --nodaemon -i PeerTube

11
supervisor/nginx.conf Normal file
View file

@ -0,0 +1,11 @@
[program:nginx]
priority=100
directory=/tmp
command=/usr/sbin/nginx -g "daemon off;"
user=root
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

11
supervisor/peertube.conf Normal file
View file

@ -0,0 +1,11 @@
[program:peertube]
directory=/app/code/server
user=cloudron
environment=HOME="/home/cloudron",USER="cloudron"
command=npm start
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

Binary file not shown.

2762
test/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

20
test/package.json Normal file
View file

@ -0,0 +1,20 @@
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "test.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"expect.js": "^0.3.1",
"mocha": "^10.4.0"
},
"dependencies": {
"chromedriver": "^124.0.1",
"safetydance": "^2.4.0",
"selenium-webdriver": "^4.20.0"
}
}

261
test/test.js Normal file
View file

@ -0,0 +1,261 @@
#!/usr/bin/env node
/* jshint esversion: 8 */
/* global describe */
/* global before */
/* global after */
/* global it */
'use strict';
require('chromedriver');
const execSync = require('child_process').execSync,
expect = require('expect.js'),
readlinePromises = require('readline/promises'),
path = require('path'),
safe = require('safetydance'),
util = require('util'),
{ Builder, By, Key, until } = require('selenium-webdriver'),
{ Options } = require('selenium-webdriver/chrome');
if (!process.env.USERNAME || !process.env.PASSWORD || !process.env.EMAIL) {
console.log('USERNAME, EMAIL and PASSWORD env vars need to be set');
process.exit(1);
}
describe('Application life cycle test', function () {
this.timeout(0);
const LOCATION = 'test';
const TEST_TIMEOUT = parseInt(process.env.TEST_TIMEOUT, 10) || 30000;
const EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
let browser;
let app;
let host_os;
let username = process.env.USERNAME;
let password = process.env.PASSWORD;
let email = process.env.EMAIL;
let athenticated_by_oidc = false;
before(function () {
browser = new Builder().forBrowser('chrome').setChromeOptions(new Options().windowSize({ width: 1280, height: 1024 })).build();
});
after(function () {
browser.quit();
});
function getAppInfo() {
let inspect = JSON.parse(execSync('cloudron inspect'));
app = inspect.apps.filter(function (a) { return a.location.indexOf(LOCATION) === 0; })[0];
expect(app).to.be.an('object');
}
async function getOS() {
if (typeof(host_os) == 'undefined' || host_os == null)
host_os = String(await execSync('uname -s')).trim();
return host_os;
}
async function waitForElement(elem) {
await browser.wait(until.elementLocated(elem), TEST_TIMEOUT);
await browser.wait(until.elementIsVisible(browser.findElement(elem)), TEST_TIMEOUT);
}
function sleep(millis) {
return new Promise(resolve => setTimeout(resolve, millis));
}
async function login(username, password) {
await browser.get('https://' + app.fqdn + '/login');
await waitForElement(By.id('username'));
await browser.findElement(By.id('username')).sendKeys(username);
await browser.findElement(By.id('password')).sendKeys(password);
await browser.findElement(By.xpath('//input[@value="Login"]')).click();
await waitForElement(By.xpath('//a[contains(@href, "/my-library")]'));
}
async function loginOIDC(username, password) {
browser.manage().deleteAllCookies();
await browser.get(`https://${app.fqdn}/login`);
await browser.sleep(2000);
await browser.wait(until.elementLocated(By.xpath('//a[contains(., "Cloudron")]')), TEST_TIMEOUT);
await browser.findElement(By.xpath('//a[contains(., "Cloudron")]')).click();
await browser.sleep(2000);
if (!athenticated_by_oidc) {
await waitForElement(By.id('inputUsername'));
await browser.findElement(By.id('inputUsername')).sendKeys(username);
await browser.findElement(By.id('inputPassword')).sendKeys(password);
await browser.findElement(By.id('loginSubmitButton')).click();
athenticated_by_oidc = true;
}
await browser.sleep(20000);
await waitForElement(By.xpath('//a[contains(@href, "/my-library")]'));
}
async function closeAccountSetupDialog() {
await browser.get('https://' + app.fqdn);
await waitForElement(By.xpath('//span[contains(text(), "show me this anymore")]'));
await browser.findElement(By.xpath('//span[contains(text(), "show me this anymore")]')).click();
await browser.findElement(By.xpath('//a[contains(text(), "Set up")]')).click();
await browser.sleep(3000);
}
async function logout() {
await browser.get('https://' + app.fqdn + '/my-account/videos');
await waitForElement(By.xpath('//div[@class="logged-in-display-name"]'));
await browser.sleep(2000);
await browser.findElement(By.xpath('//div[@class="logged-in-display-name"]')).click();
await browser.sleep(2000);
await browser.findElement(By.xpath('//button[contains(text(), "Log out")]')).click();
await browser.sleep(2000);
}
async function completeSetup() {
let button;
await browser.get(`https://${app.fqdn}`);
await browser.sleep(2000);
const [error] = await safe(waitForElement(By.xpath('//a[contains(text(), "Configure my instance")]')));
if (error) return; // sometimes it doesn't appear, maybe it's cached in local storage
await browser.findElement(By.xpath('//a[contains(text(), "Configure my instance")]')).click(); // this opens a new window
const say_cmd = await getOS() == "Darwin" ? "say" : "spd-say";
execSync(`${say_cmd} "Close the newly opened configuration tab."`);
const rl = readlinePromises.createInterface({ input: process.stdin, output: process.stdout });
await rl.question('Is tab closed? ');
}
async function uploadVideo() {
await browser.get(`https://${app.fqdn}/videos/upload#upload`);
await browser.sleep(3000);
await browser.wait(until.elementLocated(By.id('videofile')), TEST_TIMEOUT); // do not do element visible check . it fails, no clue why
await browser.findElement(By.id('videofile')).sendKeys(path.resolve(__dirname, './Cloudron Test Video.mp4'));
console.log('waiting 10 seconds for upload');
await browser.sleep(10000); // wait for upload
await waitForElement(By.xpath('//div[@class="submit-container"]//span[text()="Publish"]'));
let button = browser.findElement(By.xpath('//div[@class="submit-container"]//span[text()="Publish"]'));
await browser.executeScript('arguments[0].scrollIntoView(false)', button);
await browser.sleep(2000);
await button.click();
await browser.sleep(2000);
}
async function videoExists() {
await browser.get('https://' + app.fqdn + '/my-account/videos');
await waitForElement(By.xpath('//a[contains(@title, "Cloudron Test Video")]'));
}
xit('build app', function () { execSync('cloudron build', EXEC_ARGS); });
it('install app', async function () {
execSync('cloudron install --location ' + LOCATION, EXEC_ARGS);
await sleep(40000); // takes a bit to create root user in background
});
it('can get app information', getAppInfo);
it('can root login', login.bind(null, 'root', 'changeme'));
it('can complete setup', completeSetup);
it('can upload video', uploadVideo);
it('video exists', videoExists);
it('logout', logout);
it('can OIDC login', loginOIDC.bind(null, username, password));
it('can close account setup dialog', closeAccountSetupDialog);
it('logout', logout);
it('backup app', function () { execSync('cloudron backup create --app ' + app.id, EXEC_ARGS); });
it('restore app', function () {
const backups = JSON.parse(execSync('cloudron backup list --raw'));
execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
execSync('cloudron install --location ' + LOCATION, EXEC_ARGS);
getAppInfo();
execSync(`cloudron restore --backup ${backups[0].id} --app ${app.id}`, EXEC_ARGS);
});
it('can root login', login.bind(null, 'root', 'changeme'));
it('video exists', videoExists);
it('logout', logout);
it('can OIDC login', loginOIDC.bind(null, username, password));
it('logout', logout);
it('can restart app', function () {
execSync('cloudron restart --app ' + app.id);
});
it('can root login', login.bind(null, 'root', 'changeme'));
it('video exists', videoExists);
it('logout', logout);
it('can OIDC login', loginOIDC.bind(null, username, password));
it('logout', logout);
// this is not supported for federation
it('move to different location', function () { execSync('cloudron configure --location ' + LOCATION + '2 --app ' + app.id, EXEC_ARGS); });
it('can get app information', getAppInfo);
it('can root login', login.bind(null, 'root', 'changeme'));
it('video exists', videoExists);
it('logout', logout);
it('can OIDC login', loginOIDC.bind(null, username, password));
it('logout', logout);
it('uninstall app', async function () {
await browser.executeScript('localStorage.clear();');
execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
});
// No SSO
it('install app (no sso)', async function () {
execSync('cloudron install --no-sso --location ' + LOCATION, EXEC_ARGS);
await sleep(10000); // takes a bit to create root user in background
});
it('can get app information', getAppInfo);
it('can login (no sso)', login.bind(null, 'root', 'changeme'));
it('can complete setup', completeSetup);
it('can logout', logout);
it('uninstall app (no sso)', async function () {
await browser.executeScript('localStorage.clear();');
execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
});
// test update
it('can install app', async function () {
execSync('cloudron install --appstore-id org.joinpeertube.cloudronapp --location ' + LOCATION, EXEC_ARGS);
await sleep(10000); // takes a bit to create root user in background
});
it('can get app information', getAppInfo);
it('can root login', login.bind(null, 'root', 'changeme'));
it('can complete setup', completeSetup);
it('can upload video', uploadVideo);
it('video exists', videoExists);
it('can update', function () { execSync('cloudron update --app ' + app.id, EXEC_ARGS); });
it('can root login', login.bind(null, 'root', 'changeme'));
it('video exists', videoExists);
it('logout', logout);
it('can OIDC login', loginOIDC.bind(null, username, password));
it('can close account setup dialog', closeAccountSetupDialog);
it('logout', logout);
it('uninstall app', async function () {
await browser.executeScript('localStorage.clear();');
execSync('cloudron uninstall --app ' + app.id, EXEC_ARGS);
});
});