1
0
mirror of git://f0xx.org/ac/ac-deploy synced 2026-07-29 06:17:57 +03:00

deploy: favicon, nuevo-player, ac-ms-broadcast, nginx notify/monitor/broadcast

- favicon.ico (32px) + apple-touch-icon.ico (180px) added to composed backend seed
- layout.php: add <link rel="icon"> and <link rel="apple-touch-icon"> in <head>
- nuevo-player (Video.js + Nuevo licensed plugin) into assets/vendor/nuevo-player/
- THIRD_PARTY_LICENSES.md: add Nuevo Player (commercial) + TipTap (MIT) entries
- apps-port80.conf: full rewrite with all live fixes merged in:
    * map $http_upgrade $connection_upgrade (WebSocket upgrade)
    * 2FA location regex extended: api/two-factor
    * grafana-auth-check internal endpoint + @monitor_login_redirect
    * Grafana proxy (cast04:3000) + Alertmanager proxy (cast04:9093)
    * broadcast admin path /app/androidcast_project/broadcast/ (auth_request gated)
    * notify.f0xx.org server block: public /m/{slug} landing + API
    * favicon.ico at server root
- deploy-ac-broadcast.sh: new app-phase script (DB schema, user, worker, rsync)
- populate_lab_setup.sh: add deploy-ac-broadcast.sh to run_phase_app

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Anton Afanasyeu
2026-06-28 22:55:44 +02:00
parent b9925a6c74
commit 98f4ecc2c5
13 changed files with 280 additions and 5 deletions

View File

@@ -44,3 +44,26 @@ Suggested public URL after deploy sync:
`https://apps.f0xx.org/app/androidcast_project/crashes/THIRD_PARTY_LICENSES.md`
(or render an HTML excerpt on the hub legal page linking mobile + BE lists).
## Nuevo Player (Video.js + Nuevo Plugin)
**Component:** HTML5 video player embedded in VOD/restreaming service (DR: `ac-docs/drafts/20260616_VOD_and_restreaming_service.txt`)
**Files:** `public/assets/vendor/nuevo-player/js/` and `public/assets/vendor/nuevo-player/vdjs/`
| File | Library | License |
|------|---------|---------|
| `video.min.js` | [Video.js](https://videojs.com) | Apache-2.0 |
| `videojs-contrib-hls.min.js` | videojs-contrib-hls | Apache-2.0 |
| `videojs-landscape-fullscreen.min.js` | videojs-landscape-fullscreen | MIT |
| `nuevo.min.js` | [Nuevo Player](https://www.nuevodevel.com) | **Commercial license** — purchased; see `tmp/nuevo-player.tar.xz` (not in repo) |
| `nsvideo.min.js` | Nuevo Player (nsVideo module) | **Commercial license** (same purchase) |
| `vdjs/v10.0.0/skins/treso/videojs.min.css` | Treso skin (Nuevo) | **Commercial license** (same purchase) |
**Note:** `nuevo.min.js` and `nsvideo.min.js` are proprietary (Nuevo Player commercial license). Binary distribution requires a valid Nuevo Player license. These files are included in the repo under the purchased license and must **not** be redistributed or open-sourced. The `video.min.js` (Video.js core) and HLS plugin are separately Apache-2.0 licensed and may be replaced with upstream npm builds.
## TipTap Editor
**Component:** Rich text editor in Broadcast admin compose view (`ac-ms-broadcast/views/admin/compose.php`)
**License:** MIT
**URL:** https://tiptap.dev | https://github.com/ueberdosis/tiptap
**Note:** Only open-source core extensions used. No Pro cloud extensions. Loaded from unpkg CDN in current implementation — for production, pin version and self-host bundle.

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
/*! @name videojs-landscape-fullscreen @version 11.1111.0 @license ISC */
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("video.js"),require("global/window")):"function"==typeof define&&define.amd?define(["video.js","global/window"],n):(e="undefined"!=typeof globalThis?globalThis:e||self).videojsLandscapeFullscreen=n(e.videojs,e.window)}(this,(function(e,n){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=t(e),i=t(n),r={fullscreen:{enterOnRotate:!0,exitOnRotate:!0,alwaysInLandscapeMode:!0,iOS:!0}},l=i.default.screen;l.lockOrientationUniversal=function(e){return l.orientation&&l.orientation.lock(e).then((function(){}),(function(e){return console.log(e)}))||l.mozLockOrientation&&l.mozLockOrientation(e)||l.msLockOrientation&&l.msLockOrientation(e)};var a=function(){return"number"==typeof i.default.orientation||l&&l.orientation&&l.orientation.angle?i.default.orientation:(o.default.log("angle unknown"),0)},u=o.default.registerPlugin||o.default.plugin,s=function(e){var n=this;(o.default.browser.IS_ANDROID||o.default.browser.IS_IOS)&&this.ready((function(){!function(e,n){e.addClass("vjs-landscape-fullscreen"),n.fullscreen.iOS&&o.default.browser.IS_IOS&&o.default.browser.IOS_VERSION>9&&!e.el_.ownerDocument.querySelector(".bc-iframe")&&(e.tech_.el_.setAttribute("playsinline","playsinline"),e.tech_.supportsFullScreen=function(){return!1});var t=function(){var t=a();90!==t&&270!==t&&-90!==t||n.fullscreen.enterOnRotate&&!1===e.paused()&&(e.requestFullscreen(),l.lockOrientationUniversal("landscape")),0!==t&&180!==t||n.fullscreen.exitOnRotate&&e.isFullscreen()&&e.exitFullscreen()};o.default.browser.IS_IOS?i.default.addEventListener("orientationchange",t):l&&l.orientation&&(l.orientation.onchange=t),e.on("fullscreenchange",(function(t){(o.default.browser.IS_ANDROID||o.default.browser.IS_IOS)&&!a()&&e.isFullscreen()&&n.fullscreen.alwaysInLandscapeMode&&l.lockOrientationUniversal("landscape")})),e.on("dispose",(function(){i.default.removeEventListener("orientationchange",t)}))}(n,o.default.mergeOptions(r,e))}))};return u("landscapeFullscreen",s),s.VERSION="11.1111.0",s}));

File diff suppressed because one or more lines are too long

View File

@@ -25,6 +25,8 @@
if (l === 'en' || l === 'ru') document.documentElement.setAttribute('lang', l);
})();
</script>
<link rel="icon" type="image/x-icon" href="<?= h(Auth::basePath()) ?>/assets/favicon.ico">
<link rel="apple-touch-icon" href="<?= h(Auth::basePath()) ?>/assets/apple-touch-icon.ico">
<link rel="stylesheet" href="<?= h(Auth::basePath()) ?>/assets/css/app.css">
<script src="<?= h(Auth::basePath()) ?>/assets/js/nav_shell.js" defer></script>
<script src="<?= h(Auth::basePath()) ?>/assets/js/i18n.js" defer></script>