860 Commits

Author SHA1 Message Date
Owncast
6017d575c8 Bundle embedded web app 2025-01-17 19:58:35 +00:00
renovate[bot]
536eeb804a fix(deps): update dependency @uiw/codemirror-theme-bbedit to v4.23.7 (#4122)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-17 11:53:22 -08:00
Tianhao Wang
5c5e28a09c chore: remove binary blob (#4130)
I guess the .DS_Store is included by accident.. Let's remove it before it's
checked into a release tag.

Signed-off-by: Tianhao Wang <shrik3@mailbox.org>
2025-01-17 10:22:08 -08:00
Owncast
4690b13d6b Bundle embedded web app 2025-01-17 06:11:32 +00:00
renovate[bot]
78eec1e021 fix(deps): update dependency @uiw/react-codemirror to v4.23.7 (#4123)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 22:06:11 -08:00
Owncast
244dc2d7c1 Bundle embedded web app 2025-01-17 05:16:06 +00:00
renovate[bot]
03bac4ab48 fix(deps): update dependency react-markdown to v9.0.3 (#4125)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 21:11:00 -08:00
renovate[bot]
2d4ae6ca20 chore(deps): update dependency @types/react to v18.3.18 (#4124)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 21:10:26 -08:00
Owncast
2a4f53eb54 Bundle embedded web app 2025-01-17 03:51:09 +00:00
renovate[bot]
d494856ca2 chore(deps): update dependency @types/prop-types to v15.7.14 (#4121)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 19:44:34 -08:00
renovate[bot]
e8a5ff95d4 fix(deps): update dependency react-virtuoso to v4.12.3 (#4126)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 19:42:42 -08:00
renovate[bot]
a282daa12f fix(deps): update dependency ua-parser-js to v1.0.40 (#4127)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 19:41:49 -08:00
renovate[bot]
2ff4baeb18 chore(deps): update dependency @types/node to v22.10.6 (#4128)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 19:40:47 -08:00
renovate[bot]
96ae5c7dce fix(deps): update module github.com/aws/aws-sdk-go to v1.55.6 (#4116)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 14:33:41 +00:00
Owncast
d328fe1fd8 Bundle embedded web app 2025-01-16 07:40:52 +00:00
Gabe Kangas
8ab8659889 fix(i18n): next-export-i18n should be using the 2.x.x branch 2025-01-15 23:32:16 -08:00
Owncast
5733c86d8f Bundle embedded web app 2025-01-16 06:09:16 +00:00
Owncast
a1d94a7f99 Commit updated API documentation 2025-01-16 06:05:39 +00:00
Gabe Kangas
c1366518ad chore: bump version number 2025-01-15 22:02:48 -08:00
Gabe Kangas
bd8dc8326c fix(admin): do not log newfeed 404s 2025-01-15 22:00:32 -08:00
Gabe Kangas
d03cac106c fix(admin): do not handle version upgrade logic if current version is not set 2025-01-15 21:59:45 -08:00
Owncast
1c69164a72 Bundle embedded web app 2025-01-16 00:20:30 +00:00
Gabe Kangas
2e8e61309a Remove use of default props (#4118)
* refactor: replace defaultProps with function parameters in Modal, Statusbar, ChatContainer, and CrossfadeImage components

* New commit for Default properties of React components after syncing fork and rebasing

* fix: fix linter warning

---------

Co-authored-by: swarup <swarupnarkhede999@gmail.com>
2025-01-15 16:12:54 -08:00
Owncast
67ef2b45d9 Bundle embedded web app 2025-01-15 22:54:08 +00:00
Gabe Kangas
91a635a5ca chore(i18n): enable languages 2025-01-15 14:48:54 -08:00
github-actions[bot]
088023cf15 Updated translations (#4117)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-01-15 14:41:18 -08:00
Gabe Kangas
0f48bc4904 chore(i18n): run workflow every hour + download translations for PR 2025-01-15 14:18:37 -08:00
Owncast
e4aa69dc46 Bundle embedded web app 2025-01-15 22:04:41 +00:00
Gabe Kangas
dc8ed52b58 fix(i18n): disable languages until the files exist 2025-01-15 13:59:35 -08:00
Gabe Kangas
648856dcd1 chore: update i18n workflow/config 2025-01-15 13:41:44 -08:00
renovate[bot]
a4ed2c14be chore(deps): update peter-evans/create-or-update-comment digest to fdb73c4 2025-01-15 05:33:32 +00:00
Owncast
8e2e05e48e Bundle embedded web app 2025-01-15 05:32:40 +00:00
Gabe Kangas
d77b80a94a fix(storybook): fix another story not rendering with i18n 2025-01-14 21:27:21 -08:00
Owncast
bd59d8ab40 Bundle embedded web app 2025-01-15 05:25:05 +00:00
Gabe Kangas
70282761d3 fix(storybook): fix storybook rendering with i18n library 2025-01-14 21:19:23 -08:00
Owncast
e02f6dbc20 Bundle embedded web app 2025-01-15 04:59:24 +00:00
Gabe Kangas
cb387d88be Initial localization work (#3980)
* First pass at configuring localization

* Add CI job for translations

* Update CI job

* Update default value

* Update parser config

* Update defaults again

* try to fix the multiple parsing of a file

* Update crowdlin config

* Update configs

* New Crowdin translations by GitHub Action (#3448)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>

* Point to updated translated files

* Tooltip i18n

* Run translation job when web components are updated

* Commit updated translations

* Translations update (#3453)

* Update source file strings.json
Updated translations

* New translations strings.json (French)
Updated translations

* New translations strings.json (Spanish)
Updated translations

* New translations strings.json (German)
Updated translations

* New translations strings.json (English, United States)
Updated translations

* Commit updated translations

* New Crowdin translations by GitHub Action (#3452)

Co-authored-by: Owncast <owncast@owncast.online>

* chore(deps): update to next config to address build errors

* New Crowdin translations by GitHub Action (#3455)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>

* Translations update (#3456)

* New translations strings.json (Arabic)
Updated translations

* New translations strings.json (German)
Updated translations

* New translations strings.json (Greek)
Updated translations

* New translations strings.json (Irish)
Updated translations

* New translations strings.json (Italian)
Updated translations

* New translations strings.json (Japanese)
Updated translations

* New translations strings.json (Korean)
Updated translations

* New translations strings.json (Dutch)
Updated translations

* New translations strings.json (Norwegian)
Updated translations

* New translations strings.json (Punjabi)
Updated translations

* New translations strings.json (Russian)
Updated translations

* New translations strings.json (Swedish)
Updated translations

* New translations strings.json (Chinese Traditional)
Updated translations

* New translations strings.json (Vietnamese)
Updated translations

* New translations strings.json (Bengali)
Updated translations

* New translations strings.json (Thai)
Updated translations

* New translations strings.json (Croatian)
Updated translations

* New translations strings.json (Hindi)
Updated translations

* New translations strings.json (Malay)
Updated translations

* New Crowdin translations by GitHub Action (#3457)

* New translations strings.json (Arabic)
Updated translations

* New translations strings.json (German)
Updated translations

* New translations strings.json (Greek)
Updated translations

* New translations strings.json (Irish)
Updated translations

* New translations strings.json (Italian)
Updated translations

* New translations strings.json (Japanese)
Updated translations

* New translations strings.json (Korean)
Updated translations

* New translations strings.json (Dutch)
Updated translations

* New translations strings.json (Norwegian)
Updated translations

* New translations strings.json (Punjabi)
Updated translations

* New translations strings.json (Russian)
Updated translations

* New translations strings.json (Swedish)
Updated translations

* New translations strings.json (Chinese Traditional)
Updated translations

* New translations strings.json (Vietnamese)
Updated translations

* New translations strings.json (Bengali)
Updated translations

* New translations strings.json (Thai)
Updated translations

* New translations strings.json (Croatian)
Updated translations

* New translations strings.json (Hindi)
Updated translations

* New translations strings.json (Malay)
Updated translations

* New Crowdin translations by GitHub Action

---------

Co-authored-by: Gabe Kangas <gabek@real-ity.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>

* Commit updated API documentation

* Update translations job

* New Crowdin translations by GitHub Action (#3698)

Co-authored-by: Crowdin Bot <support+bot@crowdin.com>

* Update Crowdin configuration file

* Translations update (#3700)

* New translations strings.json (French)
Updated translations

* New translations strings.json (Italian)
Updated translations

* Translations update (#3699)

* New translations strings.json (French)
Updated translations

* New translations strings.json (Spanish)
Updated translations

* New translations strings.json (Italian)
Updated translations

* New translations strings.json (Japanese)
Updated translations

* New translations strings.json (Polish)
Updated translations

* New translations strings.json (Russian)
Updated translations

* New translations strings.json (Portuguese, Brazilian)
Updated translations

* Commit updated API documentation

---------

Co-authored-by: Owncast <owncast@owncast.online>

* New Crowdin translations by GitHub Action (#3701)

* New translations strings.json (French)
Updated translations

* New translations strings.json (Spanish)
Updated translations

* New translations strings.json (Italian)
Updated translations

* New translations strings.json (Japanese)
Updated translations

* New translations strings.json (Polish)
Updated translations

* New translations strings.json (Russian)
Updated translations

* New translations strings.json (Portuguese, Brazilian)
Updated translations

* New Crowdin translations by GitHub Action

---------

Co-authored-by: Gabe Kangas <gabek@real-ity.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>

* Draft: Mark strings for translation. (#3458)

* Mark strings for translation.

* Mark up strings for translation

* fix(web): fix linter warnings

---------

Co-authored-by: Le fractal <17422-fractal@users.noreply.framagit.org>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>

* do not pull from cowdin via workflow

* Commit updated translations

* feat: add translations support to admin pages and components (#3977)

* feat: add translations support to admin pages and components

Added translations support admin main page and its components, help
page, handware-info page. Added translations support for LogTable,
NewsFeed and StreamHealthOverview components.

* update package.json

* fix rendering issue

* Commit updated API documentation

---------

Co-authored-by: Owncast <owncast@owncast.online>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>

* Offline banner i18n formatting (#3997)

* Fix "Last live ago" string formatting with i18n interpolation

* Change some base translation jsons to use i18n interpolation

* Linting fix

* chore(js): ignore i18n pkgs in knip

* fix(test): fix browser ui test

* fix(js): remove unused var

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: Owncast <owncast@owncast.online>
Co-authored-by: taintedcypher <119351153+taintedcypher@users.noreply.github.com>
Co-authored-by: Le fractal <17422-fractal@users.noreply.framagit.org>
Co-authored-by: Sufyaan Khateeb <81009832+SufyaanKhateeb@users.noreply.github.com>
Co-authored-by: mahmed2000 <mahmad2000@protonmail.com>
2025-01-14 20:54:21 -08:00
Gabe Kangas
b45552ade0 fix(video): remove persistent HTTP connection. Hopefully fixes #4106 2025-01-14 08:37:27 -08:00
Gabe Kangas
2b42ff5ce4 Revert "fix(js): do not fire dangerouslySetInnerHTML if there is nothing to render. Closes #4075"
This reverts commit d91c42bafd9136805fd64018f0db517156bcb263.

Closes #4112
2025-01-14 08:33:03 -08:00
Owncast
a9e4ad55e9 Bundle embedded web app 2025-01-13 12:36:22 +00:00
renovate[bot]
5ccdcc7a9b chore(deps): lock file maintenance (#4109)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-13 12:30:54 +00:00
Owncast
271d9c3b87 Commit updated API documentation 2025-01-13 04:41:40 +00:00
Gabe Kangas
0d46f4a7d0 chore: bump version number to v0.2.1 2025-01-12 20:39:37 -08:00
Martin Wimpress
8ce270b02f feat: enable Intel Quicksync with support for FFmpeg 4.x to 7.1 (#4028)
* feat: enable Intel Quicksync with support for FFmpeg 4.x to 7.1

* fix(go): fix linter warning

---------

Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2025-01-12 20:38:26 -08:00
Martin Wimpress
bb4a7479b5 fix: universal Intel and AMD VA-API accelerated pipeline for FFmpeg 4 - 7 (#4022) 2025-01-12 20:10:00 -08:00
renovate[bot]
0105473350 chore(deps): update alpine docker tag to v3.21.2 2025-01-09 00:20:50 +00:00
Owncast
191cf5ee6a Bundle embedded web app 2025-01-09 00:19:59 +00:00
Gabe Kangas
a669686b16 fix(js): move require to top of file 2025-01-08 16:14:25 -08:00
Gabe Kangas
b52bbc7f53 fix(admin): fix version update prompt. Fixes #4097 2025-01-08 15:40:33 -08:00
Owncast
591da94daf Bundle embedded web app 2025-01-08 23:15:32 +00:00
Gabe Kangas
048acbce88 fix(js): do not fire dangerouslySetInnerHTML if there is nothing to render. Closes #4075 (#4076) 2025-01-08 15:10:35 -08:00
renovate[bot]
0140601335 chore(deps): update peter-evans/create-or-update-comment digest to 853a4fc 2025-01-08 08:22:01 +00:00
renovate[bot]
768c9ab9b3 chore(deps): update alpine docker tag to v3.21.1 2025-01-07 09:01:53 +00:00
renovate[bot]
7cfecef39c fix(deps): update module golang.org/x/net to v0.34.0 2025-01-06 21:49:23 +00:00
Gabe Kangas
2d4b5eb105 Do not mark as stale if it is assigned to a milestone 2025-01-06 13:48:06 -08:00
renovate[bot]
790e148050 fix(deps): update module golang.org/x/crypto to v0.32.0 2025-01-06 17:22:48 +00:00
Owncast
dc4562db66 Bundle embedded web app 2025-01-06 13:11:59 +00:00
renovate[bot]
327feaafac chore(deps): lock file maintenance (#4084)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-06 13:06:11 +00:00
Owncast
d752f51034 Bundle embedded web app 2025-01-06 01:33:33 +00:00
gingervitis
87c7571d5c embed screen style adjustments (#4063)
* restyle and relayout embed screen to account for smaller screen displays.
- address https://github.com/owncast/owncast/issues/3683 to address overflow issues
- address https://github.com/owncast/owncast/issues/4051 to move the name of the stream

* Javascript formatting autofixes

* clean up; restore package lock

* accommodate cases when there's no follow option; put follow form on one line, but wrap if need

* clean up

* separate out follow form into separate standalone component to be used in multiple places

* improve follow error styling; rm defaultProps for Modal to get rid of warning

* improve styling of follow form and components for legibility

* prettyify scss

* prettyify scss again

* one more time

* prettify ant file

* simplify layout, center everything

* just use gap

* tweak and lint

* lint, again

---------

Co-authored-by: Owncast <owncast@owncast.online>
2025-01-05 17:28:35 -08:00
Owncast
4b1a89bb31 Bundle embedded web app 2025-01-06 00:40:18 +00:00
Andy Piper
9f820b00c1 Update mastodon.svg for current colors (#4082) 2025-01-05 16:35:17 -08:00
Owncast
18875f3f2a Bundle embedded web app 2025-01-05 20:27:13 +00:00
Germaine Lee
c23655c210 Update some platform logos (#4081)
* Update discord logo

Discord updated their branding in 2021.
See their brand guidelines: https://discord.com/branding

* Update ko-fi logo to rounded cup

See their website for more details: https://more.ko-fi.com/brand-assets

* Update paypal logo

See Paypal brand logos at: https://newsroom.paypal-corp.com/media-resources
2025-01-05 12:22:20 -08:00
Owncast
3510d19fce Bundle embedded web app 2025-01-05 04:29:29 +00:00
gingervitis
6528633a13 fix skip link visibility and it moving logo upon focus (#4078)
* fix skip link visibility and it moving logo upon focus

* update color
2025-01-04 20:24:27 -08:00
Owncast
678214c19d Bundle embedded web app 2025-01-04 23:13:28 +00:00
renovate[bot]
6355ab3b5f fix(deps): update fontsource monorepo to v5.1.1 (#4074)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-04 15:08:15 -08:00
Owncast
d9da9a3481 Bundle embedded web app 2025-01-04 22:29:34 +00:00
renovate[bot]
4b40ed6a93 fix(deps): update dependency next to v14.2.21 [security] (#4071)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-04 14:24:40 -08:00
Owncast
510cae1b79 Bundle embedded web app 2025-01-04 21:04:36 +00:00
gingervitis
a6dc9645e6 Add local CSS lint checks (#4068)
* update package scripts to include prettifying scss files and stylelint-ing; fix related issues found from stylelinter

* revert old prettier autofix

* lint

---------

Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2025-01-04 12:59:45 -08:00
renovate[bot]
c03637fd9b chore(deps): update dependency stylelint-config-standard-scss to v14 (#4070)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-04 12:57:02 -08:00
renovate[bot]
bdd25498a8 fix(deps): update module golang.org/x/time to v0.9.0 2025-01-04 16:33:10 +00:00
Owncast
3e7cd32dfa Bundle embedded web app 2025-01-04 01:51:58 +00:00
renovate[bot]
17ee4bba03 chore(deps): update dependency prettier to v3.4.2 (#4069)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-03 17:46:21 -08:00
renovate[bot]
9e8088fa80 fix(deps): update module github.com/sherclockholmes/webpush-go to v1.4.0 2025-01-03 00:12:45 +00:00
renovate[bot]
009a271c02 fix(deps): update module mvdan.cc/xurls/v2 to v2.6.0 2025-01-02 19:24:02 +00:00
renovate[bot]
092b76b449 chore(deps): update peter-evans/create-or-update-comment digest to 4ed2ee4 2025-01-01 06:17:18 +00:00
renovate[bot]
3bc3799760 fix(deps): update module github.com/shirou/gopsutil/v4 to v4.24.12 2025-01-01 03:50:56 +00:00
Owncast
6b97962da0 Bundle embedded web app 2024-12-23 13:33:14 +00:00
renovate[bot]
262bfd6c41 chore(deps): lock file maintenance (#4064)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-23 13:28:14 +00:00
Owncast
6057fb09d7 Bundle embedded web app 2024-12-20 17:22:34 +00:00
mahmed2000
8a1c05abf4 Make the error alert in OfflineEmbed closable (#4062) 2024-12-20 09:17:34 -08:00
renovate[bot]
0b28a3b483 fix(deps): update module github.com/andybalholm/cascadia to v1.3.3 2024-12-19 18:48:50 +00:00
renovate[bot]
9c745b0ef1 fix(deps): update module golang.org/x/net to v0.33.0 2024-12-18 21:40:17 +00:00
Gabe Kangas
a38c2d8ddf fix: add ETag header for bot/scraper page. For #4020 2024-12-18 07:28:06 -08:00
Gabe Kangas
f59278764b fix: bump bot/webscraper server generated page cache to 1 minute. For #4020 2024-12-18 07:19:31 -08:00
renovate[bot]
852dd61810 chore(deps): update peter-evans/create-or-update-comment digest to 861c151 2024-12-18 07:22:30 +00:00
Gabe Kangas
4fbdb3f0cd fix(ap): increase outbound worker pool size to use follower count (#4049) 2024-12-17 08:47:15 -08:00
Owncast
ae1be1379c Bundle embedded web app 2024-12-16 13:07:51 +00:00
renovate[bot]
8ecd2a2bd1 chore(deps): lock file maintenance (#4057)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-16 13:02:28 +00:00
renovate[bot]
37d8a0e879 fix(deps): update module github.com/go-chi/chi/v5 to v5.2.0 2024-12-16 00:42:46 +00:00
Owncast
8ddf3b27fa Bundle embedded web app 2024-12-13 06:49:03 +00:00
Gabe Kangas
e1a48909c8 fix(embed): fix follow button not showing up in offline embed. Closes #4053 2024-12-12 22:43:30 -08:00
Owncast
c8d8c8e07c Bundle embedded web app 2024-12-13 06:39:26 +00:00
Gabe Kangas
8ffbf23d4e fix(js): fix social switch not actually turning on feature. Closes #4055 2024-12-12 22:33:37 -08:00
Owncast
06bd9e849f Bundle embedded web app 2024-12-13 05:45:06 +00:00
Gabe Kangas
446d5db085 fix(js): fix followers table being empty when sorted. Closes #3799 (#4054) 2024-12-12 21:40:24 -08:00
Gabe Kangas
3bbbca9465 Remove nightly screenshot job. Re: #3999 2024-12-12 12:14:49 -08:00
renovate[bot]
c86b7cff1b fix(deps): update module golang.org/x/crypto to v0.31.0 2024-12-11 18:49:50 +00:00
dependabot[bot]
9807f60b1b Bump nanoid from 3.3.7 to 3.3.8 in /test/load (#4052)
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.7 to 3.3.8.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-11 09:19:02 -08:00
renovate[bot]
a5f25299b5 chore(deps): update peter-evans/create-or-update-comment digest to d7d9eb5 2024-12-11 08:01:06 +00:00
Owncast
1a4819564d Bundle embedded web app 2024-12-10 01:32:35 +00:00
dependabot[bot]
d1124182af Bump nanoid from 3.3.7 to 3.3.8 in /web (#4050)
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.7 to 3.3.8.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 17:27:23 -08:00
renovate[bot]
281a93b49d fix(deps): update module github.com/grafov/m3u8 to v0.12.1 (#4048)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-12-09 23:13:16 +00:00
Gabe Kangas
c24ee6202a Update local tunneling script to no longer use serveo.net 2024-12-09 10:37:47 -08:00
renovate[bot]
4f1c1ec683 chore(deps): update alpine docker tag to v3.21.0 2024-12-06 01:19:20 +00:00
renovate[bot]
122556c440 fix(deps): update module golang.org/x/net to v0.32.0 2024-12-05 00:47:38 +00:00
renovate[bot]
4bdcbb6d0b fix(deps): update module golang.org/x/crypto to v0.30.0 2024-12-04 21:32:54 +00:00
renovate[bot]
26ceac7069 chore(deps): update peter-evans/create-or-update-comment digest to 1abf947 2024-12-04 08:31:53 +00:00
Gabe Kangas
c5ac3a30af fix: pass in config repo instead of using the global getter (#4039) 2024-11-30 23:38:27 -08:00
renovate[bot]
d8aed658a8 fix(deps): update module github.com/shirou/gopsutil/v4 to v4.24.11 2024-12-01 04:24:50 +00:00
Owncast
1777fb9a37 Bundle embedded web app 2024-11-30 22:42:51 +00:00
mahmed2000
d9a0d13479 Communicate and handle apub outgoing updates being delayed (#4009)
* Allow icon only status messages such as STATUS_PROCESSING to be displayed

* Add a processing status state for the EditSocialLinks component

* Log warning for the outbound apub channel being full

* Buffer the outbound apub channel so some API requests are less likely to get blocked during handling

* Make the apub outbound request trace-log always occur after being queued.

* Linting fix
2024-11-30 14:38:00 -08:00
Owncast
df028f90cf Bundle embedded web app 2024-11-30 20:37:06 +00:00
Varun Gujarathi
f59ac63dfe fix(social): set federation enabled state after confirmation (#4038)
* feat(integerations): add route to get user details

* Commit updated API documentation

* test(integrations): implement unit test for get user details

* fix(social): set federation enabled state after confirmation

set federation enabled state only after confirmation in modal

* Javascript formatting autofixes

* chore(social): use variable instead of explicitly setting path value

* Javascript formatting autofixes

---------

Co-authored-by: Owncast <owncast@owncast.online>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-11-30 12:32:13 -08:00
renovate[bot]
ff1f201798 chore(deps): update peter-evans/create-or-update-comment digest to 267c060 2024-11-27 06:05:32 +00:00
Varun Gujarathi
d135d2907a feat(integerations): add route to get user details (#4030)
* feat(integerations): add route to get user details

* Commit updated API documentation

* test(integrations): implement unit test for get user details

---------

Co-authored-by: Owncast <owncast@owncast.online>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-11-26 11:30:33 -08:00
Owncast
2c2bf2b5bb Bundle embedded web app 2024-11-25 14:10:56 +00:00
renovate[bot]
32bf67b026 chore(deps): lock file maintenance (#4035)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-25 14:05:57 +00:00
renovate[bot]
d578f01348 fix(deps): update module github.com/stretchr/testify to v1.10.0 2024-11-23 12:22:10 +00:00
renovate[bot]
8985947d7f chore(deps): update peter-evans/create-or-update-comment digest to 7157823 2024-11-20 07:57:56 +00:00
Owncast
e1acfee49d Bundle embedded web app 2024-11-18 09:18:37 +00:00
renovate[bot]
49c07594fb chore(deps): lock file maintenance (#4018)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-18 09:13:30 +00:00
dependabot[bot]
dc48e0bca7 Bump jsonpath-plus and artillery in /test/load (#4011)
Bumps [jsonpath-plus](https://github.com/s3u/JSONPath) to 10.1.0 and updates ancestor dependency [artillery](https://github.com/artilleryio/artillery). These dependencies need to be updated together.


Updates `jsonpath-plus` from 7.2.0 to 10.1.0
- [Release notes](https://github.com/s3u/JSONPath/releases)
- [Changelog](https://github.com/JSONPath-Plus/JSONPath/blob/main/CHANGES.md)
- [Commits](https://github.com/s3u/JSONPath/compare/v7.2.0...v10.1.0)

Updates `artillery` from 2.0.10 to 2.0.21
- [Release notes](https://github.com/artilleryio/artillery/releases)
- [Commits](https://github.com/artilleryio/artillery/compare/artillery-2.0.10...artillery-2.0.21)

---
updated-dependencies:
- dependency-name: jsonpath-plus
  dependency-type: indirect
- dependency-name: artillery
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-15 20:04:45 -08:00
Gabe Kangas
0b5d7c8a4d Config repository (#3988)
* WIP

* fix(test): fix ap test failing

* fix: fix unkeyed fields being used

* chore(tests): clean up browser tests by splitting out federation UI tests
2024-11-15 19:20:58 -08:00
Gabe Kangas
56d52c283c chore(tests): clean up browser tests by splitting out federation UI tests 2024-11-15 18:46:18 -08:00
Owncast
8fa2546bef Bundle embedded web app 2024-11-15 21:31:12 +00:00
Gabe Kangas
70bbcb97b8 fix(js): tweak how the vjs hook is fired and url is created 2024-11-15 13:25:06 -08:00
Owncast
d8abe74e5a Bundle embedded web app 2024-11-15 21:00:08 +00:00
Mahlangu
681111ceb2 refactor: update vjs beforeRequest to onRequest (#3945)
* refactor: update vjs onRequst to onRequest

* fix(js): update vjs to use the new onrequest hook for manipulating request uri

---------

Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-11-15 12:55:26 -08:00
Owncast
284833d6a0 Commit updated API documentation 2024-11-15 20:24:14 +00:00
Gabe Kangas
a566b9c9f1 fix(api): define correct inbound api payloads for external requests. Fixes #3966 2024-11-15 12:22:18 -08:00
Owncast
621aebdd3c Commit updated API documentation 2024-11-14 21:44:33 +00:00
Gabe Kangas
2be188a82f Remove API from incorrectly listed as external. For #4015 2024-11-14 13:42:45 -08:00
Owncast
e17b443726 Bundle embedded web app 2024-11-14 18:41:37 +00:00
renovate[bot]
dfc934ce84 chore(deps): update dependency knip to v5.36.6 (#4013)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-14 10:36:35 -08:00
renovate[bot]
512e4dc575 fix(deps): update dependency date-fns to v4 (#4014)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-14 10:36:10 -08:00
Owncast
421cdd0693 Bundle embedded web app 2024-11-13 16:16:31 +00:00
Gabe Kangas
df06d9ad97 fix(deps): revert emoji-mart to v5.2.2 again 2024-11-13 08:10:45 -08:00
Gabe Kangas
7f42981ba7 chore(deps): add slashes to renovate config regex 2024-11-13 08:09:30 -08:00
Owncast
f3029ca782 Bundle embedded web app 2024-11-12 23:00:59 +00:00
renovate[bot]
58657804cb chore(deps): update dependency emoji-mart to v5.6.0 2024-11-12 20:44:59 +00:00
renovate[bot]
d21b10f118 fix(deps): update module github.com/twin/go-away to v1.6.14 2024-11-12 20:07:28 +00:00
renovate[bot]
ae48128441 chore(config): migrate config renovate.json (#4012)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-12 12:05:52 -08:00
Gabe Kangas
b278027b88 chore(deps): ignore golang and go-fed when updating go deps 2024-11-12 08:43:45 -08:00
renovate[bot]
f45a5b16fa fix(deps): update github.com/go-fed/activity digest to b14b50e 2024-11-12 16:28:25 +00:00
Owncast
f3d660853c Bundle embedded web app 2024-11-12 16:26:43 +00:00
Gabe Kangas
aecf7aa9bb fix(deps): do not allow statically assigned versions to auto-update. See #4010 2024-11-12 08:21:04 -08:00
Owncast
37c18ec8ab Bundle embedded web app 2024-11-12 02:11:50 +00:00
renovate[bot]
4c7ccdbbf9 chore(deps): update dependency emoji-mart to v5.6.0 2024-11-11 21:43:11 +00:00
Owncast
a20a9931f7 Bundle embedded web app 2024-11-11 21:42:28 +00:00
Gabe Kangas
b177333ec6 fix(web): hardcode emoji-mart picker version to a working version. Fixes #4010 2024-11-11 13:36:15 -08:00
Owncast
5042c7ced2 Bundle embedded web app 2024-11-11 13:02:23 +00:00
renovate[bot]
71c88c94a3 chore(deps): lock file maintenance (#4008)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-11 12:57:29 +00:00
renovate[bot]
41a6449836 chore(deps): update dependency chromatic to v11.18.0 2024-11-11 01:35:04 +00:00
Owncast
b656f88417 Bundle embedded web app 2024-11-10 22:07:19 +00:00
renovate[bot]
ee5dc3b7c8 chore(deps): update dependency chromatic to v11.17.0 2024-11-10 18:05:15 +00:00
Owncast
1476405609 Bundle embedded web app 2024-11-10 01:42:18 +00:00
renovate[bot]
7830b3765a chore(deps): update dependency emoji-mart to ~5.6.0 2024-11-09 22:24:06 +00:00
Owncast
f9f61876df Bundle embedded web app 2024-11-09 22:23:11 +00:00
Rafael Passos
17d433749c fix: registerUser request body is invalid (#4002)
I found two issues:
1. This `options` object is being passed down to fetchData,
 where it is deconstructed by the "data" attribute, not body.
2. the `data` object is being transformed into JSON downstream,
 thus the stringification done here makes for a string json object only

Signed-off-by: auyer <rafael@rcpassos.me>
2024-11-09 14:18:05 -08:00
Owncast
9989653d00 Bundle embedded web app 2024-11-09 22:13:50 +00:00
heongle
6399df7f9e fix: fix runtime caching error and adjust rules (#3970)
* fix: fix runtime caching error and adjust rules

* fix: add cache config for ts and m3u8

* revert ts and m3u8 cache config to previous behaviour

* remove unused runtime caching config

* remove all runtime caching config

---------

Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-11-09 14:08:45 -08:00
Owncast
99acc19cee Bundle embedded web app 2024-11-09 22:03:32 +00:00
mahmed2000
eca880ac1f Replace picmo with emoji-mart (#4001)
* Add emoji-mart deps

* Change EmojiPicker to use emoji-mart

* Change ChatTextField to work with the emoji-mart data object

* Remove picmo, commit package-lock

* Fix mutant svgs having a size of 0

* Get the custom emojis to show up earlier in the picker

* Set emoji-mart to exact semver. Later versions break custom category sorting.
2024-11-09 13:58:38 -08:00
renovate[bot]
f215809f1d fix(deps): update module golang.org/x/time to v0.8.0 2024-11-09 20:12:15 +00:00
renovate[bot]
77d2bacbad fix(deps): update module golang.org/x/mod to v0.22.0 (#4006)
* fix(deps): update module golang.org/x/mod to v0.22.0

* chore: go mod tidy

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-11-09 12:11:29 -08:00
renovate[bot]
1b1144c6df fix(deps): update module golang.org/x/net to v0.31.0 (#4007)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-09 15:08:38 +00:00
renovate[bot]
971e3ea092 fix(deps): update module golang.org/x/crypto to v0.29.0 (#4005)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-09 15:07:31 +00:00
Owncast
24e2552e4c Bundle embedded web app 2024-11-09 12:20:28 +00:00
renovate[bot]
56f6aa8add fix(deps): update dependency @codemirror/lang-markdown to v6.3.1 2024-11-09 10:29:09 +00:00
Owncast
de8579bcd6 Bundle embedded web app 2024-11-09 10:28:04 +00:00
renovate[bot]
56ede52346 chore(deps): update dependency knip to v5.36.3 2024-11-09 07:56:46 +00:00
Owncast
8269ae3209 Bundle embedded web app 2024-11-09 07:56:04 +00:00
renovate[bot]
674c9168ec fix(deps): update nextjs monorepo to v14.2.17 2024-11-09 04:45:09 +00:00
Owncast
801e91d2f1 Bundle embedded web app 2024-11-09 04:43:25 +00:00
renovate[bot]
1e1dc0ff49 chore(deps): update dependency cypress to v13.15.2 (#4004)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-08 20:38:38 -08:00
Owncast
fb75f1bd95 Bundle embedded web app 2024-11-09 03:24:44 +00:00
renovate[bot]
af56597341 chore(deps): update dependency mdx-mermaid to v2.0.2 2024-11-09 01:04:32 +00:00
Owncast
214c202552 Bundle embedded web app 2024-11-09 01:01:59 +00:00
renovate[bot]
ad64956027 chore(deps): update dependency @types/node to v22 (#4003)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-08 16:57:04 -08:00
renovate[bot]
13d2ad9079 fix(deps): update module github.com/shirou/gopsutil/v4 to v4.24.10 2024-11-08 21:35:24 +00:00
Gabe Kangas
83ef466ee1 fix(ci): check out repo if event_name is schedule 2024-11-08 13:16:13 -08:00
Owncast
a8026c13bc Bundle embedded web app 2024-11-08 19:48:39 +00:00
mahmed2000
d31d2948c3 Change websocket mock from empty object to empty class (#3998) 2024-11-08 11:43:41 -08:00
Owncast
4d68c7b561 Bundle embedded web app 2024-11-08 18:10:46 +00:00
Gabe Kangas
25cd9b6d53 fix(js): log out unused error value 2024-11-08 10:05:53 -08:00
Owncast
ecba3cc003 Bundle embedded web app 2024-11-08 09:09:49 +00:00
renovate[bot]
89dc1776d7 chore(deps): update storybook monorepo to v8.4.2 2024-11-08 07:11:30 +00:00
Owncast
97fcdfd914 Bundle embedded web app 2024-11-08 03:11:13 +00:00
renovate[bot]
0af864ea8f chore(deps): update dependency chromatic to v11.16.5 2024-11-08 01:54:42 +00:00
Owncast
121cd37c8c Bundle embedded web app 2024-11-08 01:53:07 +00:00
renovate[bot]
06c09f12de chore(deps): update typescript-eslint monorepo to v8.13.0 2024-11-07 21:26:36 +00:00
Owncast
d1117494b0 Bundle embedded web app 2024-11-07 21:24:20 +00:00
renovate[bot]
68a903b83a chore(deps): update dependency eslint-plugin-storybook to v0.11.0 2024-11-07 19:41:56 +00:00
Owncast
c8c91506cd Bundle embedded web app 2024-11-07 19:39:56 +00:00
renovate[bot]
a1a497f5c1 chore(deps): update dependency chromatic to v11.16.4 2024-11-07 16:42:28 +00:00
Owncast
219f76d891 Bundle embedded web app 2024-11-06 14:27:12 +00:00
renovate[bot]
ad9b01f442 chore(deps): update dependency @types/node to v20.17.6 2024-11-06 11:06:34 +00:00
renovate[bot]
962d03710d chore(deps): update peter-evans/create-or-update-comment digest to 213b1f9 2024-11-06 06:21:32 +00:00
dependabot[bot]
2ebc64b3b1 Bump cookie and cookie-parser in /test/load (#3996)
Bumps [cookie](https://github.com/jshttp/cookie) and [cookie-parser](https://github.com/expressjs/cookie-parser). These dependencies needed to be updated together.

Updates `cookie` from 0.4.1 to 0.7.2
- [Release notes](https://github.com/jshttp/cookie/releases)
- [Commits](https://github.com/jshttp/cookie/compare/v0.4.1...v0.7.2)

Updates `cookie-parser` from 1.4.6 to 1.4.7
- [Release notes](https://github.com/expressjs/cookie-parser/releases)
- [Changelog](https://github.com/expressjs/cookie-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/cookie-parser/compare/1.4.6...1.4.7)

---
updated-dependencies:
- dependency-name: cookie
  dependency-type: indirect
- dependency-name: cookie-parser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-05 16:07:43 -08:00
Owncast
5ca7249388 Bundle embedded web app 2024-11-05 13:19:38 +00:00
renovate[bot]
50a4224224 fix(deps): update dependency react-hotkeys-hook to v4.6.1 2024-11-05 11:18:07 +00:00
Owncast
ac009f574e Bundle embedded web app 2024-11-05 04:06:00 +00:00
renovate[bot]
b9d8fbffe2 chore(deps): update dependency sass to v1.80.6 2024-11-05 00:20:32 +00:00
Owncast
40b97e6bc1 Bundle embedded web app 2024-11-04 18:14:16 +00:00
renovate[bot]
134093b9d2 chore(deps): update dependency eslint-plugin-storybook to v0.10.2 2024-11-04 16:05:27 +00:00
Owncast
d123a2c020 Bundle embedded web app 2024-11-04 12:45:50 +00:00
renovate[bot]
fbd501f57e chore(deps): lock file maintenance 2024-11-04 12:40:56 +00:00
Owncast
ed7bd001ee Bundle embedded web app 2024-11-04 03:13:29 +00:00
renovate[bot]
83b3a0da5e chore(deps): update dependency @storybook/addon-styling-webpack to v1.0.1 2024-11-04 01:21:15 +00:00
Owncast
e04e079243 Bundle embedded web app 2024-11-04 01:19:34 +00:00
renovate[bot]
d4fd75b9c7 chore(deps): update dependency knip to v5.36.0 2024-11-03 21:52:49 +00:00
Owncast
6fbb3b9565 Bundle embedded web app 2024-11-03 21:51:32 +00:00
renovate[bot]
42005608fa chore(deps): update dependency @types/node to v20.17.5 2024-11-03 18:37:38 +00:00
Owncast
538ebaf7bb Bundle embedded web app 2024-11-03 16:22:21 +00:00
renovate[bot]
2be0aebd6d chore(deps): update storybook monorepo to v8.4.0 2024-11-03 13:37:37 +00:00
Owncast
fdaf25d92e Bundle embedded web app 2024-11-03 09:54:53 +00:00
renovate[bot]
5fc4e56bf9 chore(deps): update dependency @types/node to v20.17.4 2024-11-03 07:52:34 +00:00
Owncast
392e437b9a Bundle embedded web app 2024-11-02 19:28:48 +00:00
renovate[bot]
3066d6b82e chore(deps): update dependency mermaid to v11.4.0 2024-11-02 16:46:03 +00:00
Owncast
2f941be5c0 Bundle embedded web app 2024-11-02 16:44:41 +00:00
renovate[bot]
ff058ca777 chore(deps): update dependency knip to v5.34.4 2024-11-02 13:57:16 +00:00
Owncast
3f321d3a1c Bundle embedded web app 2024-11-02 09:46:18 +00:00
renovate[bot]
490c38bd31 fix(deps): update workbox monorepo to v7.3.0 2024-11-02 07:41:14 +00:00
Owncast
019cdb169c Bundle embedded web app 2024-11-02 07:40:21 +00:00
renovate[bot]
9d0c7c1edb chore(deps): update dependency chromatic to v11.16.3 2024-11-02 05:09:06 +00:00
Owncast
88a96f0eae Bundle embedded web app 2024-11-02 05:07:54 +00:00
renovate[bot]
b7d8a5ea99 chore(deps): update dependency sass to v1.80.5 2024-11-02 01:35:53 +00:00
Owncast
5d8c6348bc Bundle embedded web app 2024-11-02 01:34:40 +00:00
renovate[bot]
a934b89a53 chore(deps): update dependency knip to v5.34.3 2024-11-01 22:05:10 +00:00
Owncast
9ccf19eb64 Bundle embedded web app 2024-11-01 22:03:57 +00:00
renovate[bot]
de3eac2b2f chore(deps): update dependency @types/node to v20.17.3 2024-11-01 19:23:53 +00:00
Owncast
76abc0bbfb Bundle embedded web app 2024-11-01 19:22:57 +00:00
renovate[bot]
3bb2ba18e5 chore(deps): update typescript-eslint monorepo to v8.12.2 2024-11-01 16:18:21 +00:00
Owncast
e71144a68d Bundle embedded web app 2024-11-01 03:07:33 +00:00
renovate[bot]
7a367a933b chore(deps): update typescript-eslint monorepo to v8.12.1 2024-11-01 01:12:00 +00:00
Owncast
c1cb96fa57 Bundle embedded web app 2024-10-31 22:35:12 +00:00
renovate[bot]
28c6947a43 chore(deps): update dependency @types/node to v20.17.2 2024-10-31 20:48:45 +00:00
Owncast
00b9dec218 Bundle embedded web app 2024-10-31 05:20:24 +00:00
nekojanai
8e89dfb345 fix: username wrapping (#3975) 2024-10-30 22:13:28 -07:00
renovate[bot]
ed21911288 chore(deps): update peter-evans/create-or-update-comment digest to 6f2ce0e 2024-10-30 08:31:18 +00:00
Owncast
d9aeb32852 Bundle embedded web app 2024-10-29 06:34:21 +00:00
renovate[bot]
3262d3b875 chore(deps): update dependency eslint-plugin-jsx-a11y to v6.10.2 2024-10-29 05:04:08 +00:00
Owncast
af88ee386b Bundle embedded web app 2024-10-29 05:03:00 +00:00
dependabot[bot]
50f39284ce Bump elliptic from 6.5.7 to 6.6.0 in /web (#3990)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.7 to 6.6.0.
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.7...v6.6.0)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 21:58:03 -07:00
Owncast
9c36e196b7 Bundle embedded web app 2024-10-29 02:01:49 +00:00
renovate[bot]
274c85ac2b chore(deps): lock file maintenance 2024-10-29 01:56:42 +00:00
Owncast
5eaa06cf15 Bundle embedded web app 2024-10-28 21:46:57 +00:00
renovate[bot]
86c20e0a39 chore(deps): update dependency chromatic to v11.16.1 2024-10-28 18:52:58 +00:00
Owncast
90a8ebbfa4 Bundle embedded web app 2024-10-28 18:50:58 +00:00
renovate[bot]
e995836ee4 chore(deps): update dependency @babel/core to v7.26.0 2024-10-28 15:58:07 +00:00
Owncast
fe040070de Bundle embedded web app 2024-10-28 15:56:15 +00:00
renovate[bot]
9d3290c2c1 chore(deps): update dependency @types/node to v20.17.1 2024-10-28 13:30:53 +00:00
Owncast
97880ce93e Bundle embedded web app 2024-10-28 13:29:58 +00:00
renovate[bot]
c14ec935da fix(deps): update dependency @uiw/react-codemirror to v4.23.6 2024-10-28 09:11:59 +00:00
Owncast
8a3e91fdc8 Bundle embedded web app 2024-10-28 09:10:52 +00:00
renovate[bot]
bdcb481a51 fix(deps): update dependency @uiw/codemirror-theme-bbedit to v4.23.6 2024-10-28 06:11:47 +00:00
Gabe Kangas
eed34b528e Update API gen, cleanup, add missing property to status response (#3987)
* fix(api): remove invalid tag properties from components

* chore(api): update api validation/linter to use redocly

* fix(api): add missing streamTitle property to status object. Closes #3983

* chore: add redocly config file

* Commit updated API documentation

---------

Co-authored-by: Owncast <owncast@owncast.online>
2024-10-27 15:36:31 -07:00
Owncast
5a3600e01f Bundle embedded web app 2024-10-27 21:59:35 +00:00
renovate[bot]
022e505ee0 chore(deps): update dependency cypress to v13.15.1 2024-10-27 18:32:10 +00:00
Owncast
b9733109fa Bundle embedded web app 2024-10-27 15:21:45 +00:00
renovate[bot]
3d146de750 chore(deps): update dependency knip to v5.34.0 2024-10-27 12:49:07 +00:00
Owncast
b475fbaa5d Bundle embedded web app 2024-10-27 12:47:39 +00:00
renovate[bot]
fd14133e91 chore(deps): update dependency chromatic to v11.15.0 2024-10-27 09:45:07 +00:00
Owncast
f0c07e6a7b Bundle embedded web app 2024-10-27 09:43:16 +00:00
renovate[bot]
ee568866ec chore(deps): update dependency @types/node to v20.17.0 2024-10-27 07:09:36 +00:00
Owncast
943d8efe0d Bundle embedded web app 2024-10-27 07:08:32 +00:00
renovate[bot]
c9dcc88320 fix(deps): update nextjs monorepo to v14.2.16 2024-10-27 03:49:28 +00:00
Owncast
8819cd8980 Bundle embedded web app 2024-10-27 03:47:01 +00:00
renovate[bot]
016951a3be chore(deps): update dependency sass to v1.80.4 2024-10-27 01:48:56 +00:00
Gabe Kangas
c44d56af63 fix(test): update tests to reflect the new transcoder flag 2024-10-26 15:09:47 -07:00
Owncast
5501e20e82 Bundle embedded web app 2024-10-26 22:02:48 +00:00
renovate[bot]
83c601b5c9 chore(deps): update dependency html-webpack-plugin to v5.6.3 2024-10-26 19:37:01 +00:00
Gabe Kangas
0fccaa61fe fix(video): fix nil reference exception in playback metrics. Closes #3984 2024-10-26 12:22:19 -07:00
Gabe Kangas
05545cb6da Add persistent http connection optimization. Closes #3985 2024-10-26 11:58:02 -07:00
Owncast
0e0f8d7284 Bundle embedded web app 2024-10-26 17:09:58 +00:00
renovate[bot]
734636039f chore(deps): update dependency @types/react to v18.3.12 2024-10-26 13:19:52 +00:00
Owncast
14b73706ce Bundle embedded web app 2024-10-26 13:19:09 +00:00
renovate[bot]
f2600a02fb chore(deps): update dependency @types/node to v20.16.15 2024-10-26 09:30:18 +00:00
Owncast
f7a7eed782 Bundle embedded web app 2024-10-26 09:28:17 +00:00
renovate[bot]
d2bfdab339 chore(deps): update dependency @types/jest to v29.5.14 2024-10-26 06:21:32 +00:00
Owncast
756d407ce2 Bundle embedded web app 2024-10-26 06:20:20 +00:00
renovate[bot]
ec3437f9e1 chore(deps): update dependency @types/classnames to v2.3.4 2024-10-26 03:51:01 +00:00
Owncast
8362589364 Bundle embedded web app 2024-10-26 00:20:03 +00:00
renovate[bot]
bc2f8fed9c chore(deps): update dependency eslint-plugin-react to v7.37.2 2024-10-25 23:08:42 +00:00
Owncast
959ffb58ac Bundle embedded web app 2024-10-25 18:22:32 +00:00
renovate[bot]
4ddc19f91f chore(deps): update babel monorepo to v7.25.9 2024-10-25 17:10:31 +00:00
Owncast
6ea0cb10c5 Bundle embedded web app 2024-10-25 14:35:03 +00:00
renovate[bot]
da23ee8e3e fix(deps): update dependency video.js to v8.19.1 2024-10-25 10:15:08 +00:00
Owncast
85084e4b60 Bundle embedded web app 2024-10-25 06:31:45 +00:00
renovate[bot]
4315d19daa chore(deps): update dependency @types/node to v20.16.14 2024-10-25 03:47:54 +00:00
Owncast
91efec9200 Bundle embedded web app 2024-10-25 01:55:30 +00:00
renovate[bot]
6baa2e28d7 chore(deps): update dependency chromatic to v11.14.0 2024-10-24 21:39:56 +00:00
Owncast
476be88c86 Bundle embedded web app 2024-10-24 21:37:45 +00:00
renovate[bot]
abe0c49b38 chore(deps): update typescript-eslint monorepo to v8.11.0 2024-10-24 19:31:26 +00:00
Owncast
8ca104634b Bundle embedded web app 2024-10-24 15:08:32 +00:00
renovate[bot]
06706702f8 chore(deps): update dependency eslint-plugin-storybook to v0.10.1 2024-10-24 12:25:23 +00:00
Owncast
b3c42769cb Bundle embedded web app 2024-10-24 10:20:13 +00:00
renovate[bot]
7178b3b557 chore(deps): update dependency eslint-plugin-jsx-a11y to v6.10.1 2024-10-24 08:25:23 +00:00
renovate[bot]
01dc997fb4 chore(deps): update peter-evans/create-or-update-comment digest to d5aa8cd 2024-10-23 06:20:24 +00:00
Owncast
a00e726c22 Bundle embedded web app 2024-10-22 23:34:30 +00:00
embr
2015a566cb Fix websocket reconnection (#3959)
The `onerror` event is only triggered if the buffer is full while the
socket is closed, while the `onclose` event is called for any kind of
disconnection: https://websockets.spec.whatwg.org/#closeWebSocket

Fixes: https://github.com/owncast/owncast/issues/3958

Co-authored-by: Alyssa Ross <hi@alyssa.is>
2024-10-22 16:29:46 -07:00
Owncast
45392aa5ad Bundle embedded web app 2024-10-22 07:26:31 +00:00
renovate[bot]
b07413a314 chore(deps): update dependency @types/node to v20.16.13 2024-10-22 05:17:10 +00:00
Owncast
90f6d4333c Bundle embedded web app 2024-10-22 05:15:05 +00:00
renovate[bot]
beeeaede5e chore(deps): update dependency sass to v1.80.3 2024-10-22 02:03:10 +00:00
Owncast
1c09c7c544 Bundle embedded web app 2024-10-21 19:31:41 +00:00
renovate[bot]
352df6a604 chore(deps): update dependency @mdx-js/react to v3.1.0 2024-10-21 17:02:47 +00:00
Owncast
db635a8119 Bundle embedded web app 2024-10-21 13:19:17 +00:00
renovate[bot]
1f06deb52f chore(deps): lock file maintenance 2024-10-21 13:14:19 +00:00
Owncast
29099d5d07 Bundle embedded web app 2024-10-21 04:40:48 +00:00
renovate[bot]
488b5d7d87 chore(deps): update typescript-eslint monorepo to v8.10.0 2024-10-21 00:49:11 +00:00
Owncast
1e9a34b0eb Bundle embedded web app 2024-10-21 00:47:55 +00:00
renovate[bot]
e9b778eba6 chore(deps): update dependency sass to v1.80.2 2024-10-20 22:52:56 +00:00
Owncast
51536bae82 Bundle embedded web app 2024-10-20 22:46:41 +00:00
renovate[bot]
54d8ad5acb chore(deps): update dependency mermaid to v11 (#3965)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-20 15:41:43 -07:00
Owncast
2e0e79162a Bundle embedded web app 2024-10-20 22:38:02 +00:00
renovate[bot]
0e0167d4bd fix(deps): update dependency react-virtuoso to v4.12.0 (#3968)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-20 15:32:52 -07:00
renovate[bot]
d0a1e78b69 fix(deps): update dependency react-error-boundary to v4.1.1 (#3973)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-20 15:32:28 -07:00
Owncast
fa6da3b475 Bundle embedded web app 2024-10-20 22:10:37 +00:00
renovate[bot]
87c0b88fda fix(deps): update dependency chart.js to v4.4.5 (#3974)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-20 15:05:34 -07:00
Owncast
23a91674bc Bundle embedded web app 2024-10-20 21:46:00 +00:00
renovate[bot]
9ddf99ad1a chore(deps): update dependency html-webpack-plugin to v5.6.2 2024-10-20 19:36:45 +00:00
Owncast
3dbc075f9b Bundle embedded web app 2024-10-20 19:34:57 +00:00
Gabe Kangas
4ac3068fcb fix(css): run prittier on css file 2024-10-20 12:29:36 -07:00
Owncast
c23b04c3ab Bundle embedded web app 2024-10-20 19:29:32 +00:00
Gabe Kangas
edc920f7db fix(storybook): update storybook generation templates 2024-10-20 12:23:45 -07:00
Gabe Kangas
78a7a45ff0 fix(sass): resolve sass warning by wrapping in root 2024-10-20 12:20:22 -07:00
Owncast
2e01006126 Bundle embedded web app 2024-10-20 18:47:27 +00:00
renovate[bot]
4cada70b2c chore(deps): update dependency chromatic to v11.12.6 2024-10-20 16:19:08 +00:00
Owncast
464c3154c2 Bundle embedded web app 2024-10-20 16:17:19 +00:00
renovate[bot]
dfb47b5e58 chore(deps): update typescript-eslint monorepo to v8.9.0 2024-10-20 16:12:17 +00:00
Owncast
1454ba5f2d Bundle embedded web app 2024-10-20 13:05:18 +00:00
renovate[bot]
28b6b38613 chore(deps): update dependency sass to v1.80.1 2024-10-20 10:15:04 +00:00
Owncast
8c917d29d4 Bundle embedded web app 2024-10-20 10:07:50 +00:00
renovate[bot]
940a0e2fde fix(deps): update dependency @uiw/react-codemirror to v4.23.5 2024-10-20 07:07:18 +00:00
Owncast
a4ba8827cc Bundle embedded web app 2024-10-20 07:06:07 +00:00
renovate[bot]
59fafc6fc6 fix(deps): update dependency @uiw/codemirror-theme-bbedit to v4.23.5 2024-10-20 04:20:54 +00:00
Owncast
c7b0f59e51 Bundle embedded web app 2024-10-20 04:18:44 +00:00
renovate[bot]
6c64e67af9 chore(deps): update dependency @types/node to v20.16.12 2024-10-20 01:13:19 +00:00
Owncast
889c10945b Bundle embedded web app 2024-10-20 01:05:05 +00:00
Gabe Kangas
78146f1ee3 fix(storybook): fix typography page from not rendering 2024-10-19 17:54:29 -07:00
Gabe Kangas
a747aea71c Continued WIP. Most of Storybook 8 runs. 2024-10-19 17:54:27 -07:00
Gabe Kangas
1e362d39ac chore: remove documentation that is better suited to exist elsewhere 2024-10-19 17:53:45 -07:00
mahmed2000
3d9bd9d353 Storybook 8 fixes (#3937)
* Add globs for auto-generated CSF screenshot stories to main.js

* Remove unneeded mdx files for screenshots

* Glob for stories.js instead of just js files in the doc pages directory

* Might as well update it to 8.3 while we're at it

* Update knip config file to make it happy

* Fix linter warning

---------

Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-10-19 17:53:45 -07:00
Gabe Kangas
f424fe6dae WIP storybook upgrade 2024-10-19 17:53:42 -07:00
Owncast
d939d9f43d Bundle embedded web app 2024-10-20 00:51:07 +00:00
renovate[bot]
6295f8d1a1 chore(deps): update dependency @types/node to v20.16.12 2024-10-20 00:28:32 +00:00
Owncast
85ded31098 Bundle embedded web app 2024-10-20 00:25:38 +00:00
renovate[bot]
f8444459b8 fix(deps): update dependency chart.js to v4.4.5 2024-10-20 00:20:06 +00:00
Owncast
7b4959cc6d Bundle embedded web app 2024-10-19 22:34:30 +00:00
Gabe Kangas
df3a9424b1 fix(test): fix javascript tests not running 2024-10-19 15:28:41 -07:00
Gabe Kangas
742df5322f fix(web): specify node version to be 22.9.0 for builds 2024-10-19 11:51:23 -07:00
Gabe Kangas
e5a4404770 fix(web): isable swc features and fix build 2024-10-18 08:33:27 -07:00
renovate[bot]
39f486cd52 fix(deps): update module golang.org/x/time to v0.7.0 2024-10-16 22:20:44 +00:00
renovate[bot]
21a40540c2 fix(deps): update module golang.org/x/net to v0.30.0 2024-10-16 20:40:10 +00:00
renovate[bot]
bedbf544ff fix(deps): update module github.com/yuin/goldmark to v1.7.8 2024-10-16 16:30:07 +00:00
renovate[bot]
5ba606903c fix(deps): update module golang.org/x/crypto to v0.28.0 2024-10-16 14:18:33 +00:00
Owncast
18ce952706 Bundle embedded web app 2024-10-16 14:17:28 +00:00
renovate[bot]
0ac5937eea fix(deps): update dependency yaml to v2.6.0 2024-10-16 11:36:14 +00:00
renovate[bot]
390c51bac0 fix(deps): update module github.com/yuin/goldmark-emoji to v1.0.4 2024-10-16 06:38:44 +00:00
renovate[bot]
bbb436e971 fix(deps): update module github.com/yuin/goldmark to v1.7.7 2024-10-16 03:28:07 +00:00
renovate[bot]
c78622ada6 fix(deps): update module github.com/prometheus/client_golang to v1.20.5 2024-10-16 01:28:29 +00:00
renovate[bot]
b95a9d7b7a fix(deps): update module github.com/mattn/go-sqlite3 to v1.14.24 2024-10-15 21:51:23 +00:00
Owncast
6d37dc1e1e Bundle embedded web app 2024-10-14 09:41:19 +00:00
renovate[bot]
65c03ee57b chore(deps): lock file maintenance 2024-10-14 09:35:54 +00:00
Owncast
ec1a0c5fb3 Bundle embedded web app 2024-10-14 04:30:56 +00:00
renovate[bot]
2ff71edb76 chore(deps): update dependency sass to v1.79.5 2024-10-14 01:10:43 +00:00
Owncast
1e470e2ce1 Bundle embedded web app 2024-10-13 19:09:02 +00:00
renovate[bot]
b8f3c7ba54 chore(deps): update dependency @babel/core to v7.25.8 2024-10-13 15:14:22 +00:00
Owncast
04a079b623 Bundle embedded web app 2024-10-13 12:23:07 +00:00
renovate[bot]
d911b0a8ba chore(deps): update dependency knip to v5.33.3 2024-10-13 10:14:41 +00:00
Owncast
cc48275237 Bundle embedded web app 2024-10-13 01:09:49 +00:00
renovate[bot]
6d50f7004d chore(deps): update dependency chromatic to v11.12.5 2024-10-12 23:06:56 +00:00
Owncast
e276e42e1e Bundle embedded web app 2024-10-12 04:30:52 +00:00
renovate[bot]
0b22538af1 fix(deps): update nextjs monorepo to v14.2.15 2024-10-12 01:08:01 +00:00
Owncast
c712c5f793 Bundle embedded web app 2024-10-12 01:05:08 +00:00
renovate[bot]
5b04578765 chore(deps): update dependency typescript to v5.6.3 2024-10-11 22:29:18 +00:00
Owncast
50852921fc Bundle embedded web app 2024-10-11 22:27:54 +00:00
renovate[bot]
8a86914827 chore(deps): update dependency knip to v5.33.2 2024-10-11 19:15:38 +00:00
Eng Zer Jun
08bda166fe Replace github.com/shirou/gopsutil/v3 with v4 (#3956)
* Replace `github.com/shirou/gopsutil/v3` to v4

PR #3925 only added the new v4 dependency into our `go.mod` file. The
actual usages in the source code were not updated to use the new v4
version.

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>

* Tidy `go.mod` correctly

One `require` section for direct dependencies; Another `require` section
for indirect dependencies.

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>

---------

Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
2024-10-11 12:13:33 -07:00
mahmed2000
deb938d521 Fix incorrect timestamp on Eartlhy packaged binary (#3955) 2024-10-11 08:31:44 -07:00
Owncast
eec9317b93 Bundle embedded web app 2024-10-11 06:10:53 +00:00
renovate[bot]
bb25bc9a82 chore(deps): update dependency knip to v5.33.1 2024-10-11 04:35:53 +00:00
Owncast
8f6508e7fd Bundle embedded web app 2024-10-11 04:33:36 +00:00
renovate[bot]
4ec00e9033 chore(deps): update dependency chromatic to v11.12.0 2024-10-11 02:09:29 +00:00
Owncast
384cd4b730 Bundle embedded web app 2024-10-11 02:07:13 +00:00
renovate[bot]
193edb4871 chore(deps): update dependency @types/node to v20.16.11 2024-10-10 22:30:25 +00:00
Owncast
369667e8f5 Bundle embedded web app 2024-10-10 22:28:34 +00:00
renovate[bot]
6c6f313de6 chore(deps): update typescript-eslint monorepo to v8.8.1 2024-10-10 18:28:52 +00:00
Owncast
f0323731dd Bundle embedded web app 2024-10-10 15:10:44 +00:00
mahmed2000
dd5a14cd1a Fix mistyped filter value in the admin's log table (#3952) 2024-10-10 08:05:05 -07:00
Owncast
e59285d998 Bundle embedded web app 2024-10-09 22:21:13 +00:00
s-vamshi
c528d3921f fix(web): long usernames in chat truncated (#3949) 2024-10-09 15:15:58 -07:00
renovate[bot]
c00440d918 chore(deps): update peter-evans/create-or-update-comment digest to 1b44297 2024-10-09 10:48:53 +00:00
Owncast
b35b139fbc Bundle embedded web app 2024-10-08 10:16:50 +00:00
renovate[bot]
3afe880b45 fix(deps): update dependency @uiw/react-codemirror to v4.23.5 2024-10-08 08:15:01 +00:00
Owncast
0a878401a4 Bundle embedded web app 2024-10-08 08:12:41 +00:00
renovate[bot]
71c141980a fix(deps): update dependency @uiw/codemirror-theme-bbedit to v4.23.5 2024-10-08 03:40:09 +00:00
Owncast
d33954c68d Bundle embedded web app 2024-10-07 15:17:45 +00:00
renovate[bot]
e14713631f chore(deps): lock file maintenance 2024-10-07 15:12:15 +00:00
Owncast
f45cbd421c Bundle embedded web app 2024-10-07 12:11:42 +00:00
renovate[bot]
06dcf82fe1 fix(deps): update dependency video.js to v8.18.1 2024-10-07 10:36:38 +00:00
Owncast
0812dbb1e9 Bundle embedded web app 2024-10-07 10:35:02 +00:00
renovate[bot]
e551096dd1 chore(deps): lock file maintenance 2024-10-07 10:29:17 +00:00
Gabe Kangas
8d08ae5147 chore: tweaking workflow text 2024-10-06 21:44:19 -07:00
Owncast
99652825b6 Bundle embedded web app 2024-10-07 03:35:05 +00:00
renovate[bot]
e074d3e83a chore(deps): update dependency npm to v10.9.0 2024-10-07 02:56:24 +00:00
Gabe Kangas
e5aa3c3cfb fix: remove invalid setting 2024-10-06 19:54:42 -07:00
Gabe Kangas
b55e4045c1 chore: replace old stale github app with workflow action 2024-10-06 18:12:13 -07:00
Owncast
ac3f7a2ac8 Bundle embedded web app 2024-10-06 21:07:23 +00:00
renovate[bot]
5f71210744 chore(deps): update dependency eslint-plugin-import to v2.31.0 2024-10-06 21:02:09 +00:00
Owncast
bc6f5c02cf Bundle embedded web app 2024-10-06 19:45:53 +00:00
renovate[bot]
b104d1222a fix(deps): update dependency sanitize-html to v2.13.1 2024-10-06 15:38:27 +00:00
Owncast
8b1601b76a Bundle embedded web app 2024-10-06 10:50:10 +00:00
renovate[bot]
1e86f3cd8b chore(deps): update dependency knip to v5.31.0 2024-10-06 06:16:07 +00:00
Owncast
a6ff8f14d4 Bundle embedded web app 2024-10-06 04:19:29 +00:00
renovate[bot]
ed04e2e0af fix(deps): update dependency @uiw/react-codemirror to v4.23.4 2024-10-06 00:40:19 +00:00
Owncast
cf237c2923 Bundle embedded web app 2024-10-06 00:39:08 +00:00
renovate[bot]
33807f0acc fix(deps): update dependency @uiw/codemirror-theme-bbedit to v4.23.4 2024-10-05 22:10:51 +00:00
Owncast
f439f400e2 Bundle embedded web app 2024-10-05 22:09:38 +00:00
renovate[bot]
9dc090e3dc chore(deps): update dependency @types/react to v18.3.11 2024-10-05 18:40:37 +00:00
Owncast
6c8186b995 Bundle embedded web app 2024-10-05 18:39:22 +00:00
renovate[bot]
f705c887ff chore(deps): update dependency @babel/core to v7.25.7 2024-10-05 17:06:10 +00:00
Owncast
73e9e7eb7c Bundle embedded web app 2024-10-05 17:05:25 +00:00
renovate[bot]
b8ff62d2c5 chore(deps): update dependency mermaid to v10.9.2 2024-10-05 12:43:05 +00:00
Owncast
b5dcbf5d72 Bundle embedded web app 2024-10-04 21:40:36 +00:00
renovate[bot]
f0402792d6 fix(deps): update nextjs monorepo to v14.2.14 2024-10-04 18:48:05 +00:00
Owncast
c5abe686eb Bundle embedded web app 2024-10-04 18:46:30 +00:00
renovate[bot]
61802b6008 chore(deps): update dependency eslint-plugin-react to v7.37.1 2024-10-04 16:00:20 +00:00
Owncast
e6ce12d625 Bundle embedded web app 2024-10-04 01:45:16 +00:00
renovate[bot]
6b84a5248c chore(deps): update dependency chromatic to v11.11.0 2024-10-03 21:44:24 +00:00
Owncast
b73ea79431 Bundle embedded web app 2024-10-03 21:42:58 +00:00
renovate[bot]
edcc428b3c chore(deps): update typescript-eslint monorepo to v8.8.0 2024-10-03 18:49:49 +00:00
renovate[bot]
b00c48e369 chore(deps): update peter-evans/create-or-update-comment digest to 48de637 2024-10-02 06:34:21 +00:00
Florian Greinacher
ee1dc904e1 chore: use correct manager name in Renovate config (#3943) 2024-10-01 09:16:53 -07:00
Owncast
9ce46753fc Bundle embedded web app 2024-10-01 12:13:50 +00:00
renovate[bot]
2fffd175d7 fix(deps): update dependency @codemirror/lang-markdown to v6.3.0 2024-10-01 09:07:25 +00:00
Owncast
0749708942 Bundle embedded web app 2024-10-01 06:41:12 +00:00
renovate[bot]
b7a1bc53c3 chore(deps): update dependency sass to v1.79.4 2024-10-01 03:52:57 +00:00
Owncast
43f99ae3c8 Bundle embedded web app 2024-09-30 22:30:48 +00:00
renovate[bot]
5bd79b01b2 chore(deps): update dependency @types/react to v18.3.10 2024-09-30 19:42:27 +00:00
Owncast
ad165bc76b Bundle embedded web app 2024-09-30 19:41:37 +00:00
renovate[bot]
36373a96e1 chore(deps): update dependency @types/node to v20.16.10 2024-09-30 17:00:21 +00:00
Owncast
f5ebcc76eb Bundle embedded web app 2024-09-30 11:13:57 +00:00
renovate[bot]
3eb214d842 chore(deps): lock file maintenance 2024-09-30 11:08:44 +00:00
Owncast
e1e6d18bf3 Bundle embedded web app 2024-09-30 07:55:12 +00:00
renovate[bot]
00ee31d224 chore(deps): update dependency eslint-plugin-react to v7.37.0 2024-09-30 04:16:20 +00:00
Owncast
63459b2354 Bundle embedded web app 2024-09-29 19:23:50 +00:00
renovate[bot]
656a3156f2 chore(deps): update dependency eslint-plugin-storybook to v0.9.0 2024-09-29 16:13:48 +00:00
Owncast
2447a57e00 Bundle embedded web app 2024-09-29 04:09:23 +00:00
renovate[bot]
066de108db chore(deps): update dependency @types/node to v20.16.9 2024-09-29 00:28:29 +00:00
Owncast
31a1c8b960 Bundle embedded web app 2024-09-29 00:27:49 +00:00
renovate[bot]
21ae3069e2 chore(deps): update dependency cypress to v13.15.0 2024-09-28 21:33:46 +00:00
Owncast
32d796d56c Bundle embedded web app 2024-09-28 21:32:43 +00:00
renovate[bot]
ace38e6b1e chore(deps): update dependency @types/node to v20.16.8 2024-09-28 18:35:06 +00:00
Owncast
1b0d17a602 Bundle embedded web app 2024-09-28 07:10:30 +00:00
renovate[bot]
27260122e2 chore(deps): update dependency @types/node to v20.16.7 2024-09-28 04:30:13 +00:00
Owncast
150a788fc5 Bundle embedded web app 2024-09-27 23:59:04 +00:00
renovate[bot]
0597953ea1 chore(deps): update dependency chromatic to v11.10.4 2024-09-27 21:32:15 +00:00
Owncast
a3bebd98c5 Bundle embedded web app 2024-09-27 21:31:36 +00:00
renovate[bot]
c5c1bc928b chore(deps): update dependency @types/react to v18.3.9 2024-09-27 19:51:57 +00:00
Owncast
6e7e4c9fc1 Bundle embedded web app 2024-09-27 16:22:13 +00:00
dependabot[bot]
99311911f1 Bump rollup from 2.79.1 to 2.79.2 in /web (#3939)
Bumps [rollup](https://github.com/rollup/rollup) from 2.79.1 to 2.79.2.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v2.79.1...v2.79.2)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-27 09:15:08 -07:00
Owncast
593a94131d Bundle embedded web app 2024-09-27 06:12:17 +00:00
renovate[bot]
d076fefa99 chore(deps): update typescript-eslint monorepo to v8.7.0 2024-09-27 04:56:31 +00:00
Owncast
0b9260161b Bundle embedded web app 2024-09-27 04:55:04 +00:00
renovate[bot]
dc3aafa6cc chore(deps): update dependency chromatic to v11.10.3 2024-09-27 01:40:10 +00:00
Owncast
7c6dbc94bc Bundle embedded web app 2024-09-27 01:38:30 +00:00
renovate[bot]
e5239c169b chore(deps): update dependency @types/node to v20.16.6 2024-09-26 23:50:06 +00:00
renovate[bot]
5cd4c14943 fix(deps): update module github.com/shirou/gopsutil/v3 to v4 (#3925)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-26 16:49:35 -07:00
Gabe Kangas
ef66e2c3a0 Explicitly set viewer count to 0 if offline. Closes #3830 2024-09-26 13:38:14 -07:00
Florian Greinacher
dcb0ff5f51 fix: update Alpine base image (#3938)
* fix: update Alpine base image

Alpine 3.11 is out of support since nearly a year

* chore: help Renovate detect images in  the Earthfile
2024-09-26 08:21:26 -07:00
Owncast
07b69e1795 Bundle embedded web app 2024-09-26 12:22:20 +00:00
renovate[bot]
e4cf7742d1 fix(deps): update dependency @uiw/react-codemirror to v4.23.3 2024-09-26 09:31:53 +00:00
Owncast
7de49e8605 Bundle embedded web app 2024-09-26 09:30:44 +00:00
renovate[bot]
8a2a0a1249 fix(deps): update dependency @uiw/codemirror-theme-bbedit to v4.23.3 2024-09-26 07:15:58 +00:00
renovate[bot]
2794a5d1d8 chore(deps): update peter-evans/create-or-update-comment digest to 5ddb8ea 2024-09-25 09:52:11 +00:00
Owncast
4e29efe24d Bundle embedded web app 2024-09-24 08:10:01 +00:00
renovate[bot]
c9924cdbab chore(deps): update dependency sass to v1.79.3 2024-09-24 08:04:30 +00:00
Owncast
36e1b678ce Bundle embedded web app 2024-09-23 12:39:30 +00:00
renovate[bot]
6fad3b00fa chore(deps): lock file maintenance 2024-09-23 12:34:15 +00:00
Owncast
e7760103ee Bundle embedded web app 2024-09-23 06:10:08 +00:00
renovate[bot]
63fb720955 fix(deps): update nextjs monorepo to v14.2.13 2024-09-23 03:35:45 +00:00
Owncast
43f4d680c7 Bundle embedded web app 2024-09-23 03:33:37 +00:00
renovate[bot]
2db008ad88 chore(deps): update dependency sass to v1.79.2 2024-09-23 01:35:42 +00:00
Owncast
0f4113b673 Bundle embedded web app 2024-09-22 22:02:28 +00:00
renovate[bot]
a91a5ef9e4 chore(deps): update dependency @types/react to v18.3.8 2024-09-22 19:11:41 +00:00
Owncast
cbd984282b Bundle embedded web app 2024-09-21 03:40:10 +00:00
renovate[bot]
cf61b51de7 chore(deps): update dependency sass to v1.79.1 2024-09-21 02:31:32 +00:00
Owncast
7efea74285 Bundle embedded web app 2024-09-21 02:30:11 +00:00
renovate[bot]
45d1b187b1 fix(deps): update nextjs monorepo to v14.2.12 2024-09-20 21:36:30 +00:00
Owncast
dfac42b6ad Bundle embedded web app 2024-09-20 15:59:41 +00:00
renovate[bot]
0758786790 chore(deps): update dependency @types/react to v18.3.7 2024-09-20 13:54:12 +00:00
Owncast
d72c7639f2 Bundle embedded web app 2024-09-20 09:06:53 +00:00
renovate[bot]
bd68667b00 chore(deps): update typescript-eslint monorepo to v8.6.0 2024-09-20 07:24:29 +00:00
Owncast
983db3c675 Javascript formatting autofixes 2024-09-20 03:18:25 +00:00
Aelly Alwardi
84f0dd07ae Move title up a level to allow mouse hover to show timestamp (#3926)
* Move title up a level to allow mouse hover to show timestamp

* Fix bad commit to resolve 3848

---------

Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-09-19 20:15:49 -07:00
Owncast
ac3cc16250 Bundle embedded web app 2024-09-20 01:20:28 +00:00
renovate[bot]
e9cfa5e408 chore(deps): update dependency eslint to v8.57.1 2024-09-19 21:25:28 +00:00
Owncast
7217eaa289 Bundle embedded web app 2024-09-19 21:24:45 +00:00
renovate[bot]
b30d2de195 chore(deps): update dependency @types/prop-types to v15.7.13 2024-09-19 19:19:01 +00:00
Owncast
b2f341a3e5 Bundle embedded web app 2024-09-19 19:18:09 +00:00
renovate[bot]
30bb93ee77 chore(deps): update dependency babel-loader to v9.2.1 2024-09-19 15:15:26 +00:00
Owncast
4e53acddcf Bundle embedded web app 2024-09-19 12:29:33 +00:00
renovate[bot]
96753349bc chore(deps): update dependency @types/react to v18.3.6 2024-09-19 10:58:28 +00:00
Gabe Kangas
387dcd464d chore(go): go mod tidy 2024-09-18 19:38:11 -07:00
renovate[bot]
3cbc9ca57c chore(deps): update peter-evans/create-or-update-comment digest to 1efb899 2024-09-18 06:52:56 +00:00
renovate[bot]
6b7901c7dc fix(deps): update module golang.org/x/net to v0.29.0 2024-09-18 03:55:46 +00:00
renovate[bot]
41075416f8 fix(deps): update module golang.org/x/mod to v0.21.0 (#3928)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-17 20:52:35 -07:00
renovate[bot]
53a1e5d585 fix(deps): update module golang.org/x/crypto to v0.27.0 (#3927)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-17 20:52:19 -07:00
Gabe Kangas
3050d64909 fix(go): fix type conversion for windows 2024-09-17 19:11:16 -07:00
Gabe Kangas
99fbefd558 Remove fix flag 2024-09-17 16:44:36 -07:00
Gabe Kangas
0bca16deb6 Only write formatted files in CI when not in a PR 2024-09-17 16:39:54 -07:00
Gabe Kangas
5e5f023b8a Only try to commit formated files if running on the owncast/owncast repo 2024-09-17 16:35:36 -07:00
Owncast
02bfc6b3d9 Bundle embedded web app 2024-09-17 21:44:31 +00:00
renovate[bot]
ec975f1614 fix(deps): update fontsource monorepo to v5.1.0 2024-09-17 19:06:21 +00:00
Gabe Kangas
6d768f0b0a fix(go): fix type conversions for FreeBSD and Windows methods 2024-09-17 08:28:01 -07:00
renovate[bot]
968af5f934 chore(deps): update tj-actions/changed-files action to v45 (#3924)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-09-17 08:24:24 -07:00
Gabe Kangas
7a65e6d808 fix(go): int64 -> uint64 for connection limit value 2024-09-17 08:12:09 -07:00
Owncast
6cf93b98e1 Bundle embedded web app 2024-09-17 12:19:07 +00:00
renovate[bot]
bba2f3c694 fix(deps): update dependency @codemirror/lang-css to v6.3.0 2024-09-17 10:21:29 +00:00
Owncast
aa288b910b Bundle embedded web app 2024-09-17 10:19:47 +00:00
renovate[bot]
63f52dc2eb fix(deps): update dependency ua-parser-js to v1.0.39 2024-09-17 08:06:38 +00:00
Owncast
a914603245 Bundle embedded web app 2024-09-17 08:05:33 +00:00
renovate[bot]
83acaf97ec chore(deps): update dependency typescript to v5.6.2 2024-09-17 03:22:00 +00:00
Owncast
487180785c Bundle embedded web app 2024-09-17 03:20:12 +00:00
renovate[bot]
eae90af0dd chore(deps): update dependency chromatic to v11.10.2 2024-09-17 01:09:56 +00:00
Owncast
67ee31842b Bundle embedded web app 2024-09-17 01:08:33 +00:00
renovate[bot]
f66fae7724 fix(deps): update nextjs monorepo to v14.2.11 2024-09-16 22:48:32 +00:00
Owncast
e038c65f8b Bundle embedded web app 2024-09-16 22:47:24 +00:00
renovate[bot]
d4aa54874e fix(deps): update dependency video.js to v8.17.4 2024-09-16 20:46:23 +00:00
Owncast
54f4179282 Bundle embedded web app 2024-09-16 20:45:42 +00:00
renovate[bot]
9fb4b4a749 fix(deps): update dependency react-virtuoso to v4.10.4 2024-09-16 18:54:14 +00:00
Owncast
b59d66cdf2 Bundle embedded web app 2024-09-16 18:53:12 +00:00
renovate[bot]
1660147ef3 fix(deps): update dependency react-hotkeys-hook to v4.5.1 2024-09-16 17:14:05 +00:00
Owncast
a7ca77960f Bundle embedded web app 2024-09-16 17:13:03 +00:00
renovate[bot]
ffb6b38561 fix(deps): update dependency @uiw/react-codemirror to v4.23.2 2024-09-16 13:40:39 +00:00
Owncast
18a73ed5a6 Bundle embedded web app 2024-09-16 13:39:37 +00:00
renovate[bot]
3b03b2467d chore(deps): update dependency knip to v5.30.2 2024-09-16 11:08:18 +00:00
Owncast
6fa2e3aa7a Bundle embedded web app 2024-09-16 11:07:21 +00:00
renovate[bot]
837b30fbbb fix(deps): update dependency @uiw/codemirror-theme-bbedit to v4.23.2 2024-09-16 07:06:04 +00:00
Owncast
82241ffce8 Bundle embedded web app 2024-09-16 07:05:09 +00:00
renovate[bot]
3d848f505f chore(deps): update dependency eslint-plugin-react to v7.36.1 2024-09-16 04:34:59 +00:00
Owncast
e52247e5ef Bundle embedded web app 2024-09-16 04:34:18 +00:00
renovate[bot]
ed91588ba1 chore(deps): update dependency cypress to v13.14.2 2024-09-16 00:56:10 +00:00
Owncast
6572cbab18 Bundle embedded web app 2024-09-16 00:54:36 +00:00
renovate[bot]
56af5ee111 chore(deps): update dependency @types/jest to v29.5.13 2024-09-15 21:00:16 +00:00
Owncast
c61ede6bab Bundle embedded web app 2024-09-15 20:59:43 +00:00
renovate[bot]
f6a1b1b638 chore(deps): update typescript-eslint monorepo to v8 (major) (#3887)
* chore(deps): update typescript-eslint monorepo to v8

* chore(js): fix linter errors

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-09-15 13:51:33 -07:00
Owncast
86ce875da8 Bundle embedded web app 2024-09-15 20:21:26 +00:00
Gabe Kangas
3ccc92c317 chore(tests): disable no-plusplus rule in js linter 2024-09-15 13:15:19 -07:00
Owncast
b1dde41918 Bundle embedded web app 2024-09-15 19:51:13 +00:00
renovate[bot]
095b8c13fb chore(deps): update dependency knip to v5.30.1 (#3899)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-15 12:45:41 -07:00
renovate[bot]
cbc6ba47ee chore(deps): update peter-evans/create-or-update-comment digest to 00b0d20 2024-09-15 16:41:32 +00:00
Gabe Kangas
78c775747b chore(ci): specify the ref to check out 2024-09-15 09:40:52 -07:00
Owncast
065fbd03ad Bundle embedded web app 2024-09-15 16:09:42 +00:00
renovate[bot]
c01d738476 fix(deps): update module github.com/shirou/gopsutil/v3 to v4 (#3888)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-09-15 08:51:10 -07:00
dependabot[bot]
73fdf2f087 Bump body-parser and express in /web (#3922)
Bumps [body-parser](https://github.com/expressjs/body-parser) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together.

Updates `body-parser` from 1.20.2 to 1.20.3
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.2...1.20.3)

Updates `express` from 4.19.2 to 4.21.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.0)

---
updated-dependencies:
- dependency-name: body-parser
  dependency-type: indirect
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-09-15 08:50:37 -07:00
dependabot[bot]
cda13d212f Bump serve-static and express in /web (#3923)
Bumps [serve-static](https://github.com/expressjs/serve-static) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together.

Updates `serve-static` from 1.15.0 to 1.16.2
- [Release notes](https://github.com/expressjs/serve-static/releases)
- [Changelog](https://github.com/expressjs/serve-static/blob/v1.16.2/HISTORY.md)
- [Commits](https://github.com/expressjs/serve-static/compare/v1.15.0...v1.16.2)

Updates `express` from 4.19.2 to 4.21.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.0)

---
updated-dependencies:
- dependency-name: serve-static
  dependency-type: indirect
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-09-15 08:49:22 -07:00
dependabot[bot]
14461c10c6 Bump send and express in /web (#3921)
Bumps [send](https://github.com/pillarjs/send) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together.

Updates `send` from 0.18.0 to 0.19.0
- [Release notes](https://github.com/pillarjs/send/releases)
- [Changelog](https://github.com/pillarjs/send/blob/master/HISTORY.md)
- [Commits](https://github.com/pillarjs/send/compare/0.18.0...0.19.0)

Updates `express` from 4.19.2 to 4.21.0
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.0)

---
updated-dependencies:
- dependency-name: send
  dependency-type: indirect
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-09-15 08:48:19 -07:00
renovate[bot]
0f814d2476 chore(deps): update commitlint monorepo to v19.5.0 (#3907)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-15 08:46:00 -07:00
Owncast
91f77afaf0 Bundle embedded web app 2024-09-15 15:18:15 +00:00
renovate[bot]
c4f4f00d95 chore(deps): update dependency eslint-plugin-react to v7.36.0 (#3914)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-15 08:11:57 -07:00
renovate[bot]
0a5279c92a chore(deps): update dependency sass to v1.78.0 (#3918)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-15 08:11:40 -07:00
dependabot[bot]
8b43f65904 Bump micromatch from 4.0.5 to 4.0.8 in /test/load (#3903)
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.5 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-15 07:09:20 -07:00
Owncast
a16bedab82 Bundle embedded web app 2024-09-15 13:56:45 +00:00
renovate[bot]
41bded3a6b fix(deps): update dependency yaml to v2.5.1 (#3917)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-15 06:45:46 -07:00
renovate[bot]
150d847f7f chore(deps): update dependency @types/node to v20.16.5 (#3916)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-15 06:45:25 -07:00
renovate[bot]
6d5e1173a3 chore(deps): update dependency eslint-plugin-jsx-a11y to v6.10.0 (#3919)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-15 06:45:04 -07:00
Gabe Kangas
9b1c4128d8 chore(js): disable react/no-is-mounted rule 2024-09-15 06:44:39 -07:00
Gabe Kangas
4764e27b68 chore(tests): set older node version to work around babel issue in tests 2024-09-15 06:03:53 -07:00
Gabe Kangas
755308eca8 chore(tests): set specific node version in tests and bump Nextjs version 2024-09-15 05:52:20 -07:00
Gabe Kangas
4a317b799c Revert "chore(deps): update nextjs monorepo to v14.2.7"
This reverts commit 416462bd53.
2024-09-09 01:20:12 -04:00
Gabe Kangas
f75c4af2d8 fix(deps): update nextjs to fix babel issue breaking tests 2024-09-06 20:25:53 -07:00
renovate[bot]
5c252e05f9 chore(deps): update alpine docker tag to v3.20.3 2024-09-06 22:59:41 +00:00
Gabe Kangas
59f200c960 fix(test): run javascript tests as a part of build CI job 2024-09-05 18:13:03 -07:00
Owncast
6c9e4704cc Commit updated Storybook stories 2024-09-05 21:48:43 +00:00
Owncast
f7b61d8d9a Javascript formatting autofixes 2024-09-05 21:47:55 +00:00
zockicookie
39e77dc2cc Markdown-Editor-LineWrapping (#3908)
* Markdown-Editor-LineWrapping

* added lineWrapping to js and css editors

---------

Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-09-05 14:45:09 -07:00
Gabe Kangas
7cdf18de99 fix(ci): add support for pull_request_target 2024-09-05 13:58:47 -07:00
Gabe Kangas
89a33ea4e3 fix(ci): split up checkout steps for push vs. pull request (#3911) 2024-09-05 13:50:59 -07:00
Gabe Kangas
90b70612c9 fix(go): update to resolve linter errors (#3913) 2024-09-05 13:41:10 -07:00
Owncast
208fafaaab Bundle embedded web app 2024-09-05 13:44:28 +00:00
renovate[bot]
8d723340fe fix(deps): update dependency react-hotkeys-hook to v4.5.1 2024-09-05 11:26:21 +00:00
Owncast
5e57bdb926 Commit screenshots 2024-09-05 04:09:17 +00:00
Owncast
46d777a46a Bundle embedded web app 2024-09-04 22:51:23 +00:00
renovate[bot]
bff66a5921 fix(deps): update dependency react-virtuoso to v4.10.2 2024-09-04 18:58:02 +00:00
Owncast
65cd387677 Bundle embedded web app 2024-09-04 18:56:50 +00:00
renovate[bot]
416462bd53 chore(deps): update nextjs monorepo to v14.2.7 2024-09-04 18:50:28 +00:00
Owncast
29a79c6fc8 Bundle embedded web app 2024-09-04 16:30:23 +00:00
renovate[bot]
ebab382da3 chore(deps): update dependency @types/node to v20.16.3 2024-09-04 13:55:51 +00:00
Owncast
58aa45e509 Bundle embedded web app 2024-09-04 13:54:24 +00:00
renovate[bot]
59f09d4260 chore(deps): lock file maintenance 2024-09-04 13:36:26 +00:00
renovate[bot]
d84e8db88c chore(deps): update dependency ts-jest to v29.2.5 2024-09-04 13:32:36 +00:00
renovate[bot]
06a8266c7c chore(deps): update peter-evans/create-or-update-comment digest to 56f64a7 2024-09-04 07:26:28 +00:00
Owncast
af785cccb5 Bundle embedded web app 2024-09-04 07:25:10 +00:00
renovate[bot]
91d63702d3 chore(deps): update dependency @types/react to v18.3.5 2024-09-04 07:16:37 +00:00
Owncast
78aec72c1f Commit screenshots 2024-09-04 04:12:27 +00:00
Owncast
9dff14d5dd Commit screenshots 2024-09-03 04:11:40 +00:00
Owncast
785064ae30 Commit screenshots 2024-09-02 04:12:31 +00:00
Owncast
4475c0caba Commit screenshots 2024-09-01 04:12:36 +00:00
Owncast
aa12e45588 Commit screenshots 2024-08-31 04:11:05 +00:00
Owncast
af130a7c47 Commit screenshots 2024-08-30 04:12:47 +00:00
Owncast
50464f35d0 Commit screenshots 2024-08-29 04:22:32 +00:00
Owncast
5b551fc293 Commit screenshots 2024-08-28 04:12:00 +00:00
renovate[bot]
ff74d6ce95 fix(deps): update module github.com/jellydator/ttlcache/v3 to v3.3.0 2024-08-27 13:00:34 +00:00
Owncast
7b98260176 Commit screenshots 2024-08-27 04:13:30 +00:00
Owncast
dcf4b716c3 Commit screenshots 2024-08-26 04:13:12 +00:00
Owncast
a28fc8411e Commit screenshots 2024-08-25 04:11:34 +00:00
Owncast
b70323fa05 Commit screenshots 2024-08-24 04:11:37 +00:00
Owncast
9c1267b39e Commit screenshots 2024-08-23 04:12:10 +00:00
Owncast
f0f9567f41 Bundle embedded web app 2024-08-22 12:20:14 +00:00
renovate[bot]
00d2ac8cb2 chore(deps): update dependency @types/node to v20.16.1 2024-08-22 06:05:45 +00:00
Owncast
deaa3754e0 Commit screenshots 2024-08-22 04:15:06 +00:00
Owncast
8d9268753b Bundle embedded web app 2024-08-22 01:14:40 +00:00
renovate[bot]
fb9594e322 chore(deps): update dependency @types/sanitize-html to v2.13.0 2024-08-21 22:06:39 +00:00
renovate[bot]
f9df95a9fe fix(deps): update module github.com/aws/aws-sdk-go to v1.55.5 (#3890)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-21 15:04:28 -07:00
Gabe Kangas
04b1b30b7d Update API tests (#3894)
* fix(test): remove done callback in tests

* fix(test): expect correct status code

* fix(test): remove logging of var
2024-08-21 14:44:09 -07:00
Gabe Kangas
545b9983f7 fix(api): return http 405 if federation is diabled 2024-08-21 14:16:55 -07:00
Owncast
7ca17eae84 Bundle embedded web app 2024-08-21 14:07:21 +00:00
renovate[bot]
b8d3da6b8a chore(deps): update dependency @types/node to v20.16.0 2024-08-21 09:40:06 +00:00
renovate[bot]
1fdedf8f5f chore(deps): update peter-evans/create-or-update-comment digest to 2830915 2024-08-21 09:38:51 +00:00
Owncast
c43bdda277 Bundle embedded web app 2024-08-21 07:48:18 +00:00
renovate[bot]
f2b78b9ca4 fix(deps): update dependency @fontsource/poppins to v5.0.15 2024-08-21 05:21:42 +00:00
Owncast
13b017e22e Commit screenshots 2024-08-21 04:12:53 +00:00
Owncast
b4896f139f Commit screenshots 2024-08-20 04:12:08 +00:00
renovate[bot]
dbcd6827b7 chore(deps): update actions/setup-node action to v4 (#3886)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 17:19:41 -07:00
Gabe Kangas
7084ece117 go mod tidy 2024-08-19 17:18:23 -07:00
Gabe Kangas
a8f358b2a5 Bump ffmpeg version + add support for running tests under macOS 2024-08-19 16:22:12 -07:00
Owncast
c73e106c17 Bundle embedded web app 2024-08-19 22:11:13 +00:00
renovate[bot]
cd23d7b573 chore(deps): update dependency @types/node to v20.15.0 2024-08-19 21:37:16 +00:00
renovate[bot]
2433d26445 fix(deps): update module golang.org/x/mod to v0.20.0 (#3878)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 14:36:04 -07:00
renovate[bot]
1bc5be6064 fix(deps): update module golang.org/x/net to v0.28.0 (#3879)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 14:35:32 -07:00
renovate[bot]
224fb776a6 fix(deps): update module github.com/prometheus/client_golang to v1.20.0 (#3876)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 13:59:17 -07:00
Owncast
e1735e0175 Bundle embedded web app 2024-08-19 20:44:59 +00:00
renovate[bot]
4a7876c4f5 fix(deps): update module github.com/shirou/gopsutil/v4 to v4.24.7 (#3875)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 13:09:06 -07:00
dependabot[bot]
ded6d5cb6d Bump elliptic from 6.5.6 to 6.5.7 in /web (#3881)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.6 to 6.5.7.
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.6...v6.5.7)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-19 13:08:44 -07:00
renovate[bot]
5218e78537 fix(deps): update module golang.org/x/time to v0.6.0 (#3880)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-19 12:56:44 -07:00
Gabe Kangas
7c3d4d26df Remove done callback in tests (#3885) 2024-08-19 12:10:46 -07:00
Owncast
b9e22e4d9c Bundle embedded web app 2024-08-19 16:45:44 +00:00
renovate[bot]
8c1c95e2ef fix(deps): update dependency sharp to v0.33.5 2024-08-19 14:11:59 +00:00
Owncast
4dd00fbbcc Commit screenshots 2024-08-19 04:12:22 +00:00
Owncast
ae75d8e1b8 Bundle embedded web app 2024-08-18 22:25:13 +00:00
renovate[bot]
79cdf7299c chore(deps): update dependency mdx-mermaid to v2.0.1 2024-08-18 20:50:47 +00:00
Owncast
10b5c6d252 Bundle embedded web app 2024-08-18 20:50:10 +00:00
renovate[bot]
1b17947835 chore(deps): update dependency stylelint to v16.8.2 2024-08-18 16:20:51 +00:00
Owncast
8e26fec4ad Commit screenshots 2024-08-18 04:13:12 +00:00
Owncast
2532f3c29b Bundle embedded web app 2024-08-18 01:59:29 +00:00
renovate[bot]
235e716d78 chore(deps): update dependency chromatic to v11.7.1 2024-08-17 23:26:01 +00:00
Owncast
f66774e02b Bundle embedded web app 2024-08-17 20:28:04 +00:00
renovate[bot]
b2444a1d88 chore(deps): update dependency cypress to v13.13.3 2024-08-17 15:44:36 +00:00
Owncast
95842639b6 Bundle embedded web app 2024-08-17 11:47:48 +00:00
renovate[bot]
d1e3c3889f fix(deps): update dependency react-virtuoso to v4.10.1 2024-08-17 06:51:20 +00:00
Owncast
0dcf0f5967 Commit screenshots 2024-08-17 04:11:13 +00:00
Owncast
856564e746 Bundle embedded web app 2024-08-16 10:48:10 +00:00
renovate[bot]
af0abab590 fix(deps): update dependency react-virtuoso to v4.10.0 2024-08-16 06:47:15 +00:00
Owncast
4c078d1342 Commit screenshots 2024-08-16 04:12:39 +00:00
Owncast
7f7307a4e7 Commit screenshots 2024-08-15 04:12:34 +00:00
renovate[bot]
8cc0e5399c chore(deps): update peter-evans/create-or-update-comment digest to 0c2659f 2024-08-14 07:08:00 +00:00
Owncast
fb8627953a Commit screenshots 2024-08-14 04:11:39 +00:00
Owncast
b8bbe89a94 Bundle embedded web app 2024-08-13 14:13:42 +00:00
renovate[bot]
628c7ee717 fix(deps): update dependency video.js to v8.17.3 2024-08-13 11:53:06 +00:00
Owncast
0f525e9df7 Bundle embedded web app 2024-08-12 23:14:09 +00:00
renovate[bot]
0328e0aa11 chore(deps): update dependency @types/node to v20.14.15 2024-08-12 19:57:00 +00:00
Owncast
1251ab21a4 Bundle embedded web app 2024-08-12 17:53:29 +00:00
renovate[bot]
1862d9bdca chore(deps): lock file maintenance 2024-08-12 17:47:36 +00:00
Owncast
ae5b59d221 Bundle embedded web app 2024-08-11 11:38:48 +00:00
renovate[bot]
10bace1e7f chore(deps): update dependency knip to v5.27.2 2024-08-11 08:35:01 +00:00
Owncast
d90f5b92ec Bundle embedded web app 2024-08-10 12:26:19 +00:00
renovate[bot]
67d038ecfc chore(deps): update dependency @commitlint/cli to v19.4.0 2024-08-10 10:14:12 +00:00
Owncast
6d0d3be857 Bundle embedded web app 2024-08-10 10:12:26 +00:00
renovate[bot]
1c5c5bba57 chore(deps): update dependency knip to v5.27.1 2024-08-10 06:06:36 +00:00
Owncast
5867400af2 Commit screenshots 2024-08-08 04:16:35 +00:00
renovate[bot]
ad87eef636 chore(deps): update peter-evans/create-or-update-comment digest to 842a986 2024-08-07 08:40:58 +00:00
Owncast
8e25f49cd0 Commit screenshots 2024-08-07 04:12:55 +00:00
Owncast
63d4ddf2d0 Commit screenshots 2024-08-06 04:13:00 +00:00
Owncast
ebd74103cf Bundle embedded web app 2024-08-06 01:27:25 +00:00
renovate[bot]
8f71861db3 fix(deps): update dependency autoprefixer to v10.4.20 2024-08-05 22:05:55 +00:00
Owncast
0e273de0fc Bundle embedded web app 2024-08-05 16:48:11 +00:00
renovate[bot]
867bfa3b8b fix(deps): update dependency video.js to v8.17.2 2024-08-05 13:18:50 +00:00
Owncast
359cf9c02a Bundle embedded web app 2024-08-05 13:17:08 +00:00
renovate[bot]
76e3f9e07a chore(deps): update dependency @types/node to v20.14.14 2024-08-05 10:52:57 +00:00
Owncast
2d241508f5 Commit screenshots 2024-08-05 04:12:37 +00:00
Owncast
5dd2d27fe7 Bundle embedded web app 2024-08-05 00:47:16 +00:00
renovate[bot]
f1a37c1db3 fix(deps): update dependency react-virtuoso to v4.9.0 2024-08-04 22:45:39 +00:00
Owncast
fb8b3d174f Bundle embedded web app 2024-08-04 22:44:25 +00:00
renovate[bot]
6d43f1d6cf chore(deps): update dependency chromatic to v11.7.0 2024-08-04 20:21:46 +00:00
Owncast
d40a9ae6d7 Bundle embedded web app 2024-08-04 20:19:37 +00:00
renovate[bot]
2f04a417c8 chore(deps): update dependency ts-jest to v29.2.4 2024-08-04 15:35:28 +00:00
Owncast
dd3e364a6e Commit screenshots 2024-08-04 10:02:07 +00:00
Owncast
6db7eec41c Bundle embedded web app 2024-08-04 09:54:45 +00:00
renovate[bot]
fc76c3be7c fix(deps): update dependency @fontsource/inter to v5.0.20 2024-08-03 22:11:40 +00:00
Owncast
6edcd5df3d Bundle embedded web app 2024-08-03 22:09:49 +00:00
renovate[bot]
fb1455e468 fix(deps): update dependency react-virtuoso to v4.8.0 2024-08-03 22:02:45 +00:00
Owncast
b1899cc060 Bundle embedded web app 2024-08-03 18:20:36 +00:00
renovate[bot]
b11329564d chore(deps): update dependency cypress to v13.13.2 2024-08-03 16:19:30 +00:00
Owncast
72ee2e5cb3 Bundle embedded web app 2024-08-03 16:18:16 +00:00
renovate[bot]
ddd37ddfe2 chore(deps): update dependency chromatic to v11.6.0 2024-08-03 12:57:55 +00:00
Owncast
964ed53375 Commit screenshots 2024-08-03 04:11:35 +00:00
Owncast
411583e7af Bundle embedded web app 2024-08-02 16:35:16 +00:00
renovate[bot]
6323730a80 chore(deps): update dependency stylelint to v16.8.1 2024-08-02 12:20:56 +00:00
Owncast
f02aca5f94 Bundle embedded web app 2024-08-02 11:35:36 +00:00
renovate[bot]
8370574b14 chore(deps): update dependency @babel/core to v7.25.2 2024-08-02 06:20:05 +00:00
Owncast
05f451723a Commit screenshots 2024-08-02 04:12:24 +00:00
Owncast
ad9dd6140c Bundle embedded web app 2024-08-01 22:35:28 +00:00
renovate[bot]
6dc41de650 chore(deps): update typescript-eslint monorepo to v7.18.0 2024-08-01 18:19:46 +00:00
Owncast
d5ab817379 Bundle embedded web app 2024-08-01 18:17:55 +00:00
renovate[bot]
d787408c5f chore(deps): update dependency stylelint to v16.8.0 2024-08-01 16:21:44 +00:00
Owncast
34085cbd3f Commit screenshots 2024-08-01 04:16:38 +00:00
dependabot[bot]
950f80d7f5 Bump fast-xml-parser, @aws-sdk/credential-providers and @aws-sdk/client-cloudwatch (#3861)
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser), [@aws-sdk/credential-providers](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages/credential-providers) and [@aws-sdk/client-cloudwatch](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-cloudwatch). These dependencies needed to be updated together.

Updates `fast-xml-parser` from 4.2.5 to 4.4.1
- [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases)
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v4.2.5...v4.4.1)

Updates `@aws-sdk/credential-providers` from 3.556.0 to 3.621.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages/credential-providers/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.621.0/packages/credential-providers)

Updates `@aws-sdk/client-cloudwatch` from 3.556.0 to 3.621.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-cloudwatch/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.621.0/clients/client-cloudwatch)

---
updated-dependencies:
- dependency-name: fast-xml-parser
  dependency-type: indirect
- dependency-name: "@aws-sdk/credential-providers"
  dependency-type: indirect
- dependency-name: "@aws-sdk/client-cloudwatch"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-31 15:18:50 -07:00
Owncast
0cd9bc7053 Bundle embedded web app 2024-07-31 16:31:02 +00:00
renovate[bot]
898a6e8744 chore(deps): update dependency @types/node to v20.14.13 2024-07-31 13:20:51 +00:00
Owncast
184c4cd382 Commit screenshots 2024-07-31 04:10:56 +00:00
Owncast
ceebf4d4e1 Commit screenshots 2024-07-30 04:11:10 +00:00
Owncast
b183e5a5ca Bundle embedded web app 2024-07-29 13:04:18 +00:00
renovate[bot]
bc05379321 fix(deps): update dependency video.js to v8.17.1 2024-07-29 11:12:12 +00:00
Owncast
147d217e1a Bundle embedded web app 2024-07-29 11:11:02 +00:00
renovate[bot]
ddd13b74f8 chore(deps): lock file maintenance 2024-07-29 11:05:12 +00:00
Owncast
bcdf45b37f Commit screenshots 2024-07-29 04:11:54 +00:00
Owncast
f14d36b5cc Bundle embedded web app 2024-07-28 10:06:47 +00:00
renovate[bot]
f81d4650fc chore(deps): update dependency @types/markdown-it to v14.1.2 2024-07-28 07:35:44 +00:00
Owncast
312c787ea6 Commit screenshots 2024-07-28 04:10:57 +00:00
Owncast
e0d04a75ca Bundle embedded web app 2024-07-27 18:24:37 +00:00
renovate[bot]
e93f5fb7e9 fix(deps): update dependency yaml to v2.5.0 2024-07-27 17:19:55 +00:00
dependabot[bot]
40c3eb1f75 Bump braces and jest in /test/automated/hls (#3834)
Bumps [braces](https://github.com/micromatch/braces) to 3.0.3 and updates ancestor dependency [jest](https://github.com/jestjs/jest/tree/HEAD/packages/jest). These dependencies need to be updated together.


Updates `braces` from 3.0.2 to 3.0.3
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

Updates `jest` from 26.6.3 to 29.7.0
- [Release notes](https://github.com/jestjs/jest/releases)
- [Changelog](https://github.com/jestjs/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jestjs/jest/commits/v29.7.0/packages/jest)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
- dependency-name: jest
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-27 08:00:42 -07:00
Owncast
aafca27c58 Commit screenshots 2024-07-27 04:21:09 +00:00
Owncast
49c956498d Bundle embedded web app 2024-07-27 00:22:37 +00:00
renovate[bot]
9abbf0dfb7 chore(deps): update dependency knip to v5.27.0 2024-07-27 00:16:17 +00:00
Owncast
d0961df566 Bundle embedded web app 2024-07-26 21:57:46 +00:00
renovate[bot]
acc20111c5 chore(deps): update dependency @types/node to v20.14.12 2024-07-26 18:37:44 +00:00
Owncast
0f62d88793 Commit screenshots 2024-07-26 04:11:38 +00:00
Owncast
22521d9b85 Bundle embedded web app 2024-07-26 03:24:09 +00:00
renovate[bot]
bd6c41aed2 chore(deps): update dependency typescript to v5.5.4 2024-07-25 23:54:45 +00:00
dependabot[bot]
f42f6d9890 Bump requirejs from 2.3.6 to 2.3.7 in /test/load (#3849)
Bumps [requirejs](https://github.com/jrburke/r.js) from 2.3.6 to 2.3.7.
- [Commits](https://github.com/jrburke/r.js/compare/2.3.6...2.3.7)

---
updated-dependencies:
- dependency-name: requirejs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-25 16:52:13 -07:00
Owncast
41e36fbaea Bundle embedded web app 2024-07-25 22:08:02 +00:00
renovate[bot]
8f41dc6466 chore(deps): update typescript-eslint monorepo to v7.17.0 2024-07-25 19:12:26 +00:00
Owncast
77a029f9d8 Commit screenshots 2024-07-25 04:12:03 +00:00
renovate[bot]
36f6360a0f chore(deps): update peter-evans/create-or-update-comment digest to e5db2e4 2024-07-24 08:26:23 +00:00
Owncast
e1895d0ad0 Commit screenshots 2024-07-24 04:11:44 +00:00
Owncast
801baf69e4 Bundle embedded web app 2024-07-23 17:06:37 +00:00
renovate[bot]
30ec3e6813 chore(deps): update dependency eslint-plugin-react to v7.35.0 2024-07-23 14:11:17 +00:00
Owncast
825a2225eb Bundle embedded web app 2024-07-23 14:10:18 +00:00
renovate[bot]
b8fe546312 fix(deps): update dependency react-virtuoso to v4.7.13 2024-07-23 09:13:25 +00:00
renovate[bot]
32e6b050ac chore(deps): update alpine docker tag to v3.20.2 2024-07-23 04:58:43 +00:00
Owncast
7709d7b9a6 Commit screenshots 2024-07-23 04:11:06 +00:00
Owncast
d4f52320ee Bundle embedded web app 2024-07-23 00:02:42 +00:00
renovate[bot]
8693c80095 chore(deps): update dependency chromatic to v11.5.6 2024-07-22 19:12:32 +00:00
Owncast
59bdc92689 Bundle embedded web app 2024-07-22 13:18:48 +00:00
renovate[bot]
4b919a7f2f chore(deps): lock file maintenance 2024-07-22 13:12:38 +00:00
Owncast
314d2c5df2 Commit screenshots 2024-07-22 04:21:20 +00:00
Mahlangu
95d1912a92 change twitter label to x (#3846) 2024-07-21 19:54:21 -07:00
Owncast
4c551a0501 Bundle embedded web app 2024-07-21 19:26:07 +00:00
renovate[bot]
0350d11b11 chore(deps): update dependency ts-jest to v29.2.3 2024-07-21 17:24:19 +00:00
Owncast
c67e22c9f7 Commit screenshots 2024-07-21 04:11:27 +00:00
Owncast
eb80b0cf0e Bundle embedded web app 2024-07-20 16:43:34 +00:00
renovate[bot]
fcd0004ffb chore(deps): update dependency eslint-plugin-prettier to v5.2.1 2024-07-20 12:19:09 +00:00
Owncast
ecc2742f70 Commit screenshots 2024-07-20 04:17:03 +00:00
Owncast
49db2e7a0f Bundle embedded web app 2024-07-20 02:42:55 +00:00
renovate[bot]
fa30e08686 chore(deps): update dependency cypress to v13.13.1 2024-07-19 23:07:21 +00:00
Owncast
5f663d5f1b Bundle embedded web app 2024-07-19 23:05:45 +00:00
renovate[bot]
9898fb45b5 chore(deps): update dependency @types/node to v20.14.11 2024-07-19 20:09:16 +00:00
Logan Fick
3fc127ba34 Adjust CleanupDirectory function to support tmpfs mounts. (#3818)
* Refactored directory cleanup function to remove contents instead of recreating directory.

* Fixed regression by ensuring directory cleanup creates directory if it does not exist.

* Modified errors in directory cleanup function to provide more information.

* Resolved use of deprecated package in directory cleanup function.

* Reformatted directory cleanup function.
2024-07-19 13:07:45 -07:00
Owncast
db1f64ee45 Bundle embedded web app 2024-07-19 19:46:58 +00:00
Manish Giri
4579d9074e Initial change for Social Media validation (#3819)
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-07-19 12:41:22 -07:00
Owncast
56d4ac0c62 Bundle embedded web app 2024-07-19 19:32:57 +00:00
renovate[bot]
24719039a3 chore(deps): update typescript-eslint monorepo to v7.16.1 (#3844)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-19 12:24:40 -07:00
Owncast
a67a1be36c Bundle embedded web app 2024-07-19 18:44:27 +00:00
renovate[bot]
81fb47dca4 chore(deps): update dependency @babel/core to v7.24.9 (#3843)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-19 11:38:33 -07:00
Owncast
490d7f2e42 Bundle embedded web app 2024-07-19 18:09:15 +00:00
Nirajan
468abb272a little color change in dropdown (#3828)
* little color change in dropdown

* small-lint-fix

* lint fix

* it should fix
2024-07-19 11:03:18 -07:00
Owncast
37bcb67f6b Commit screenshots 2024-07-19 04:12:14 +00:00
Owncast
496fced9b3 Commit screenshots 2024-07-18 04:11:23 +00:00
renovate[bot]
ca9428ba6e chore(deps): update peter-evans/create-or-update-comment digest to 3496b39 2024-07-17 08:26:58 +00:00
Owncast
c12e2a5add Commit screenshots 2024-07-17 04:12:19 +00:00
Owncast
b9503cc9f9 Bundle embedded web app 2024-07-16 23:49:33 +00:00
renovate[bot]
fb244578a3 chore(deps): update dependency eslint-plugin-react to v7.34.4 2024-07-16 18:31:13 +00:00
Owncast
c8b9a058c0 Bundle embedded web app 2024-07-16 15:51:30 +00:00
renovate[bot]
54dd1b7dc2 chore(deps): update dependency prettier to v3.3.3 2024-07-16 13:19:56 +00:00
Owncast
d6265b936f Commit screenshots 2024-07-16 04:11:54 +00:00
Owncast
01d70828ca Bundle embedded web app 2024-07-15 15:41:51 +00:00
renovate[bot]
a0e53a7e51 chore(deps): lock file maintenance 2024-07-15 15:35:33 +00:00
renovate[bot]
16de438ced chore(deps): update dependency stylelint to v16.7.0 2024-07-15 13:43:54 +00:00
Owncast
9207d0a36e Bundle embedded web app 2024-07-15 13:42:20 +00:00
renovate[bot]
b63c82955f fix(deps): update dependency react-virtuoso to v4.7.12 2024-07-15 09:51:54 +00:00
Owncast
dcea496ed5 Bundle embedded web app 2024-07-15 00:52:02 +00:00
renovate[bot]
49a1ef5748 chore(deps): update dependency sass to v1.77.8 2024-07-14 21:36:31 +00:00
Owncast
c60936b124 Bundle embedded web app 2024-07-14 18:37:25 +00:00
renovate[bot]
28eb3e0332 chore(deps): update dependency @babel/core to v7.24.8 2024-07-14 15:45:03 +00:00
Owncast
eb08054596 Bundle embedded web app 2024-07-14 09:31:31 +00:00
renovate[bot]
585fb4d35b chore(deps): update dependency knip to v5.25.2 2024-07-14 06:55:57 +00:00
Owncast
0db6869c6b Commit screenshots 2024-07-14 04:12:57 +00:00
Owncast
f6d8fac3c4 Bundle embedded web app 2024-07-14 02:28:55 +00:00
renovate[bot]
1202487efc chore(deps): update dependency npm to v10.8.2 2024-07-14 02:23:00 +00:00
Owncast
1c0363f9d6 Bundle embedded web app 2024-07-13 23:02:54 +00:00
renovate[bot]
f6ef566496 chore(deps): update dependency ts-jest to v29.2.2 2024-07-13 18:17:54 +00:00
Owncast
bb307c36ad Bundle embedded web app 2024-07-13 18:15:59 +00:00
renovate[bot]
0e724a49ee fix(deps): update nextjs monorepo to v14.2.5 2024-07-13 16:23:27 +00:00
Owncast
2263c79bfa Bundle embedded web app 2024-07-13 13:04:15 +00:00
renovate[bot]
2b60bc701e chore(deps): update dependency ts-jest to v29.2.1 2024-07-13 11:34:25 +00:00
Owncast
8304aba714 Commit screenshots 2024-07-13 04:11:35 +00:00
Owncast
188bb7e0b6 Bundle embedded web app 2024-07-13 01:08:06 +00:00
renovate[bot]
fb760df090 chore(deps): update dependency sass to v1.77.7 2024-07-12 22:48:41 +00:00
Owncast
fc1d281d71 Bundle embedded web app 2024-07-12 14:03:21 +00:00
renovate[bot]
d1f333e89c chore(deps): update typescript-eslint monorepo to v7.16.0 2024-07-12 13:57:27 +00:00
Owncast
dcc838a7e2 Bundle embedded web app 2024-07-12 10:12:11 +00:00
renovate[bot]
cce6a2e523 chore(deps): update dependency knip to v5.25.1 2024-07-12 10:06:21 +00:00
Owncast
fca4a701fe Bundle embedded web app 2024-07-12 06:41:23 +00:00
renovate[bot]
3acce5046b chore(deps): update dependency chromatic to v11.5.5 (#3837)
* chore(deps): update dependency chromatic to v11.5.5

* fix: always checkout repo on chromatic workflow

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Gabe Kangas <gabek@real-ity.com>
2024-07-11 23:33:29 -07:00
Owncast
917299db4a Commit screenshots 2024-07-12 04:11:41 +00:00
Owncast
fd6ab358e0 Bundle embedded web app 2024-07-11 21:18:38 +00:00
Owncast
5e621baf23 Commit updated Storybook stories 2024-07-11 21:14:31 +00:00
Gabe Kangas
57652900f3 Remove documentation that is better suited to exist elsewhere 2024-07-11 14:10:57 -07:00
Owncast
1b746120c7 Bundle embedded web app 2024-07-11 20:59:44 +00:00
samwherever
fdcfb34531 Update config-constants.tsx (#3835)
Fix for #3827. Removed extraneous "to" and rewrote sentence for clarity.
2024-07-11 13:54:01 -07:00
dependabot[bot]
1cecdbbf54 Bump @grpc/grpc-js from 1.10.6 to 1.10.11 in /test/load (#3833)
Bumps [@grpc/grpc-js](https://github.com/grpc/grpc-node) from 1.10.6 to 1.10.11.
- [Release notes](https://github.com/grpc/grpc-node/releases)
- [Commits](https://github.com/grpc/grpc-node/compare/@grpc/grpc-js@1.10.6...@grpc/grpc-js@1.10.11)

---
updated-dependencies:
- dependency-name: "@grpc/grpc-js"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-11 12:22:42 -07:00
Gabe Kangas
bf07c977d7 Fix go test workflow 2024-07-11 11:53:35 -07:00
Gabe Kangas
05c54eaad8 Troubleshoot workflow errors 2024-07-11 11:51:51 -07:00
Gabe Kangas
91b176a8e4 Fix checkouts 2024-07-11 11:47:33 -07:00
Gabe Kangas
c4756a9a45 Reduce CI jobs being run when not needed 2024-07-11 11:44:39 -07:00
Owncast
e7d90d441e Bundle embedded web app 2024-07-11 18:39:29 +00:00
Gabe Kangas
fe5fbea623 Add css linter step (#3832)
* Add css linter step

* Add test css file

* Set working directory

* Only run against changed files

* remove test css file

* only run workflow steps if any css files were changed

* commiting a file with issues

* fixing file with linter warnings
2024-07-11 11:33:07 -07:00
Owncast
8e5454ee7e Bundle embedded web app 2024-07-11 18:09:02 +00:00
renovate[bot]
b04ca2ec1a chore(deps): update dependency ts-jest to v29.2.0 2024-07-11 17:50:13 +00:00
Owncast
430c4e20d7 Bundle embedded web app 2024-07-11 17:49:07 +00:00
renovate[bot]
9ff2677ced chore(deps): update dependency knip to v5.24.4 2024-07-11 15:41:48 +00:00
Owncast
79fc96fde8 Commit screenshots 2024-07-11 04:12:20 +00:00
Owncast
c7d2e4d6fe Commit screenshots 2024-07-10 04:12:58 +00:00
Owncast
60a467071e Bundle embedded web app 2024-07-09 21:30:49 +00:00
renovate[bot]
6fb7d81126 fix(deps): update dependency video.js to v8.16.1 2024-07-09 19:03:32 +00:00
Owncast
161a580f69 Bundle embedded web app 2024-07-09 10:20:39 +00:00
renovate[bot]
d1b5923351 chore(deps): update dependency @types/node to v20.14.10 2024-07-09 10:14:30 +00:00
Owncast
ddd828e00f Commit screenshots 2024-07-09 04:11:56 +00:00
renovate[bot]
4c4bc90460 fix(deps): update module mvdan.cc/xurls to v2 (#3815)
* fix(deps): update module mvdan.cc/xurls to v2

* mvdan/xurls 2.x bump fixes (#3823)

* Bump xurls import to v2

* Change Strict to function calls, v2.0.0 change

* Add go.sum entry for xurls/v2

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: mahmed2000 <mahmad2000@protonmail.com>
2024-07-08 11:24:48 -07:00
Owncast
aa8193bb9e Bundle embedded web app 2024-07-08 13:44:05 +00:00
renovate[bot]
d6d2c94ab9 chore(deps): lock file maintenance 2024-07-08 13:38:20 +00:00
Owncast
6d076ef241 Bundle embedded web app 2024-07-08 10:13:07 +00:00
renovate[bot]
634cf552b9 chore(deps): lock file maintenance 2024-07-08 10:07:22 +00:00
Owncast
2141a6ef04 Commit screenshots 2024-07-08 04:21:39 +00:00
Owncast
b41a6f5873 Bundle embedded web app 2024-07-08 02:10:32 +00:00
renovate[bot]
4c548a1fb6 fix(deps): update dependency @fontsource/inter to v5.0.19 2024-07-07 23:16:10 +00:00
Owncast
a14a0af75c Bundle embedded web app 2024-07-07 15:39:52 +00:00
renovate[bot]
09534aab99 fix(deps): update dependency @uiw/react-codemirror to v4.23.0 2024-07-07 15:34:05 +00:00
Owncast
3236cbbdd2 Bundle embedded web app 2024-07-07 13:57:20 +00:00
renovate[bot]
23982b6cdf chore(deps): update dependency knip to v5.24.1 2024-07-07 10:27:48 +00:00
Owncast
315af47c86 Bundle embedded web app 2024-07-07 07:07:35 +00:00
renovate[bot]
a9a626b507 fix(deps): update dependency @uiw/codemirror-theme-bbedit to v4.23.0 2024-07-07 04:42:19 +00:00
Owncast
8a2374309a Commit screenshots 2024-07-07 04:10:57 +00:00
Owncast
37a4c965f9 Bundle embedded web app 2024-07-06 13:58:31 +00:00
renovate[bot]
d8864a1dc0 chore(deps): update dependency knip to v5.24.0 2024-07-06 10:00:29 +00:00
Owncast
1ba486c72c Commit screenshots 2024-07-06 04:12:08 +00:00
Owncast
89f145ac52 Bundle embedded web app 2024-07-05 11:39:44 +00:00
renovate[bot]
8546dc309e chore(deps): update dependency cypress to v13.13.0 2024-07-05 06:14:40 +00:00
Owncast
6cdcbb3005 Commit screenshots 2024-07-05 04:12:01 +00:00
Gabe Kangas
e864562995 chore: update PR template 2024-07-04 19:57:16 -07:00
Owncast
be498069aa Bundle embedded web app 2024-07-05 01:08:14 +00:00
renovate[bot]
c791be2122 chore(deps): update dependency typescript to v5.5.3 2024-07-04 21:17:06 +00:00
835 changed files with 33182 additions and 30986 deletions

1
.earthlyignore Normal file
View File

@@ -0,0 +1 @@
test/automated/api/node_modules

View File

@@ -1,12 +1,17 @@
# Read first
Please include a summary of the change and which issue number is fixed, including relevant motivation and context. Feel free to mark this as a Draft or WIP and write up some details later.
If this is an unsolicited change, or there is no existing issue filed for it, please open a GitHub issue before creating a pull request. This will allow us to discuss the motivations and the big picture behind the change first. It's possible there may be other solutions that should be discussed for what you think should be built. It is possible your change will be rejected unless some discussion around your proposal happens first. While creating this PR means you probably already did the work, it still makes sense to file an issue now, and into the future when you have proposed changes.
If there is no issue filed for this particular change it's highly recommended you file one. While creating this PR means you probably already did the work, in the future make sure an issue is filed beforehand so changes, fixes and features can be discussed ahead of time.
## Description
# Description
Please include a summary of the change and which issue number is fixed, including relevant motivation and context. Feel free to mark this as a Draft or WIP and write up some details later and start a conversation, even if your PR is not ready for review.
Fixes # (issue)
## Screenshot Examples or Logs
If this is a frontend change, please include a screenshot of the change. If this is a backend change, please include relevant logs or examples of the change in action if applicable.
---
Some things you might want to mention:
@@ -16,4 +21,4 @@ Some things you might want to mention:
3. If you're fixing something, what was wrong? How should we stop from having this issue happen again?
4. If this is a new feature or addition to functionality, why should it be added? What are the use cases? Who was asking for this functionality?
If this is an unsolicited change or have no issue associated please do your best to detail the motivations behind this PR, and think about filing an issue to discuss changes ahead of time in the future.
Thank you so much for contributing to Owncast! 🎉

31
.github/stale.yml vendored
View File

@@ -1,31 +0,0 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- backlog
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. If this
was a feature request that others have shown no interest in then it's
likely to not get implemented due to lack of interest. If others also
want to see this feature then now is the time to say something!
Thank you for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
exemptMilestones: true
# Since old PRs are less useful than old issues ping them sooner.
pulls:
daysUntilStale: 30
markComment: >
This pull request has not had any activity in 30 days. Since things move fast it's best
to get PRs merged in. If this PR addresses a previously filed issue that needs to be
resolved please work to get it merged in, or allow somebody else to work on a fix.
This PR will be closed if no further activity occurs. Thank you for your contributions!
exemptLabels:
- bot

View File

@@ -13,7 +13,15 @@ jobs:
name: GitHub actions
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- uses: docker://rhysd/actionlint:latest
with:

View File

@@ -11,7 +11,7 @@ jobs:
issues: write
steps:
- name: Add comment
uses: peter-evans/create-or-update-comment@71ac479718f8aed504782bc920d802da994c05fa
uses: peter-evans/create-or-update-comment@fdb73c443d3a4f66832374f01fb9a713fad84937
with:
issue-number: ${{ github.event.issue.number }}
body: |

View File

@@ -18,23 +18,43 @@ jobs:
with:
concurrent_skipping: 'same_content_newer'
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Get changed files
id: changed-files-yaml
uses: tj-actions/changed-files@v45
with:
files_yaml: |
src:
- '**/*.{go,mod,sum}'
- uses: earthly/actions-setup@v1
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
with:
version: 'latest' # or pin to an specific version, e.g. "v0.6.10"
- name: Earthly version
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
run: earthly --version
- name: Set up QEMU
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
id: qemu
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:latest
platforms: all
- uses: actions/checkout@v4
- name: Run API tests
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
uses: nick-fields/retry@v3
with:
timeout_minutes: 10

View File

@@ -19,12 +19,19 @@ jobs:
with:
concurrent_skipping: 'same_content_newer'
- name: Checkout
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- uses: actions/setup-node@v4
with:
node-version: latest
node-version: '22.9.0'
- name: Cache node modules
uses: actions/cache@v4

View File

@@ -11,8 +11,15 @@ jobs:
if: github.repository == 'owncast/owncast'
steps:
- name: Checkout
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Cache node modules
uses: actions/cache@v4

View File

@@ -27,23 +27,37 @@ jobs:
uses: fkirc/skip-duplicate-actions@v5
with:
concurrent_skipping: 'same_content_newer'
- name: Check out code
if: ${{ github.actor != 'renovate[bot]' && github.actor != 'renovate' }}
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target'
with:
# Make sure the actual branch is checked out when running on pull requests
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
fetch-depth: 0
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Get changed files
id: changed-files-yaml
uses: tj-actions/changed-files@v45
with:
path: 'web'
files_ignore: |
static/**
web/next.config.js
files_yaml: |
src:
- '**/*.{js,ts,tsx,jsx,md}'
- name: Install dependencies
if: ${{ github.actor != 'renovate[bot]' && github.actor != 'renovate' }}
if: ${{ github.actor != 'renovate[bot]' && github.actor != 'renovate' && steps.changed-files-yaml.outputs.src_any_changed == 'true'}}
run: npm install
- name: Publish to Chromatic
if: ${{ github.actor != 'renovate[bot]' && github.actor != 'renovate' }}
if: ${{ github.actor != 'renovate[bot]' && github.actor != 'renovate' && steps.changed-files-yaml.outputs.src_any_changed == 'true' }}
uses: chromaui/action@v11
# Chromatic GitHub Action options
with:
workingDir: web

View File

@@ -36,8 +36,15 @@ jobs:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- uses: actions/setup-go@v5
with:

View File

@@ -19,7 +19,15 @@ jobs:
container:
image: aquasec/trivy
steps:
- uses: actions/checkout@v4
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Check critical issues
run: trivy config --exit-code 1 --severity "HIGH,CRITICAL" ./Dockerfile

View File

@@ -37,10 +37,15 @@ jobs:
image: tonistiigi/binfmt:latest
platforms: all
- name: Checkout repo
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
fetch-depth: 0
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push' || github.event_name == 'schedule'
- name: Build and push
if: ${{ github.event_name == 'schedule' && env.GH_CR_PAT != null }}

53
.github/workflows/css-lint.yaml vendored Normal file
View File

@@ -0,0 +1,53 @@
name: CSS Lint and Formatting
on:
push:
paths:
- 'web/**'
pull_request:
paths:
- 'web/**'
jobs:
css-lint:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./web
steps:
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Get changed files
id: changed-files-yaml
uses: tj-actions/changed-files@v45
with:
path: 'web'
files_yaml: |
src:
- '**/*.{css,scss}'
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '22.9.0'
- name: Install dependencies
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
run: npm install
- name: Run Prettier
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
run: npx prettier --check ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
- name: Run Stylelint
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
run: npx stylelint ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}

View File

@@ -9,8 +9,15 @@ jobs:
name: Generate API Documentation
runs-on: ubuntu-latest
steps:
- name: Checkout repo
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Run redoc on openapi.yaml
run: |

View File

@@ -18,7 +18,16 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Get changed files
id: changed-files-yaml
uses: tj-actions/changed-files@v45
with:
files_yaml: |
src:
- '**/*.{go,mod,sum}'
- uses: actions/cache@v4
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
with:
path: |
~/.cache/go-build
@@ -28,12 +37,14 @@ jobs:
go-test-
- name: Install go
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
uses: actions/setup-go@v5
with:
go-version: '^1'
cache: true
- name: Run tests
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
run: go test ./...
test-bsds:
@@ -49,6 +60,14 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Get changed files
id: changed-files-yaml
uses: tj-actions/changed-files@v45
with:
files_yaml: |
src:
- '**/*.{go,mod,sum}'
- uses: actions/cache@v4
with:
path: |
@@ -59,10 +78,12 @@ jobs:
go-test-
- name: Install go
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
uses: actions/setup-go@v5
with:
go-version: '^1'
cache: true
- name: Run tests
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
run: go test ./...

View File

@@ -24,8 +24,27 @@ jobs:
uses: fkirc/skip-duplicate-actions@v5
with:
concurrent_skipping: 'same_content_newer'
- uses: actions/checkout@v4
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Get changed files
id: changed-files-yaml
uses: tj-actions/changed-files@v45
with:
files_yaml: |
src:
- '**/*.{go,mod,sum}'
- uses: actions/setup-go@v5
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
with:
go-version: '1.22'
cache: true
@@ -43,6 +62,7 @@ jobs:
${{ runner.os }}-
- name: Local stroage
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
uses: nick-fields/retry@v3
with:
timeout_minutes: 10
@@ -50,6 +70,7 @@ jobs:
command: cd test/automated/hls && ./run.sh
- name: S3 storage
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
uses: nick-fields/retry@v3
with:
timeout_minutes: 10

View File

@@ -28,18 +28,25 @@ jobs:
cancel_others: 'true'
skip_after_successful_duplicate: 'true'
- name: Checkout
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
# Make sure the actual branch is checked out when running on pull requests
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
fetch-depth: 0
persist-credentials: true
ref: ${{github.event.pull_request.head.ref}}
- name: Setup Nodejs
uses: actions/setup-node@v4
with:
node-version: '22.9.0'
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Get changed files
id: changed-files-yaml
uses: tj-actions/changed-files@v44
uses: tj-actions/changed-files@v45
with:
path: 'web'
files_ignore: |
@@ -47,7 +54,7 @@ jobs:
web/next.config.js
files_yaml: |
src:
- '**/*.{js,ts,tsx,jsx,css,md}'
- '**/*.{js,ts,tsx,jsx,md}'
- name: Cache node modules
uses: actions/cache@v4
@@ -64,19 +71,27 @@ jobs:
- name: Install Dependencies
run: npm install
- name: Lint
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
- name: Lint and fix
if: steps.changed-files-yaml.outputs.src_any_changed == 'true' && github.event_name != 'pull_request'
run: npx eslint --fix ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
- name: Prettier
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
- name: Lint
if: steps.changed-files-yaml.outputs.src_any_changed == 'true' && github.event_name == 'pull_request'
run: npx eslint ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
- name: Prettier formatting
if: steps.changed-files-yaml.outputs.src_any_changed == 'true' && github.event_name == 'pull_request'
run: npx prettier --write ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
- name: Prettier check
if: steps.changed-files-yaml.outputs.src_any_changed == 'true' && github.event_name != 'pull_request'
run: npx prettier ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}
- name: Debug changed files output
run: 'pwd && echo "Changed files: ${{ steps.changed-files-yaml.outputs.src_all_changed_files }}"'
- name: Commit changes
if: steps.changed-files-yaml.outputs.src_any_changed == 'true'
if: steps.changed-files-yaml.outputs.src_any_changed == 'true' && github.event_name != 'pull_request'
uses: EndBug/add-and-commit@v9
with:
author_name: Owncast
@@ -101,13 +116,20 @@ jobs:
cancel_others: 'true'
skip_after_successful_duplicate: 'true'
- name: Checkout
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
# Make sure the actual branch is checked out when running on pull requests
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
fetch-depth: 0
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Setup Nodejs
uses: actions/setup-node@v4
with:
node-version: '22.9.0'
- name: Cache node modules
uses: actions/cache@v4
@@ -127,6 +149,10 @@ jobs:
- name: Check for unused JS code and dependencies
run: npx knip --include dependencies,files,exports
- name: Run tests
working-directory: ./web
run: npm test
# After any formatting and linting is complete we can run the build
# and bundle step. This both will verify that the build is successful as
# well as commiting the updated static files into the repository for use.
@@ -143,6 +169,11 @@ jobs:
cancel_others: 'true'
skip_after_successful_duplicate: 'true'
- name: Setup Nodejs
uses: actions/setup-node@v4
with:
node-version: '22.9.0'
- name: Cache node modules
uses: actions/cache@v4
env:
@@ -155,13 +186,15 @@ jobs:
${{ runner.os }}-build-
${{ runner.os }}-
- name: Checkout
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
# Make sure the actual branch is checked out when running on pull requests
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
fetch-depth: 0
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Bundle web app (next.js build)
run: build/web/bundleWeb.sh

View File

@@ -1,45 +0,0 @@
name: Javascript Tests
on:
push:
paths:
- 'web/**'
pull_request:
paths:
- 'web/**'
jobs:
jest-run:
runs-on: ubuntu-latest
steps:
- id: skip_check
uses: fkirc/skip-duplicate-actions@v5
with:
concurrent_skipping: 'same_content_newer'
- name: Checkout
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18.9.0
- name: Cache node modules
uses: actions/cache@v4
env:
cache-name: cache-node-modules-javascript-tests
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('web/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Install Dependencies
working-directory: ./web
run: npm install
- name: Run tests
working-directory: ./web
run: npm test

View File

@@ -1,58 +0,0 @@
name: Take nightly screenshots
on:
schedule:
- cron: '0 4 * * *'
env:
BROWSERSTACK_KEY: ${{ secrets.BROWSERSTACK_KEY }}
BROWSERSTACK_PASSWORD: ${{ secrets.BROWSERSTACK_PASSWORD }}
BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
TEST_URL: http://localhost:8080
jobs:
Screenshots:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: '1.22'
cache: true
- name: Cache node modules
uses: actions/cache@v4
env:
cache-name: cache-node-modules-screenshots
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('test/automated/screenshots/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Automate screenshots
uses: nick-fields/retry@v3
with:
timeout_minutes: 10
max_attempts: 4
command: cd test/automated/screenshots && ./run.sh
- name: Commit changes
uses: EndBug/add-and-commit@v9
with:
author_name: Owncast
author_email: owncast@owncast.online
message: 'Commit screenshots'
add: '*.png'
pull: '--rebase --autostash'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Dispatch event to web site
uses: peter-evans/repository-dispatch@v3
with:
token: ${{ secrets.BUNDLE_STORYBOOK_OWNCAST_ONLINE }}
repository: owncast/owncast.github.io
event-type: bundle-components-library

View File

@@ -20,7 +20,15 @@ jobs:
container:
image: docker.io/ubuntu:24.04
steps:
- uses: actions/checkout@v4
- name: Check out pull request code
uses: actions/checkout@v4
if: github.event_name == 'pull_request'
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
- name: Check out repository code
uses: actions/checkout@v4
if: github.event_name == 'push'
- name: Install shellcheck
run: apt update && apt install -y shellcheck bash && shellcheck --version

49
.github/workflows/stale.yml vendored Normal file
View File

@@ -0,0 +1,49 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '30 */2 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
exempt-all-milestones: true
days-before-issue-stale: 60
days-before-issue-close: 67
exempt-issue-labels: backlog,long-lived,bot
exempt-all-issue-milestones: true
stale-issue-message: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. If this
was a feature request that others have shown no interest in, then it's
unlikely to get implemented due to lack of interest. If others also
want to see this feature then now is the time to say something! If this
is a bug report or you have questions that still need answering, please say
something. Feel free to drop by [our chat](https://owncast.rocket.chat) if
you'd like to discuss in real-time with people.
close-issue-message: >
This issue has been automatically closed due to inactivity. This isn't done
to be a jerk, or because the project doesn't care. But simply to keep the focus
on things that are actively discussed, and has continued interest from the community and
Owncast developers. Feel free to to comment if there is still discussion to be
had, or if you plan to work on it. Feel free to drop by [our chat](https://owncast.rocket.chat)
if you'd like to discuss in real-time with people. Thank you for being involved!
days-before-pr-stale: 30
days-before-pr-close: 37
exempt-pr-labels: backlog,long-lived,bot
exempt-all-pr-milestones: true
stale-pr-message: >
This pull request has not had any activity in 30 days. If it has been abandoned
no future actions are necessary, it will be automatically closed. If this is a PR
with no clear plan on how to move forward on it getting into the project, then
further discussion is needed. Now is a good time to discuss if this is still
something that should be worked on. If this PR is idle simply because nobody
has reviewed it, then feel free to ping somebody. However, if this PR is not linked to an
existing issue regarding something that was previously determined to be important, then even
more discussion needs to take place before it can get anywhere.
This PR will be closed if no further activity occurs. Thank you for your contributions!
close-pr-message: 'This PR was closed because it has been stalled for 10 days with no activity.'

62
.github/workflows/translations.yml vendored Normal file
View File

@@ -0,0 +1,62 @@
name: Translation job
on:
schedule:
# Run the workflow every hour
- cron: "0 * * * *"
push:
paths:
- 'web/i18n/en/translation.json'
- 'web/**/*.tsx'
- 'web/**/*.js'
- 'crowdin.yml'
- '.github/workflows/translations.yml'
- 'web/i18next-parser.config.mjs'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
generate-translations:
defaults:
run:
working-directory: ./web
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
if: ${{ github.actor != 'renovate[bot]' && github.actor != 'renovate' }}
run: npm install
- name: Generate translation files
run: npm run translate
- name: Crowdin upload sources/download translations
uses: crowdin/github-action@v1
with:
upload_sources: true
download_translations: true
create_pull_request: true
pull_request_title: 'New Translations'
localization_branch_name: translations
pull_request_base_branch_name: 'develop'
commit_message: 'Updated translations'
config: crowdin.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
- name: Commit changes
uses: EndBug/add-and-commit@v9
with:
author_name: Owncast
author_email: owncast@owncast.online
message: 'Commit updated translations'
add: 'web/i18n/**'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

1
.gitignore vendored
View File

@@ -4,6 +4,7 @@
*.dll
*.so
*.dylib
.DS_Store
# Test binary, built with `go test -c`
*.test

View File

@@ -28,7 +28,6 @@ linters:
- bodyclose
- dupl
- errcheck
- exportloopref
- goconst
- godot
- godox
@@ -49,7 +48,7 @@ linters:
- cyclop
- gosimple
- unused
- exportloopref
- copyloopvar
- gocritic
- forbidigo
- unparam
@@ -67,12 +66,6 @@ linters-settings:
# should ignore tests
skip-tests: true
gosimple:
# Select the Go version to target. The default is '1.13'.
go: '1.22'
# https://staticcheck.io/docs/options#checks
checks: ['all']
gocritic:
disabled-checks:
- ifElseChain

View File

@@ -22,7 +22,7 @@ ENV NAME=${NAME}
RUN CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -ldflags "-extldflags \"-static\" -s -w -X github.com/owncast/owncast/config.GitCommit=$GIT_COMMIT -X github.com/owncast/owncast/config.VersionNumber=$VERSION -X github.com/owncast/owncast/config.BuildPlatform=$NAME" -o owncast .
# Create the image by copying the result of the build into a new alpine image
FROM alpine:3.20.1
FROM alpine:3.21.2
RUN apk update && apk add --no-cache ffmpeg ffmpeg-libs ca-certificates && update-ca-certificates
RUN addgroup -g 101 -S owncast && adduser -u 101 -S owncast -G owncast

View File

@@ -1,6 +1,6 @@
VERSION --new-platform 0.6
FROM --platform=linux/amd64 alpine:3.15.5
FROM --platform=linux/amd64 alpine:3.21.2
ARG version=develop
WORKDIR /build
@@ -87,7 +87,7 @@ build:
RUN upx -t owncast
END
SAVE ARTIFACT owncast owncast
SAVE ARTIFACT --keep-ts owncast owncast
package:
RUN apk add --update --no-cache zip >> /dev/null
@@ -109,7 +109,7 @@ package:
ARG NAME=custom
END
COPY (+build/owncast --platform $TARGETPLATFORM) /build/dist/owncast
COPY --keep-ts (+build/owncast --platform $TARGETPLATFORM) /build/dist/owncast
ENV ZIPNAME owncast-$version-$NAME.zip
RUN cd /build/dist && zip -r -q -8 /build/dist/owncast.zip .
SAVE ARTIFACT --keep-ts /build/dist/owncast.zip owncast.zip AS LOCAL dist/$ZIPNAME
@@ -119,11 +119,11 @@ docker:
# in as space separated strings using the full account/repo:tag format.
# https://github.com/earthly/earthly/blob/aea38448fa9c0064b1b70d61be717ae740689fb9/docs/earthfile/earthfile.md#assigning-multiple-image-names
ARG TARGETPLATFORM
FROM --platform=$TARGETPLATFORM alpine:3.15.5
FROM --platform=$TARGETPLATFORM alpine:3.21.2
RUN apk update && apk add --no-cache ffmpeg ffmpeg-libs ca-certificates unzip && update-ca-certificates
RUN addgroup -g 101 -S owncast && adduser -u 101 -S owncast -G owncast
WORKDIR /app
COPY --platform=$TARGETPLATFORM +package/owncast.zip /app
COPY --keep-ts --platform=$TARGETPLATFORM +package/owncast.zip /app
RUN unzip -x owncast.zip && mkdir data
# temporarily disable until we figure out how to move forward

View File

@@ -1,11 +1,14 @@
package activitypub
import (
"math"
"github.com/owncast/owncast/activitypub/crypto"
"github.com/owncast/owncast/activitypub/inbox"
"github.com/owncast/owncast/activitypub/outbox"
"github.com/owncast/owncast/activitypub/persistence"
"github.com/owncast/owncast/activitypub/workerpool"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
@@ -14,21 +17,35 @@ import (
// Start will initialize and start the federation support.
func Start(datastore *data.Datastore) {
configRepository := configrepository.Get()
persistence.Setup(datastore)
workerpool.InitOutboundWorkerPool()
outboundWorkerPoolSize := getOutboundWorkerPoolSize()
workerpool.InitOutboundWorkerPool(outboundWorkerPoolSize)
inbox.InitInboxWorkerPool()
// Generate the keys for signing federated activity if needed.
if data.GetPrivateKey() == "" {
if configRepository.GetPrivateKey() == "" {
privateKey, publicKey, err := crypto.GenerateKeys()
_ = data.SetPrivateKey(string(privateKey))
_ = data.SetPublicKey(string(publicKey))
_ = configRepository.SetPrivateKey(string(privateKey))
_ = configRepository.SetPublicKey(string(publicKey))
if err != nil {
log.Errorln("Unable to get private key", err)
}
}
}
func getOutboundWorkerPoolSize() int {
var followerCount int64
fc, err := persistence.GetFollowerCount()
if err != nil {
log.Errorln("Unable to get follower count", err)
fc = 50 // Arbitrary fallback value.
}
followerCount = int64(math.Max(float64(fc), 50))
return int(followerCount * 5)
}
// SendLive will send a "Go Live" message to followers.
func SendLive() error {
return outbox.SendLive()

View File

@@ -6,7 +6,7 @@ import (
"github.com/go-fed/activity/streams"
"github.com/go-fed/activity/streams/vocab"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
)
// PrivacyAudience represents the audience for an activity.
@@ -87,8 +87,10 @@ func MakeActivityDirect(activity vocab.ActivityStreamsCreate, toIRI *url.URL) vo
// MakeActivityPublic sets the required properties to make this activity
// seen as public.
func MakeActivityPublic(activity vocab.ActivityStreamsCreate) vocab.ActivityStreamsCreate {
configRepository := configrepository.Get()
// TO the public if we're not treating ActivityPub as "private".
if !data.GetFederationIsPrivate() {
if !configRepository.GetFederationIsPrivate() {
public, _ := url.Parse(PUBLIC)
to := streams.NewActivityStreamsToProperty()
@@ -121,7 +123,9 @@ func MakeUpdateActivity(activityID *url.URL) vocab.ActivityStreamsUpdate {
activity.SetJSONLDId(id)
// CC the public if we're not treating ActivityPub as "private".
if !data.GetFederationIsPrivate() {
configRepository := configrepository.Get()
if !configRepository.GetFederationIsPrivate() {
public, _ := url.Parse(PUBLIC)
cc := streams.NewActivityStreamsCcProperty()
cc.AppendIRI(public)

View File

@@ -9,8 +9,8 @@ import (
"github.com/go-fed/activity/streams"
"github.com/go-fed/activity/streams/vocab"
"github.com/owncast/owncast/activitypub/crypto"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
log "github.com/sirupsen/logrus"
)
@@ -101,11 +101,13 @@ func MakeActorPropertyWithID(idIRI *url.URL) vocab.ActivityStreamsActorProperty
// MakeServiceForAccount will create a new local actor service with the the provided username.
func MakeServiceForAccount(accountName string) vocab.ActivityStreamsService {
configRepository := configrepository.Get()
actorIRI := MakeLocalIRIForAccount(accountName)
person := streams.NewActivityStreamsService()
nameProperty := streams.NewActivityStreamsNameProperty()
nameProperty.AppendXMLSchemaString(data.GetServerName())
nameProperty.AppendXMLSchemaString(configRepository.GetServerName())
person.SetActivityStreamsName(nameProperty)
preferredUsernameProperty := streams.NewActivityStreamsPreferredUsernameProperty()
@@ -119,7 +121,7 @@ func MakeServiceForAccount(accountName string) vocab.ActivityStreamsService {
person.SetActivityStreamsInbox(inboxProp)
needsFollowApprovalProperty := streams.NewActivityStreamsManuallyApprovesFollowersProperty()
needsFollowApprovalProperty.Set(data.GetFederationIsPrivate())
needsFollowApprovalProperty.Set(configRepository.GetFederationIsPrivate())
person.SetActivityStreamsManuallyApprovesFollowers(needsFollowApprovalProperty)
outboxIRI := MakeLocalIRIForResource("/user/" + accountName + "/outbox")
@@ -152,7 +154,7 @@ func MakeServiceForAccount(accountName string) vocab.ActivityStreamsService {
publicKeyProp.AppendW3IDSecurityV1PublicKey(publicKeyType)
person.SetW3IDSecurityV1PublicKey(publicKeyProp)
if t, err := data.GetServerInitTime(); t != nil {
if t, err := configRepository.GetServerInitTime(); t != nil {
publishedDateProp := streams.NewActivityStreamsPublishedProperty()
publishedDateProp.Set(t.Time)
person.SetActivityStreamsPublished(publishedDateProp)
@@ -163,8 +165,8 @@ func MakeServiceForAccount(accountName string) vocab.ActivityStreamsService {
// Profile properties
// Avatar
uniquenessString := data.GetLogoUniquenessString()
userAvatarURLString := data.GetServerURL() + "/logo/external"
uniquenessString := configRepository.GetLogoUniquenessString()
userAvatarURLString := configRepository.GetServerURL() + "/logo/external"
userAvatarURL, err := url.Parse(userAvatarURLString)
userAvatarURL.RawQuery = "uc=" + uniquenessString
if err != nil {
@@ -195,14 +197,14 @@ func MakeServiceForAccount(accountName string) vocab.ActivityStreamsService {
// Profile bio
summaryProperty := streams.NewActivityStreamsSummaryProperty()
summaryProperty.AppendXMLSchemaString(data.GetServerSummary())
summaryProperty.AppendXMLSchemaString(configRepository.GetServerSummary())
person.SetActivityStreamsSummary(summaryProperty)
// Links
if serverURL := data.GetServerURL(); serverURL != "" {
if serverURL := configRepository.GetServerURL(); serverURL != "" {
addMetadataLinkToProfile(person, "Stream", serverURL)
}
for _, link := range data.GetSocialHandles() {
for _, link := range configRepository.GetSocialHandles() {
addMetadataLinkToProfile(person, link.Platform, link.URL)
}
@@ -220,7 +222,7 @@ func MakeServiceForAccount(accountName string) vocab.ActivityStreamsService {
// Tags
tagProp := streams.NewActivityStreamsTagProperty()
for _, tagString := range data.GetServerMetadataTags() {
for _, tagString := range configRepository.GetServerMetadataTags() {
hashtag := MakeHashtag(tagString)
tagProp.AppendTootHashtag(hashtag)
}
@@ -229,7 +231,7 @@ func MakeServiceForAccount(accountName string) vocab.ActivityStreamsService {
// Work around an issue where a single attachment will not serialize
// as an array, so add another item to the mix.
if len(data.GetSocialHandles()) == 1 {
if len(configRepository.GetSocialHandles()) == 1 {
addMetadataLinkToProfile(person, "Owncast", "https://owncast.online")
}

View File

@@ -9,6 +9,7 @@ import (
"github.com/go-fed/activity/streams"
"github.com/go-fed/activity/streams/vocab"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
)
func makeFakeService() vocab.ActivityStreamsService {
@@ -55,9 +56,11 @@ func TestMain(m *testing.M) {
if err != nil {
panic(err)
}
data.SetupPersistence(dbFile.Name())
data.SetServerURL("https://my.cool.site.biz")
configRepository := configrepository.Get()
configRepository.SetServerURL("https://my.cool.site.biz")
m.Run()
}

View File

@@ -8,7 +8,7 @@ import (
"github.com/go-fed/activity/streams"
"github.com/go-fed/activity/streams/vocab"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
log "github.com/sirupsen/logrus"
)
@@ -27,7 +27,9 @@ func MakeRemoteIRIForResource(resourcePath string, host string) (*url.URL, error
// MakeLocalIRIForResource will create an IRI for the local server.
func MakeLocalIRIForResource(resourcePath string) *url.URL {
host := data.GetServerURL()
configRepository := configrepository.Get()
host := configRepository.GetServerURL()
u, err := url.Parse(host)
if err != nil {
log.Errorln("unable to parse local IRI url", host, err)
@@ -41,7 +43,9 @@ func MakeLocalIRIForResource(resourcePath string) *url.URL {
// MakeLocalIRIForAccount will return a full IRI for the local server account username.
func MakeLocalIRIForAccount(account string) *url.URL {
host := data.GetServerURL()
configRepository := configrepository.Get()
host := configRepository.GetServerURL()
u, err := url.Parse(host)
if err != nil {
log.Errorln("unable to parse local IRI account server url", err)
@@ -64,7 +68,9 @@ func Serialize(obj vocab.Type) ([]byte, error) {
// MakeLocalIRIForStreamURL will return a full IRI for the local server stream url.
func MakeLocalIRIForStreamURL() *url.URL {
host := data.GetServerURL()
configRepository := configrepository.Get()
host := configRepository.GetServerURL()
u, err := url.Parse(host)
if err != nil {
log.Errorln("unable to parse local IRI stream url", err)
@@ -78,7 +84,9 @@ func MakeLocalIRIForStreamURL() *url.URL {
// MakeLocalIRIforLogo will return a full IRI for the local server logo.
func MakeLocalIRIforLogo() *url.URL {
host := data.GetServerURL()
configRepository := configrepository.Get()
host := configRepository.GetServerURL()
u, err := url.Parse(host)
if err != nil {
log.Errorln("unable to parse local IRI stream url", err)
@@ -93,7 +101,9 @@ func MakeLocalIRIforLogo() *url.URL {
// GetLogoType will return the rel value for the webfinger response and
// the default static image is of type png.
func GetLogoType() string {
imageFilename := data.GetLogoPath()
configRepository := configrepository.Get()
imageFilename := configRepository.GetLogoPath()
if imageFilename == "" {
return "image/png"
}

View File

@@ -9,12 +9,14 @@ import (
"github.com/owncast/owncast/activitypub/apmodels"
"github.com/owncast/owncast/activitypub/crypto"
"github.com/owncast/owncast/activitypub/requests"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
)
// ActorHandler handles requests for a single actor.
func ActorHandler(w http.ResponseWriter, r *http.Request) {
if !data.GetFederationEnabled() {
configRepository := configrepository.Get()
if !configRepository.GetFederationEnabled() {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
@@ -22,7 +24,7 @@ func ActorHandler(w http.ResponseWriter, r *http.Request) {
pathComponents := strings.Split(r.URL.Path, "/")
accountName := pathComponents[3]
if _, valid := data.GetFederatedInboxMap()[accountName]; !valid {
if _, valid := configRepository.GetFederatedInboxMap()[accountName]; !valid {
// User is not valid
w.WriteHeader(http.StatusNotFound)
return

View File

@@ -16,7 +16,7 @@ import (
"github.com/owncast/owncast/activitypub/crypto"
"github.com/owncast/owncast/activitypub/persistence"
"github.com/owncast/owncast/activitypub/requests"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
)
const (
@@ -145,7 +145,9 @@ func getFollowersPage(page string, r *http.Request) (vocab.ActivityStreamsOrdere
}
func createPageURL(r *http.Request, page *string) (*url.URL, error) {
domain := data.GetServerURL()
configRepository := configrepository.Get()
domain := configRepository.GetServerURL()
if domain == "" {
return nil, errors.New("unable to get server URL")
}

View File

@@ -7,7 +7,7 @@ import (
"github.com/owncast/owncast/activitypub/apmodels"
"github.com/owncast/owncast/activitypub/inbox"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
log "github.com/sirupsen/logrus"
)
@@ -22,7 +22,9 @@ func InboxHandler(w http.ResponseWriter, r *http.Request) {
}
func acceptInboxRequest(w http.ResponseWriter, r *http.Request) {
if !data.GetFederationEnabled() {
configRepository := configrepository.Get()
if !configRepository.GetFederationEnabled() {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
@@ -39,7 +41,7 @@ func acceptInboxRequest(w http.ResponseWriter, r *http.Request) {
// The account this request is for must match the account name we have set
// for federation.
if forLocalAccount != data.GetFederationUsername() {
if forLocalAccount != configRepository.GetFederationUsername() {
w.WriteHeader(http.StatusNotFound)
return
}

View File

@@ -10,7 +10,7 @@ import (
"github.com/owncast/owncast/activitypub/persistence"
"github.com/owncast/owncast/activitypub/requests"
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
log "github.com/sirupsen/logrus"
)
@@ -25,12 +25,14 @@ func NodeInfoController(w http.ResponseWriter, r *http.Request) {
Links []links `json:"links"`
}
if !data.GetFederationEnabled() {
configRepository := configrepository.Get()
if !configRepository.GetFederationEnabled() {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
serverURL := data.GetServerURL()
serverURL := configRepository.GetServerURL()
if serverURL == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -89,7 +91,9 @@ func NodeInfoV2Controller(w http.ResponseWriter, r *http.Request) {
Metadata metadata `json:"metadata"`
}
if !data.GetFederationEnabled() {
configRepository := configrepository.Get()
if !configRepository.GetFederationEnabled() {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
@@ -117,7 +121,7 @@ func NodeInfoV2Controller(w http.ResponseWriter, r *http.Request) {
OpenRegistrations: false,
Protocols: []string{"activitypub"},
Metadata: metadata{
ChatEnabled: !data.GetChatDisabled(),
ChatEnabled: !configRepository.GetChatDisabled(),
},
}
@@ -163,12 +167,14 @@ func XNodeInfo2Controller(w http.ResponseWriter, r *http.Request) {
OpenRegistrations bool `json:"openRegistrations"`
}
if !data.GetFederationEnabled() {
configRepository := configrepository.Get()
if !configRepository.GetFederationEnabled() {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
serverURL := data.GetServerURL()
serverURL := configRepository.GetServerURL()
if serverURL == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -178,7 +184,7 @@ func XNodeInfo2Controller(w http.ResponseWriter, r *http.Request) {
res := &response{
Organization: Organization{
Name: data.GetServerName(),
Name: configRepository.GetServerName(),
Contact: serverURL,
},
Server: Server{
@@ -232,12 +238,14 @@ func InstanceV1Controller(w http.ResponseWriter, r *http.Request) {
InvitesEnabled bool `json:"invites_enabled"`
}
if !data.GetFederationEnabled() {
configRepository := configrepository.Get()
if !configRepository.GetFederationEnabled() {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
serverURL := data.GetServerURL()
serverURL := configRepository.GetServerURL()
if serverURL == "" {
w.WriteHeader(http.StatusNotFound)
return
@@ -254,9 +262,9 @@ func InstanceV1Controller(w http.ResponseWriter, r *http.Request) {
res := response{
URI: serverURL,
Title: data.GetServerName(),
ShortDescription: data.GetServerSummary(),
Description: data.GetServerSummary(),
Title: configRepository.GetServerName(),
ShortDescription: configRepository.GetServerSummary(),
Description: configRepository.GetServerSummary(),
Version: config.GetReleaseString(),
Stats: Stats{
UserCount: 1,
@@ -275,7 +283,9 @@ func InstanceV1Controller(w http.ResponseWriter, r *http.Request) {
}
func writeResponse(payload interface{}, w http.ResponseWriter) error {
accountName := data.GetDefaultFederationUsername()
configRepository := configrepository.Get()
accountName := configRepository.GetDefaultFederationUsername()
actorIRI := apmodels.MakeLocalIRIForAccount(accountName)
publicKey := crypto.GetPublicKey(actorIRI)
@@ -284,7 +294,15 @@ func writeResponse(payload interface{}, w http.ResponseWriter) error {
// HostMetaController points to webfinger.
func HostMetaController(w http.ResponseWriter, r *http.Request) {
serverURL := data.GetServerURL()
configRepository := configrepository.Get()
if !configRepository.GetFederationEnabled() {
w.WriteHeader(http.StatusMethodNotAllowed)
log.Debugln("host meta request rejected! Federation is not enabled")
return
}
serverURL := configRepository.GetServerURL()
if serverURL == "" {
w.WriteHeader(http.StatusNotFound)
return

View File

@@ -8,31 +8,33 @@ import (
"github.com/owncast/owncast/activitypub/crypto"
"github.com/owncast/owncast/activitypub/persistence"
"github.com/owncast/owncast/activitypub/requests"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
log "github.com/sirupsen/logrus"
)
// ObjectHandler handles requests for a single federated ActivityPub object.
func ObjectHandler(w http.ResponseWriter, r *http.Request) {
if !data.GetFederationEnabled() {
configRepository := configrepository.Get()
if !configRepository.GetFederationEnabled() {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
// If private federation mode is enabled do not allow access to objects.
if data.GetFederationIsPrivate() {
if configRepository.GetFederationIsPrivate() {
w.WriteHeader(http.StatusNotFound)
return
}
iri := strings.Join([]string{strings.TrimSuffix(data.GetServerURL(), "/"), r.URL.Path}, "")
iri := strings.Join([]string{strings.TrimSuffix(configRepository.GetServerURL(), "/"), r.URL.Path}, "")
object, _, _, err := persistence.GetObjectByIRI(iri)
if err != nil {
w.WriteHeader(http.StatusNotFound)
return
}
accountName := data.GetDefaultFederationUsername()
accountName := configRepository.GetDefaultFederationUsername()
actorIRI := apmodels.MakeLocalIRIForAccount(accountName)
publicKey := crypto.GetPublicKey(actorIRI)

View File

@@ -6,20 +6,22 @@ import (
"strings"
"github.com/owncast/owncast/activitypub/apmodels"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/utils"
log "github.com/sirupsen/logrus"
)
// WebfingerHandler will handle webfinger lookup requests.
func WebfingerHandler(w http.ResponseWriter, r *http.Request) {
if !data.GetFederationEnabled() {
configRepository := configrepository.Get()
if !configRepository.GetFederationEnabled() {
w.WriteHeader(http.StatusMethodNotAllowed)
log.Debugln("webfinger request rejected! Federation is not enabled")
return
}
instanceHostURL := data.GetServerURL()
instanceHostURL := configRepository.GetServerURL()
if instanceHostURL == "" {
w.WriteHeader(http.StatusNotFound)
log.Warnln("webfinger request rejected! Federation is enabled but server URL is empty.")
@@ -29,7 +31,7 @@ func WebfingerHandler(w http.ResponseWriter, r *http.Request) {
instanceHostString := utils.GetHostnameFromURLString(instanceHostURL)
if instanceHostString == "" {
w.WriteHeader(http.StatusNotFound)
log.Warnln("webfinger request rejected! Federation is enabled but server URL is not set properly. data.GetServerURL(): " + data.GetServerURL())
log.Warnln("webfinger request rejected! Federation is enabled but server URL is not set properly. data.GetServerURL(): " + configRepository.GetServerURL())
return
}
@@ -51,7 +53,7 @@ func WebfingerHandler(w http.ResponseWriter, r *http.Request) {
host := userComponents[1]
user := userComponents[0]
if _, valid := data.GetFederatedInboxMap()[user]; !valid {
if _, valid := configRepository.GetFederatedInboxMap()[user]; !valid {
w.WriteHeader(http.StatusNotFound)
log.Debugln("webfinger request rejected! Invalid user: " + user)
return

View File

@@ -8,13 +8,15 @@ import (
"errors"
"net/url"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
log "github.com/sirupsen/logrus"
)
// GetPublicKey will return the public key for the provided actor.
func GetPublicKey(actorIRI *url.URL) PublicKey {
key := data.GetPublicKey()
configRepository := configrepository.Get()
key := configRepository.GetPublicKey()
idURL, err := url.Parse(actorIRI.String() + "#main-key")
if err != nil {
log.Errorln("unable to parse actor iri string", idURL, err)
@@ -29,7 +31,9 @@ func GetPublicKey(actorIRI *url.URL) PublicKey {
// GetPrivateKey will return the internal server private key.
func GetPrivateKey() *rsa.PrivateKey {
key := data.GetPrivateKey()
configRepository := configrepository.Get()
key := configRepository.GetPrivateKey()
block, _ := pem.Decode([]byte(key))
if block == nil {

View File

@@ -7,17 +7,19 @@ import (
"github.com/owncast/owncast/activitypub/resolvers"
"github.com/owncast/owncast/core/chat"
"github.com/owncast/owncast/core/chat/events"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
)
func handleEngagementActivity(eventType events.EventType, isLiveNotification bool, actorReference vocab.ActivityStreamsActorProperty, action string) error {
configRepository := configrepository.Get()
// Do nothing if displaying engagement actions has been turned off.
if !data.GetFederationShowEngagement() {
if !configRepository.GetFederationShowEngagement() {
return nil
}
// Do nothing if chat is disabled
if data.GetChatDisabled() {
if configRepository.GetChatDisabled() {
return nil
}
@@ -36,11 +38,11 @@ func handleEngagementActivity(eventType events.EventType, isLiveNotification boo
if isLiveNotification && action == events.FediverseEngagementLike {
suffix = "liked that this stream went live."
} else if action == events.FediverseEngagementLike {
suffix = fmt.Sprintf("liked a post from %s.", data.GetServerName())
suffix = fmt.Sprintf("liked a post from %s.", configRepository.GetServerName())
} else if isLiveNotification && action == events.FediverseEngagementRepost {
suffix = "shared this stream with their followers."
} else if action == events.FediverseEngagementRepost {
suffix = fmt.Sprintf("shared a post from %s.", data.GetServerName())
suffix = fmt.Sprintf("shared a post from %s.", configRepository.GetServerName())
} else if action == events.FediverseEngagementFollow {
suffix = "followed this stream."
} else {

View File

@@ -10,13 +10,15 @@ import (
"github.com/owncast/owncast/activitypub/requests"
"github.com/owncast/owncast/activitypub/resolvers"
"github.com/owncast/owncast/core/chat/events"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
)
func handleFollowInboxRequest(c context.Context, activity vocab.ActivityStreamsFollow) error {
configRepository := configrepository.Get()
follow, err := resolvers.MakeFollowRequest(c, activity)
if err != nil {
log.Errorln("unable to create follow inbox request", err)
@@ -27,7 +29,7 @@ func handleFollowInboxRequest(c context.Context, activity vocab.ActivityStreamsF
return fmt.Errorf("unable to handle request")
}
approved := !data.GetFederationIsPrivate()
approved := !configRepository.GetFederationIsPrivate()
followRequest := *follow
@@ -36,7 +38,7 @@ func handleFollowInboxRequest(c context.Context, activity vocab.ActivityStreamsF
return err
}
localAccountName := data.GetDefaultFederationUsername()
localAccountName := configRepository.GetDefaultFederationUsername()
if approved {
if err := requests.SendFollowAccept(follow.Inbox, activity, localAccountName); err != nil {

View File

@@ -15,7 +15,7 @@ import (
"github.com/owncast/owncast/activitypub/apmodels"
"github.com/owncast/owncast/activitypub/persistence"
"github.com/owncast/owncast/activitypub/resolvers"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
log "github.com/sirupsen/logrus"
)
@@ -131,7 +131,9 @@ func Verify(request *http.Request) (bool, error) {
}
func isBlockedDomain(domain string) bool {
blockedDomains := data.GetBlockedFederatedDomains()
configRepository := configrepository.Get()
blockedDomains := configRepository.GetBlockedFederatedDomains()
for _, blockedDomain := range blockedDomains {
if strings.Contains(domain, blockedDomain) {

View File

@@ -9,6 +9,7 @@ import (
"github.com/owncast/owncast/activitypub/apmodels"
"github.com/owncast/owncast/activitypub/persistence"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
)
func makeFakePerson() vocab.ActivityStreamsPerson {
@@ -49,21 +50,24 @@ func makeFakePerson() vocab.ActivityStreamsPerson {
func TestMain(m *testing.M) {
data.SetupPersistence(":memory:")
data.SetServerURL("https://my.cool.site.biz")
configRepository := configrepository.Get()
configRepository.SetServerURL("https://my.cool.site.biz")
persistence.Setup(data.GetDatastore())
m.Run()
}
func TestBlockedDomains(t *testing.T) {
configRepository := configrepository.Get()
person := makeFakePerson()
data.SetBlockedFederatedDomains([]string{"freedom.eagle", "guns.life"})
configRepository.SetBlockedFederatedDomains([]string{"freedom.eagle", "guns.life"})
if len(data.GetBlockedFederatedDomains()) != 2 {
if len(configRepository.GetBlockedFederatedDomains()) != 2 {
t.Error("Blocked federated domains is not set correctly")
}
for _, domain := range data.GetBlockedFederatedDomains() {
for _, domain := range configRepository.GetBlockedFederatedDomains() {
if domain == person.GetJSONLDId().GetIRI().Host {
return
}

View File

@@ -16,10 +16,10 @@ import (
"github.com/owncast/owncast/activitypub/resolvers"
"github.com/owncast/owncast/activitypub/webfinger"
"github.com/owncast/owncast/activitypub/workerpool"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/pkg/errors"
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/utils"
log "github.com/sirupsen/logrus"
"github.com/teris-io/shortid"
@@ -27,7 +27,9 @@ import (
// SendLive will send all followers the message saying you started a live stream.
func SendLive() error {
textContent := data.GetFederationGoLiveMessage()
configRepository := configrepository.Get()
textContent := configRepository.GetFederationGoLiveMessage()
// If the message is empty then do not send it.
if textContent == "" {
@@ -38,7 +40,7 @@ func SendLive() error {
reg := regexp.MustCompile("[^a-zA-Z0-9]+")
tagProp := streams.NewActivityStreamsTagProperty()
for _, tagString := range data.GetServerMetadataTags() {
for _, tagString := range configRepository.GetServerMetadataTags() {
tagWithoutSpecialCharacters := reg.ReplaceAllString(tagString, "")
hashtag := apmodels.MakeHashtag(tagWithoutSpecialCharacters)
tagProp.AppendTootHashtag(hashtag)
@@ -57,15 +59,15 @@ func SendLive() error {
tagsString := strings.Join(tagStrings, " ")
var streamTitle string
if title := data.GetStreamTitle(); title != "" {
if title := configRepository.GetStreamTitle(); title != "" {
streamTitle = fmt.Sprintf("<p>%s</p>", title)
}
textContent = fmt.Sprintf("<p>%s</p>%s<p>%s</p><p><a href=\"%s\">%s</a></p>", textContent, streamTitle, tagsString, data.GetServerURL(), data.GetServerURL())
textContent = fmt.Sprintf("<p>%s</p>%s<p>%s</p><p><a href=\"%s\">%s</a></p>", textContent, streamTitle, tagsString, configRepository.GetServerURL(), configRepository.GetServerURL())
activity, _, note, noteID := createBaseOutboundMessage(textContent)
// To the public if we're not treating ActivityPub as "private".
if !data.GetFederationIsPrivate() {
if !configRepository.GetFederationIsPrivate() {
note = apmodels.MakeNotePublic(note)
activity = apmodels.MakeActivityPublic(activity)
}
@@ -73,7 +75,7 @@ func SendLive() error {
note.SetActivityStreamsTag(tagProp)
// Attach an image along with the Federated message.
previewURL, err := url.Parse(data.GetServerURL())
previewURL, err := url.Parse(configRepository.GetServerURL())
if err == nil {
var imageToAttach string
var mediaType string
@@ -94,7 +96,7 @@ func SendLive() error {
}
}
if data.GetNSFW() {
if configRepository.GetNSFW() {
// Mark content as sensitive.
sensitive := streams.NewActivityStreamsSensitiveProperty()
sensitive.AppendXMLSchemaBoolean(true)
@@ -151,6 +153,8 @@ func SendDirectMessageToAccount(textContent, account string) error {
// SendPublicMessage will send a public message to all followers.
func SendPublicMessage(textContent string) error {
configRepository := configrepository.Get()
originalContent := textContent
textContent = utils.RenderSimpleMarkdown(textContent)
@@ -173,7 +177,7 @@ func SendPublicMessage(textContent string) error {
activity, _, note, noteID := createBaseOutboundMessage(textContent)
note.SetActivityStreamsTag(tagProp)
if !data.GetFederationIsPrivate() {
if !configRepository.GetFederationIsPrivate() {
note = apmodels.MakeNotePublic(note)
activity = apmodels.MakeActivityPublic(activity)
}
@@ -197,7 +201,8 @@ func SendPublicMessage(textContent string) error {
// nolint: unparam
func createBaseOutboundMessage(textContent string) (vocab.ActivityStreamsCreate, string, vocab.ActivityStreamsNote, string) {
localActor := apmodels.MakeLocalIRIForAccount(data.GetDefaultFederationUsername())
configRepository := configrepository.Get()
localActor := apmodels.MakeLocalIRIForAccount(configRepository.GetDefaultFederationUsername())
noteID := shortid.MustGenerate()
noteIRI := apmodels.MakeLocalIRIForResource(noteID)
id := shortid.MustGenerate()
@@ -218,7 +223,8 @@ func getHashtagLinkHTMLFromTagString(baseHashtag string) string {
// SendToFollowers will send an arbitrary payload to all follower inboxes.
func SendToFollowers(payload []byte) error {
localActor := apmodels.MakeLocalIRIForAccount(data.GetDefaultFederationUsername())
configRepository := configrepository.Get()
localActor := apmodels.MakeLocalIRIForAccount(configRepository.GetDefaultFederationUsername())
followers, _, err := persistence.GetFederationFollowers(-1, 0)
if err != nil {
@@ -241,7 +247,8 @@ func SendToFollowers(payload []byte) error {
// SendToUser will send a payload to a single specific inbox.
func SendToUser(inbox *url.URL, payload []byte) error {
localActor := apmodels.MakeLocalIRIForAccount(data.GetDefaultFederationUsername())
configRepository := configrepository.Get()
localActor := apmodels.MakeLocalIRIForAccount(configRepository.GetDefaultFederationUsername())
req, err := requests.CreateSignedRequest(payload, inbox, localActor)
if err != nil {
@@ -255,8 +262,10 @@ func SendToUser(inbox *url.URL, payload []byte) error {
// UpdateFollowersWithAccountUpdates will send an update to all followers alerting of a profile update.
func UpdateFollowersWithAccountUpdates() error {
configRepository := configrepository.Get()
// Don't do anything if federation is disabled.
if !data.GetFederationEnabled() {
if !configRepository.GetFederationEnabled() {
return nil
}
@@ -265,7 +274,7 @@ func UpdateFollowersWithAccountUpdates() error {
activity := apmodels.MakeUpdateActivity(objectID)
actor := streams.NewActivityStreamsPerson()
actorID := apmodels.MakeLocalIRIForAccount(data.GetDefaultFederationUsername())
actorID := apmodels.MakeLocalIRIForAccount(configRepository.GetDefaultFederationUsername())
actorIDProperty := streams.NewJSONLDIdProperty()
actorIDProperty.Set(actorID)
actor.SetJSONLDId(actorIDProperty)

View File

@@ -45,8 +45,8 @@ func GetFederationFollowers(limit int, offset int) ([]models.Follower, int, erro
}
followersResult, err := _datastore.GetQueries().GetFederationFollowersWithOffset(ctx, db.GetFederationFollowersWithOffsetParams{
Limit: int32(limit),
Offset: int32(offset),
Limit: limit,
Offset: offset,
})
if err != nil {
return nil, 0, err

View File

@@ -237,7 +237,7 @@ func GetOutbox(limit int, offset int) (vocab.ActivityStreamsOrderedCollection, e
orderedItems := streams.NewActivityStreamsOrderedItemsProperty()
rows, err := _datastore.GetQueries().GetOutboxWithOffset(
context.Background(),
db.GetOutboxWithOffsetParams{Limit: int32(limit), Offset: int32(offset)},
db.GetOutboxWithOffsetParams{Limit: limit, Offset: offset},
)
if err != nil {
return collection, err
@@ -309,8 +309,8 @@ func SaveInboundFediverseActivity(objectIRI string, actorIRI string, eventType s
func GetInboundActivities(limit int, offset int) ([]models.FederatedActivity, int, error) {
ctx := context.Background()
rows, err := _datastore.GetQueries().GetInboundActivitiesWithOffset(ctx, db.GetInboundActivitiesWithOffsetParams{
Limit: int32(limit),
Offset: int32(offset),
Limit: limit,
Offset: offset,
})
if err != nil {
return nil, 0, err

View File

@@ -10,7 +10,7 @@ import (
"github.com/go-fed/activity/streams/vocab"
"github.com/owncast/owncast/activitypub/apmodels"
"github.com/owncast/owncast/activitypub/crypto"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
)
@@ -47,11 +47,12 @@ func Resolve(c context.Context, data []byte, callbacks ...interface{}) error {
// ResolveIRI will resolve an IRI ahd call the correct callback for the resolved type.
func ResolveIRI(c context.Context, iri string, callbacks ...interface{}) error {
configRepository := configrepository.Get()
log.Debugln("Resolving", iri)
req, _ := http.NewRequest(http.MethodGet, iri, nil)
actor := apmodels.MakeLocalIRIForAccount(data.GetDefaultFederationUsername())
actor := apmodels.MakeLocalIRIForAccount(configRepository.GetDefaultFederationUsername())
if err := crypto.SignRequest(req, nil, actor); err != nil {
return err
}

View File

@@ -2,14 +2,10 @@ package workerpool
import (
"net/http"
"runtime"
log "github.com/sirupsen/logrus"
)
// workerPoolSize defines the number of concurrent HTTP ActivityPub requests.
var workerPoolSize = runtime.GOMAXPROCS(0)
// Job struct bundling the ActivityPub and the payload in one struct.
type Job struct {
request *http.Request
@@ -18,8 +14,8 @@ type Job struct {
var queue chan Job
// InitOutboundWorkerPool starts n go routines that await ActivityPub jobs.
func InitOutboundWorkerPool() {
queue = make(chan Job)
func InitOutboundWorkerPool(workerPoolSize int) {
queue = make(chan Job, workerPoolSize)
// start workers
for i := 1; i <= workerPoolSize; i++ {
@@ -29,8 +25,13 @@ func InitOutboundWorkerPool() {
// AddToOutboundQueue will queue up an outbound http request.
func AddToOutboundQueue(req *http.Request) {
select {
case queue <- Job{req}:
default:
log.Debugln("Outbound ActivityPub job queue is full")
queue <- Job{req} // will block until received by a worker at this point
}
log.Tracef("Queued request for ActivityPub destination %s", req.RequestURI)
queue <- Job{req}
}
func worker(workerID int, queue <-chan Job) {

View File

@@ -11,7 +11,7 @@ import (
"sync"
"time"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/utils"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
@@ -47,6 +47,8 @@ func setupExpiredRequestPruner() {
// StartAuthFlow will begin the IndieAuth flow by generating an auth request.
func StartAuthFlow(authHost, userID, accessToken, displayName string) (*url.URL, error) {
configRepository := configrepository.Get()
// Limit the number of pending requests
if len(pendingAuthRequests) >= maxPendingRequests {
return nil, errors.New("Please try again later. Too many pending requests.")
@@ -68,7 +70,7 @@ func StartAuthFlow(authHost, userID, accessToken, displayName string) (*url.URL,
return nil, errors.New("only servers secured with https are supported")
}
serverURL := data.GetServerURL()
serverURL := configRepository.GetServerURL()
if serverURL == "" {
return nil, errors.New("Owncast server URL must be set when using auth")
}

View File

@@ -4,7 +4,7 @@ import (
"fmt"
"time"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/pkg/errors"
"github.com/teris-io/shortid"
)
@@ -70,6 +70,8 @@ func StartServerAuth(clientID, redirectURI, codeChallenge, state, me string) (*S
// CompleteServerAuth will verify that the values provided in the final step
// of the IndieAuth flow are correct, and return some basic profile info.
func CompleteServerAuth(code, redirectURI, clientID string, codeVerifier string) (*ServerProfileResponse, error) {
configRepository := configrepository.Get()
request, pending := pendingServerAuthRequests[code]
if !pending {
return nil, errors.New("no pending authentication request")
@@ -89,11 +91,11 @@ func CompleteServerAuth(code, redirectURI, clientID string, codeVerifier string)
}
response := ServerProfileResponse{
Me: data.GetServerURL(),
Me: configRepository.GetServerURL(),
Profile: ServerProfile{
Name: data.GetServerName(),
URL: data.GetServerURL(),
Photo: fmt.Sprintf("%s/%s", data.GetServerURL(), data.GetLogoPath()),
Name: configRepository.GetServerName(),
URL: configRepository.GetServerURL(),
Photo: fmt.Sprintf("%s/%s", configRepository.GetServerURL(), configRepository.GetLogoPath()),
},
}

View File

@@ -8,8 +8,8 @@ folderPath="webserver/handlers/generated"
specPath="openapi.yaml"
# validate scripts are installed
if ! command -v swagger-cli &>/dev/null; then
echo "Please install \`swagger-cli\` before running this script"
if ! command -v redocly &>/dev/null; then
echo "Please install \`redocly cli\` before running this script: npm install -g @redocly/cli"
exit 1
fi
@@ -20,7 +20,7 @@ if ! command -v oapi-codegen &>/dev/null; then
fi
# validate schema
swagger-cli validate $specPath
npx redocly lint $specPath
if [ $? -ne 0 ]; then
echo "Open API specification is not valid"
exit 1

View File

@@ -4,7 +4,7 @@ import "path/filepath"
const (
// StaticVersionNumber is the version of Owncast that is used when it's not overwritten via build-time settings.
StaticVersionNumber = "0.2.0" // Shown when you build from develop
StaticVersionNumber = "0.2.2" // Shown when you build from develop
// FfmpegSuggestedVersion is the version of ffmpeg we suggest.
FfmpegSuggestedVersion = "v4.1.5" // Requires the v
// DataDirectory is the directory we save data to.

View File

@@ -7,8 +7,8 @@ import (
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/chat/events"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
log "github.com/sirupsen/logrus"
@@ -23,6 +23,8 @@ var (
func Start(getStatusFunc func() models.Status) error {
setupPersistence()
configRepository := configrepository.Get()
getStatus = getStatusFunc
_server = NewChat()
@@ -35,7 +37,7 @@ func Start(getStatusFunc func() models.Status) error {
Help: "The number of chat messages incremented over time.",
ConstLabels: map[string]string{
"version": config.VersionNumber,
"host": data.GetServerURL(),
"host": configRepository.GetServerURL(),
},
})

View File

@@ -13,8 +13,8 @@ import (
"github.com/gorilla/websocket"
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/chat/events"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/services/geoip"
)
@@ -133,7 +133,9 @@ func (c *Client) readPump() {
}
// Check if this message passes the optional language filter
if data.GetChatSlurFilterEnabled() && !c.messageFilter.Allow(string(message)) {
configRepository := configrepository.Get()
if configRepository.GetChatSlurFilterEnabled() && !c.messageFilter.Allow(string(message)) {
c.sendAction("Sorry, that message contained language that is not allowed in this chat.")
continue
}
@@ -209,9 +211,11 @@ func (c *Client) close() {
}
func (c *Client) passesRateLimit() bool {
configRepository := configrepository.Get()
// If spam rate limiting is disabled, or the user is a moderator, always
// allow the message.
if !data.GetChatSpamProtectionEnabled() || c.User.IsModerator() {
if !configRepository.GetChatSpamProtectionEnabled() || c.User.IsModerator() {
return true
}

View File

@@ -10,14 +10,14 @@ import (
log "github.com/sirupsen/logrus"
)
func setSystemConcurrentConnectionLimit(limit int64) {
func setSystemConcurrentConnectionLimit(limit uint64) {
var rLimit syscall.Rlimit
if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit); err != nil {
log.Fatalln(err)
}
originalLimit := rLimit.Cur
rLimit.Cur = uint64(limit)
rLimit.Cur = limit
if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit); err != nil {
log.Fatalln(err)
}

View File

@@ -9,7 +9,7 @@ import (
log "github.com/sirupsen/logrus"
)
func setSystemConcurrentConnectionLimit(limit int64) {
func setSystemConcurrentConnectionLimit(limit uint64) {
var rLimit syscall.Rlimit
if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit); err != nil {
log.Fatalln(err)

View File

@@ -3,4 +3,4 @@
package chat
func setSystemConcurrentConnectionLimit(limit int64) {}
func setSystemConcurrentConnectionLimit(limit uint64) {}

View File

@@ -8,8 +8,8 @@ import (
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/chat/events"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/core/webhooks"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/persistence/userrepository"
"github.com/owncast/owncast/utils"
log "github.com/sirupsen/logrus"
@@ -22,10 +22,12 @@ func (s *Server) userNameChanged(eventData chatClientEvent) {
return
}
configRepository := configrepository.Get()
proposedUsername := receivedEvent.NewName
// Check if name is on the blocklist
blocklist := data.GetForbiddenUsernameList()
blocklist := configRepository.GetForbiddenUsernameList()
// Names have a max length
proposedUsername = utils.MakeSafeStringOfLength(proposedUsername, config.MaxChatDisplayNameLength)

View File

@@ -17,7 +17,7 @@ import (
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/renderer/html"
"github.com/yuin/goldmark/util"
"mvdan.cc/xurls"
"mvdan.cc/xurls/v2"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
@@ -220,7 +220,7 @@ func RenderMarkdown(raw string) string {
[]byte("https:"),
}),
extension.WithLinkifyURLRegexp(
xurls.Strict,
xurls.Strict(),
),
),
emoji.New(

View File

@@ -1,6 +1,8 @@
package events
import "github.com/owncast/owncast/core/data"
import (
"github.com/owncast/owncast/persistence/configrepository"
)
// FediverseEngagementEvent is a message displayed in chat on representing an action on the Fediverse.
type FediverseEngagementEvent struct {
@@ -13,6 +15,8 @@ type FediverseEngagementEvent struct {
// GetBroadcastPayload will return the object to send to all chat users.
func (e *FediverseEngagementEvent) GetBroadcastPayload() EventPayload {
configRepository := configrepository.Get()
return EventPayload{
"id": e.ID,
"timestamp": e.Timestamp,
@@ -22,7 +26,7 @@ func (e *FediverseEngagementEvent) GetBroadcastPayload() EventPayload {
"title": e.UserAccountName,
"link": e.Link,
"user": EventPayload{
"displayName": data.GetServerName(),
"displayName": configRepository.GetServerName(),
},
}
}

View File

@@ -1,6 +1,8 @@
package events
import "github.com/owncast/owncast/core/data"
import (
"github.com/owncast/owncast/persistence/configrepository"
)
// SystemMessageEvent is a message displayed in chat on behalf of the server.
type SystemMessageEvent struct {
@@ -10,13 +12,15 @@ type SystemMessageEvent struct {
// GetBroadcastPayload will return the object to send to all chat users.
func (e *SystemMessageEvent) GetBroadcastPayload() EventPayload {
configRepository := configrepository.Get()
return EventPayload{
"id": e.ID,
"timestamp": e.Timestamp,
"body": e.Body,
"type": SystemMessageSent,
"user": EventPayload{
"displayName": data.GetServerName(),
"displayName": configRepository.GetServerName(),
},
}
}

View File

@@ -9,6 +9,7 @@ import (
"github.com/owncast/owncast/core/chat/events"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/authrepository"
"github.com/owncast/owncast/persistence/tables"
log "github.com/sirupsen/logrus"
@@ -24,7 +25,9 @@ const (
func setupPersistence() {
_datastore = data.GetDatastore()
tables.CreateMessagesTable(_datastore.DB)
data.CreateBanIPTable(_datastore.DB)
authRepository := authrepository.Get()
authRepository.CreateBanIPTable(_datastore.DB)
chatDataPruner := time.NewTicker(5 * time.Minute)
go func() {

View File

@@ -13,9 +13,10 @@ import (
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/chat/events"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/core/webhooks"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/authrepository"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/persistence/userrepository"
"github.com/owncast/owncast/services/geoip"
"github.com/owncast/owncast/utils"
@@ -41,7 +42,7 @@ type Server struct {
// a map of user IDs and timers that fire for chat part messages.
userPartedTimers map[string]*time.Ticker
seq uint
maxSocketConnectionLimit int64
maxSocketConnectionLimit uint64
mu sync.RWMutex
}
@@ -95,7 +96,9 @@ func (s *Server) Addclient(conn *websocket.Conn, user *models.User, accessToken
ConnectedAt: time.Now(),
}
shouldSendJoinedMessages := data.GetChatJoinPartMessagesEnabled()
configRepository := configrepository.Get()
shouldSendJoinedMessages := configRepository.GetChatJoinPartMessagesEnabled()
// If there are existing clients connected for this user do not send
// a user joined message. Do not put this under a mutex, as
@@ -186,8 +189,10 @@ func (s *Server) sendUserPartedMessage(c *Client) {
userPartEvent.User = c.User
userPartEvent.ClientID = c.Id
configRepository := configrepository.Get()
// If part messages are disabled.
if data.GetChatJoinPartMessagesEnabled() {
if configRepository.GetChatJoinPartMessagesEnabled() {
if err := s.Broadcast(userPartEvent.GetBroadcastPayload()); err != nil {
log.Errorln("error sending chat part message", err)
}
@@ -198,14 +203,17 @@ func (s *Server) sendUserPartedMessage(c *Client) {
// HandleClientConnection is fired when a single client connects to the websocket.
func (s *Server) HandleClientConnection(w http.ResponseWriter, r *http.Request) {
if data.GetChatDisabled() {
configRepository := configrepository.Get()
authRepository := authrepository.Get()
if configRepository.GetChatDisabled() {
_, _ = w.Write([]byte(events.ChatDisabled))
return
}
ipAddress := utils.GetIPAddressFromRequest(r)
// Check if this client's IP address is banned. If so send a rejection.
if blocked, err := data.IsIPAddressBanned(ipAddress); blocked {
if blocked, err := authRepository.IsIPAddressBanned(ipAddress); blocked {
log.Debugln("Client ip address has been blocked. Rejecting.")
w.WriteHeader(http.StatusForbidden)
@@ -215,7 +223,7 @@ func (s *Server) HandleClientConnection(w http.ResponseWriter, r *http.Request)
}
// Limit concurrent chat connections
if int64(len(s.clients)) >= s.maxSocketConnectionLimit {
if uint64(len(s.clients)) >= s.maxSocketConnectionLimit {
log.Warnln("rejecting incoming client connection as it exceeds the max client count of", s.maxSocketConnectionLimit)
_, _ = w.Write([]byte(events.ErrorMaxConnectionsExceeded))
return
@@ -377,12 +385,14 @@ func SendActionToUser(userID string, text string) error {
}
func (s *Server) eventReceived(event chatClientEvent) {
configRepository := configrepository.Get()
c := event.client
u := c.User
// If established chat user only mode is enabled and the user is not old
// enough then reject this event and send them an informative message.
if u != nil && data.GetChatEstbalishedUsersOnlyMode() && time.Since(event.client.User.CreatedAt) < config.GetDefaults().ChatEstablishedUserModeTimeDuration && !u.IsModerator() {
if u != nil && configRepository.GetChatEstbalishedUsersOnlyMode() && time.Since(event.client.User.CreatedAt) < config.GetDefaults().ChatEstablishedUserModeTimeDuration && !u.IsModerator() {
s.sendActionToClient(c, "You have not been an established chat participant long enough to take part in chat. Please enjoy the stream and try again later.")
return
}
@@ -409,10 +419,12 @@ func (s *Server) eventReceived(event chatClientEvent) {
}
func (s *Server) sendWelcomeMessageToClient(c *Client) {
configRepository := configrepository.Get()
// Add an artificial delay so people notice this message come in.
time.Sleep(7 * time.Second)
welcomeMessage := utils.RenderSimpleMarkdown(data.GetServerWelcomeMessage())
welcomeMessage := utils.RenderSimpleMarkdown(configRepository.GetServerWelcomeMessage())
if welcomeMessage != "" {
s.sendSystemMessageToClient(c, welcomeMessage)
@@ -420,7 +432,9 @@ func (s *Server) sendWelcomeMessageToClient(c *Client) {
}
func (s *Server) sendAllWelcomeMessage() {
welcomeMessage := utils.RenderSimpleMarkdown(data.GetServerWelcomeMessage())
configRepository := configrepository.Get()
welcomeMessage := utils.RenderSimpleMarkdown(configRepository.GetServerWelcomeMessage())
if welcomeMessage != "" {
clientMessage := events.SystemMessageEvent{

View File

@@ -9,14 +9,14 @@ import (
log "github.com/sirupsen/logrus"
)
func getMaximumConcurrentConnectionLimit() int64 {
func getMaximumConcurrentConnectionLimit() uint64 {
var rLimit syscall.Rlimit
if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit); err != nil {
log.Fatalln(err)
}
// Return the limit to 70% of max so the machine doesn't die even if it's maxed out for some reason.
proposedLimit := int64(float32(rLimit.Max) * 0.7)
proposedLimit := uint64(float32(rLimit.Max) * 0.7)
return proposedLimit
}

View File

@@ -3,7 +3,7 @@
package chat
func getMaximumConcurrentConnectionLimit() int64 {
func getMaximumConcurrentConnectionLimit() uint64 {
// The maximum limit I can find for windows is 16,777,216
// (essentially unlimited, but add the 0.7 multiplier as well to be
// consistent with other systems)

View File

@@ -16,6 +16,7 @@ import (
"github.com/owncast/owncast/core/webhooks"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/notifications"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/persistence/tables"
"github.com/owncast/owncast/utils"
"github.com/owncast/owncast/yp"
@@ -34,10 +35,10 @@ var (
// Start starts up the core processing.
func Start() error {
resetDirectories()
configRepository := configrepository.Get()
// configRepository.PopulateDefaults()
data.PopulateDefaults()
if err := data.VerifySettings(); err != nil {
if err := configRepository.VerifySettings(); err != nil {
log.Error(err)
return err
}
@@ -75,7 +76,7 @@ func Start() error {
// start the rtmp server
go rtmp.Start(setStreamAsConnected, setBroadcaster)
rtmpPort := data.GetRTMPPortNumber()
rtmpPort := configRepository.GetRTMPPortNumber()
if rtmpPort != 1935 {
log.Infof("RTMP is accepting inbound streams on port %d.", rtmpPort)
}
@@ -113,7 +114,8 @@ func transitionToOfflineVideoStreamContent() {
go _transcoder.Start(false)
// Copy the logo to be the thumbnail
logo := data.GetLogoPath()
configRepository := configrepository.Get()
logo := configRepository.GetLogoPath()
dst := filepath.Join(config.TempDir, "thumbnail.jpg")
if err = utils.Copy(filepath.Join("data", logo), dst); err != nil {
log.Warnln(err)
@@ -130,7 +132,8 @@ func resetDirectories() {
utils.CleanupDirectory(config.HLSStoragePath)
// Remove the previous thumbnail
logo := data.GetLogoPath()
configRepository := configrepository.Get()
logo := configRepository.GetLogoPath()
if utils.DoesFileExists(logo) {
err := utils.Copy(path.Join("data", logo), filepath.Join(config.DataDirectory, "thumbnail.jpg"))
if err != nil {

View File

@@ -1,13 +0,0 @@
package data
// GetFederatedInboxMap is a mapping between account names and their outbox.
func GetFederatedInboxMap() map[string]string {
return map[string]string{
GetDefaultFederationUsername(): GetDefaultFederationUsername(),
}
}
// GetDefaultFederationUsername will return the username used for sending federation activities.
func GetDefaultFederationUsername() string {
return GetFederationUsername()
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,23 +0,0 @@
package data
// GetPublicKey will return the public key.
func GetPublicKey() string {
value, _ := _datastore.GetString(publicKeyKey)
return value
}
// SetPublicKey will save the public key.
func SetPublicKey(key string) error {
return _datastore.SetString(publicKeyKey, key)
}
// GetPrivateKey will return the private key.
func GetPrivateKey() string {
value, _ := _datastore.GetString(privateKeyKey)
return value
}
// SetPrivateKey will save the private key.
func SetPrivateKey(key string) error {
return _datastore.SetString(privateKeyKey, key)
}

View File

@@ -4,6 +4,8 @@ import (
"fmt"
"os"
"testing"
"github.com/owncast/owncast/models"
)
func TestMain(m *testing.M) {
@@ -89,7 +91,7 @@ func TestCustomType(t *testing.T) {
}
// Save config entry to the database
if err := _datastore.Save(ConfigEntry{&testStruct, testKey}); err != nil {
if err := _datastore.Save(models.ConfigEntry{&testStruct, testKey}); err != nil {
t.Error(err)
}
@@ -101,7 +103,7 @@ func TestCustomType(t *testing.T) {
// Get a typed struct out of it
var testResult TestStruct
if err := entryResult.getObject(&testResult); err != nil {
if err := entryResult.GetObject(&testResult); err != nil {
t.Error(err)
}
@@ -121,7 +123,7 @@ func TestStringMap(t *testing.T) {
}
// Save config entry to the database
if err := _datastore.Save(ConfigEntry{&testMap, testKey}); err != nil {
if err := _datastore.Save(models.ConfigEntry{Value: &testMap, Key: testKey}); err != nil {
t.Error(err)
}
@@ -131,7 +133,7 @@ func TestStringMap(t *testing.T) {
t.Error(err)
}
testResult, err := entryResult.getStringMap()
testResult, err := entryResult.GetStringMap()
if err != nil {
t.Error(err)
}

View File

@@ -5,12 +5,11 @@ import (
"database/sql"
"encoding/gob"
"sync"
"time"
// sqlite requires a blank import.
_ "github.com/mattn/go-sqlite3"
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/db"
"github.com/owncast/owncast/models"
log "github.com/sirupsen/logrus"
)
@@ -21,7 +20,8 @@ type Datastore struct {
DbLock *sync.Mutex
}
func (ds *Datastore) warmCache() {
// WarmCache pre-caches all configuration values in memory.
func (ds *Datastore) WarmCache() {
log.Traceln("Warming config value cache")
res, err := ds.DB.Query("SELECT key, value FROM datastore")
@@ -46,10 +46,10 @@ func (ds *Datastore) GetQueries() *db.Queries {
}
// Get will query the database for the key and return the entry.
func (ds *Datastore) Get(key string) (ConfigEntry, error) {
func (ds *Datastore) Get(key string) (models.ConfigEntry, error) {
cachedValue, err := ds.GetCachedValue(key)
if err == nil {
return ConfigEntry{
return models.ConfigEntry{
Key: key,
Value: cachedValue,
}, nil
@@ -60,10 +60,10 @@ func (ds *Datastore) Get(key string) (ConfigEntry, error) {
row := ds.DB.QueryRow("SELECT key, value FROM datastore WHERE key = ? LIMIT 1", key)
if err := row.Scan(&resultKey, &resultValue); err != nil {
return ConfigEntry{}, err
return models.ConfigEntry{}, err
}
result := ConfigEntry{
result := models.ConfigEntry{
Key: resultKey,
Value: resultValue,
}
@@ -73,7 +73,7 @@ func (ds *Datastore) Get(key string) (ConfigEntry, error) {
}
// Save will save the ConfigEntry to the database.
func (ds *Datastore) Save(e ConfigEntry) error {
func (ds *Datastore) Save(e models.ConfigEntry) error {
ds.DbLock.Lock()
defer ds.DbLock.Unlock()
@@ -93,7 +93,6 @@ func (ds *Datastore) Save(e ConfigEntry) error {
return err
}
_, err = stmt.Exec(e.Key, dataGob.Bytes())
if err != nil {
return err
}
@@ -121,26 +120,6 @@ func (ds *Datastore) Setup() {
);`
ds.MustExec(createTableSQL)
if !HasPopulatedDefaults() {
PopulateDefaults()
}
if !hasPopulatedFederationDefaults() {
if err := SetFederationGoLiveMessage(config.GetDefaults().FederationGoLiveMessage); err != nil {
log.Errorln(err)
}
if err := _datastore.SetBool("HAS_POPULATED_FEDERATION_DEFAULTS", true); err != nil {
log.Errorln(err)
}
}
// Set the server initialization date if needed.
if hasSetInitDate, _ := GetServerInitTime(); hasSetInitDate == nil || !hasSetInitDate.Valid {
_ = SetServerInitTime(time.Now())
}
migrateDatastoreValues(_datastore)
}
// Reset will delete all config entries in the datastore and start over.
@@ -156,8 +135,6 @@ func (ds *Datastore) Reset() {
if _, err = stmt.Exec(); err != nil {
log.Fatalln(err)
}
PopulateDefaults()
}
// GetDatastore returns the shared instance of the owncast datastore.

View File

@@ -1,54 +0,0 @@
package data
import (
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/models"
)
// HasPopulatedDefaults will determine if the defaults have been inserted into the database.
func HasPopulatedDefaults() bool {
hasPopulated, err := _datastore.GetBool("HAS_POPULATED_DEFAULTS")
if err != nil {
return false
}
return hasPopulated
}
func hasPopulatedFederationDefaults() bool {
hasPopulated, err := _datastore.GetBool("HAS_POPULATED_FEDERATION_DEFAULTS")
if err != nil {
return false
}
return hasPopulated
}
// PopulateDefaults will set default values in the database.
func PopulateDefaults() {
_datastore.warmCache()
defaults := config.GetDefaults()
if HasPopulatedDefaults() {
return
}
_ = SetAdminPassword(defaults.AdminPassword)
_ = SetStreamKeys(defaults.StreamKeys)
_ = SetHTTPPortNumber(float64(defaults.WebServerPort))
_ = SetRTMPPortNumber(float64(defaults.RTMPServerPort))
_ = SetLogoPath(defaults.Logo)
_ = SetServerMetadataTags([]string{"owncast", "streaming"})
_ = SetServerSummary(defaults.Summary)
_ = SetServerWelcomeMessage("")
_ = SetServerName(defaults.Name)
_ = SetExtraPageBodyContent(defaults.PageBodyContent)
_ = SetFederationGoLiveMessage(defaults.FederationGoLiveMessage)
_ = SetSocialHandles([]models.SocialHandle{
{
Platform: "github",
URL: "https://github.com/owncast/owncast",
},
})
_ = _datastore.SetBool("HAS_POPULATED_DEFAULTS", true)
}

View File

@@ -1,14 +1,5 @@
package data
import (
"context"
"database/sql"
"github.com/owncast/owncast/db"
"github.com/owncast/owncast/models"
log "github.com/sirupsen/logrus"
)
// GetMessagesCount will return the number of messages in the database.
func GetMessagesCount() int64 {
query := `SELECT COUNT(*) FROM messages`
@@ -25,58 +16,3 @@ func GetMessagesCount() int64 {
}
return count
}
// CreateBanIPTable will create the IP ban table if needed.
func CreateBanIPTable(db *sql.DB) {
createTableSQL := ` CREATE TABLE IF NOT EXISTS ip_bans (
"ip_address" TEXT NOT NULL PRIMARY KEY,
"notes" TEXT,
"created_at" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);`
stmt, err := db.Prepare(createTableSQL)
if err != nil {
log.Fatal("error creating ip ban table", err)
}
defer stmt.Close()
if _, err := stmt.Exec(); err != nil {
log.Fatal("error creating ip ban table", err)
}
}
// BanIPAddress will persist a new IP address ban to the datastore.
func BanIPAddress(address, note string) error {
return _datastore.GetQueries().BanIPAddress(context.Background(), db.BanIPAddressParams{
IpAddress: address,
Notes: sql.NullString{String: note, Valid: true},
})
}
// IsIPAddressBanned will return if an IP address has been previously blocked.
func IsIPAddressBanned(address string) (bool, error) {
blocked, error := _datastore.GetQueries().IsIPAddressBlocked(context.Background(), address)
return blocked > 0, error
}
// GetIPAddressBans will return all the banned IP addresses.
func GetIPAddressBans() ([]models.IPAddress, error) {
result, err := _datastore.GetQueries().GetIPAddressBans(context.Background())
if err != nil {
return nil, err
}
response := []models.IPAddress{}
for _, ip := range result {
response = append(response, models.IPAddress{
IPAddress: ip.IpAddress,
Notes: ip.Notes.String,
CreatedAt: ip.CreatedAt.Time,
})
}
return response, err
}
// RemoveIPAddressBan will remove a previously banned IP address.
func RemoveIPAddressBan(address string) error {
return _datastore.GetQueries().RemoveIPAddressBan(context.Background(), address)
}

View File

@@ -1,17 +1,19 @@
package data
import "github.com/owncast/owncast/models"
// GetStringSlice will return the string slice value for a key.
func (ds *Datastore) GetStringSlice(key string) ([]string, error) {
configEntry, err := ds.Get(key)
if err != nil {
return []string{}, err
}
return configEntry.getStringSlice()
return configEntry.GetStringSlice()
}
// SetStringSlice will set the string slice value for a key.
func (ds *Datastore) SetStringSlice(key string, value []string) error {
configEntry := ConfigEntry{value, key}
configEntry := models.ConfigEntry{Value: value, Key: key}
return ds.Save(configEntry)
}
@@ -21,12 +23,12 @@ func (ds *Datastore) GetString(key string) (string, error) {
if err != nil {
return "", err
}
return configEntry.getString()
return configEntry.GetString()
}
// SetString will set the string value for a key.
func (ds *Datastore) SetString(key string, value string) error {
configEntry := ConfigEntry{value, key}
configEntry := models.ConfigEntry{Value: value, Key: key}
return ds.Save(configEntry)
}
@@ -36,12 +38,12 @@ func (ds *Datastore) GetNumber(key string) (float64, error) {
if err != nil {
return 0, err
}
return configEntry.getNumber()
return configEntry.GetNumber()
}
// SetNumber will set the numeric value for a key.
func (ds *Datastore) SetNumber(key string, value float64) error {
configEntry := ConfigEntry{value, key}
configEntry := models.ConfigEntry{Value: value, Key: key}
return ds.Save(configEntry)
}
@@ -51,12 +53,12 @@ func (ds *Datastore) GetBool(key string) (bool, error) {
if err != nil {
return false, err
}
return configEntry.getBool()
return configEntry.GetBool()
}
// SetBool will set the boolean value for a key.
func (ds *Datastore) SetBool(key string, value bool) error {
configEntry := ConfigEntry{value, key}
configEntry := models.ConfigEntry{Value: value, Key: key}
return ds.Save(configEntry)
}
@@ -66,11 +68,11 @@ func (ds *Datastore) GetStringMap(key string) (map[string]string, error) {
if err != nil {
return map[string]string{}, err
}
return configEntry.getStringMap()
return configEntry.GetStringMap()
}
// SetStringMap will set the string map value for a key.
func (ds *Datastore) SetStringMap(key string, value map[string]string) error {
configEntry := ConfigEntry{value, key}
configEntry := models.ConfigEntry{Value: value, Key: key}
return ds.Save(configEntry)
}

View File

@@ -12,8 +12,8 @@ import (
"github.com/nareix/joy5/format/rtmp"
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
)
var _hasInboundRTMPConnection = false
@@ -33,7 +33,9 @@ func Start(setStreamAsConnected func(*io.PipeReader), setBroadcaster func(models
_setStreamAsConnected = setStreamAsConnected
_setBroadcaster = setBroadcaster
port := data.GetRTMPPortNumber()
configRepository := configrepository.Get()
port := configRepository.GetRTMPPortNumber()
s := rtmp.NewServer()
var lis net.Listener
var err error
@@ -78,8 +80,10 @@ func HandleConn(c *rtmp.Conn, nc net.Conn) {
return
}
configRepository := configrepository.Get()
accessGranted := false
validStreamingKeys := data.GetStreamKeys()
validStreamingKeys := configRepository.GetStreamKeys()
// If a stream key override was specified then use that instead.
if config.TemporaryStreamKey != "" {

View File

@@ -7,8 +7,8 @@ import (
log "github.com/sirupsen/logrus"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/services/geoip"
)
@@ -48,7 +48,8 @@ func IsStreamConnected() bool {
// Kind of a hack. It takes a handful of seconds between a RTMP connection and when HLS data is available.
// So account for that with an artificial buffer of four segments.
timeSinceLastConnected := time.Since(_stats.LastConnectTime.Time).Seconds()
waitTime := math.Max(float64(data.GetStreamLatencyLevel().SecondsPerSegment)*3.0, 7)
configRepository := configrepository.Get()
waitTime := math.Max(float64(configRepository.GetStreamLatencyLevel().SecondsPerSegment)*3.0, 7)
if timeSinceLastConnected < waitTime {
return false
}
@@ -75,7 +76,7 @@ func SetViewerActive(viewer *models.Viewer) {
l.Lock()
defer l.Unlock()
// Asynchronously, optionally, fetch GeoIP data.
// Asynchronously, optionally, fetch GeoIP configRepository.
go func(viewer *models.Viewer) {
viewer.Geo = _geoIPClient.GetGeoFromIP(viewer.IPAddress)
}(viewer)
@@ -111,27 +112,29 @@ func pruneViewerCount() {
}
func saveStats() {
if err := data.SetPeakOverallViewerCount(_stats.OverallMaxViewerCount); err != nil {
configRepository := configrepository.Get()
if err := configRepository.SetPeakOverallViewerCount(_stats.OverallMaxViewerCount); err != nil {
log.Errorln("error saving viewer count", err)
}
if err := data.SetPeakSessionViewerCount(_stats.SessionMaxViewerCount); err != nil {
if err := configRepository.SetPeakSessionViewerCount(_stats.SessionMaxViewerCount); err != nil {
log.Errorln("error saving viewer count", err)
}
if _stats.LastDisconnectTime != nil && _stats.LastDisconnectTime.Valid {
if err := data.SetLastDisconnectTime(_stats.LastDisconnectTime.Time); err != nil {
if err := configRepository.SetLastDisconnectTime(_stats.LastDisconnectTime.Time); err != nil {
log.Errorln("error saving disconnect time", err)
}
}
}
func getSavedStats() models.Stats {
savedLastDisconnectTime, _ := data.GetLastDisconnectTime()
configRepository := configrepository.Get()
savedLastDisconnectTime, _ := configRepository.GetLastDisconnectTime()
result := models.Stats{
ChatClients: make(map[string]models.Client),
Viewers: make(map[string]*models.Viewer),
SessionMaxViewerCount: data.GetPeakSessionViewerCount(),
OverallMaxViewerCount: data.GetPeakOverallViewerCount(),
SessionMaxViewerCount: configRepository.GetPeakSessionViewerCount(),
OverallMaxViewerCount: configRepository.GetPeakOverallViewerCount(),
LastDisconnectTime: savedLastDisconnectTime,
}

View File

@@ -2,8 +2,8 @@ package core
import (
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
)
// GetStatus gets the status of the system.
@@ -17,6 +17,7 @@ func GetStatus() models.Status {
viewerCount = len(_stats.Viewers)
}
configRepository := configrepository.Get()
return models.Status{
Online: IsStreamConnected(),
ViewerCount: viewerCount,
@@ -25,7 +26,7 @@ func GetStatus() models.Status {
LastDisconnectTime: _stats.LastDisconnectTime,
LastConnectTime: _stats.LastConnectTime,
VersionNumber: config.VersionNumber,
StreamTitle: data.GetStreamTitle(),
StreamTitle: configRepository.GetStreamTitle(),
}
}

View File

@@ -1,12 +1,13 @@
package core
import (
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/core/storageproviders"
"github.com/owncast/owncast/persistence/configrepository"
)
func setupStorage() error {
s3Config := data.GetS3Config()
configRepository := configrepository.Get()
s3Config := configRepository.GetS3Config()
if s3Config.Enabled {
_storage = storageproviders.NewS3Storage()

View File

@@ -5,9 +5,8 @@ import (
"path/filepath"
"sort"
"github.com/owncast/owncast/persistence/configrepository"
log "github.com/sirupsen/logrus"
"github.com/owncast/owncast/core/data"
)
// LocalStorage represents an instance of the local storage provider for HLS video.
@@ -22,7 +21,8 @@ func NewLocalStorage() *LocalStorage {
// Setup configures this storage provider.
func (s *LocalStorage) Setup() error {
s.host = data.GetVideoServingEndpoint()
configRepository := configrepository.Get()
s.host = configRepository.GetVideoServingEndpoint()
return nil
}
@@ -63,7 +63,8 @@ func (s *LocalStorage) Save(filePath string, retryCount int) (string, error) {
// Cleanup will remove old files from the storage provider.
func (s *LocalStorage) Cleanup() error {
// Determine how many files we should keep on disk
maxNumber := data.GetStreamLatencyLevel().SegmentCount
configRepository := configrepository.Get()
maxNumber := configRepository.GetStreamLatencyLevel().SegmentCount
buffer := 10
return localCleanup(maxNumber + buffer)
}

View File

@@ -11,7 +11,7 @@ import (
"sync"
"time"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/utils"
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
@@ -64,9 +64,9 @@ func NewS3Storage() *S3Storage {
// Setup sets up the s3 storage for saving the video to s3.
func (s *S3Storage) Setup() error {
log.Trace("Setting up S3 for external storage of video...")
s3Config := data.GetS3Config()
customVideoServingEndpoint := data.GetVideoServingEndpoint()
configRepository := configrepository.Get()
s3Config := configRepository.GetS3Config()
customVideoServingEndpoint := configRepository.GetVideoServingEndpoint()
if customVideoServingEndpoint != "" {
s.host = customVideoServingEndpoint
@@ -106,8 +106,9 @@ func (s *S3Storage) SegmentWritten(localFilePath string) {
averagePerformance := utils.GetAveragePerformance(performanceMonitorKey)
// Warn the user about long-running save operations
configRepository := configrepository.Get()
if averagePerformance != 0 {
if averagePerformance > float64(data.GetStreamLatencyLevel().SecondsPerSegment)*0.9 {
if averagePerformance > float64(configRepository.GetStreamLatencyLevel().SecondsPerSegment)*0.9 {
log.Warnln("Possible slow uploads: average upload S3 save duration", averagePerformance, "s. troubleshoot this issue by visiting https://owncast.online/docs/troubleshooting/")
}
}
@@ -220,7 +221,8 @@ func (s *S3Storage) Cleanup() error {
// RemoteCleanup will remove old files from the remote storage provider.
func (s *S3Storage) RemoteCleanup() error {
// Determine how many files we should keep on S3 storage
maxNumber := data.GetStreamLatencyLevel().SegmentCount
configRepository := configrepository.Get()
maxNumber := configRepository.GetStreamLatencyLevel().SegmentCount
buffer := 20
keys, err := s.getDeletableVideoSegmentsWithOffset(maxNumber + buffer)

View File

@@ -16,6 +16,7 @@ import (
"github.com/owncast/owncast/core/webhooks"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/notifications"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/utils"
)
@@ -39,9 +40,11 @@ func setStreamAsConnected(rtmpOut *io.PipeReader) {
_stats.LastConnectTime = &now
_stats.SessionMaxViewerCount = 0
configRepository := configrepository.Get()
_currentBroadcast = &models.CurrentBroadcast{
LatencyLevel: data.GetStreamLatencyLevel(),
OutputSettings: data.GetStreamOutputVariants(),
LatencyLevel: configRepository.GetStreamLatencyLevel(),
OutputSettings: configRepository.GetStreamOutputVariants(),
}
StopOfflineCleanupTimer()
@@ -69,7 +72,7 @@ func setStreamAsConnected(rtmpOut *io.PipeReader) {
}()
go webhooks.SendStreamStatusEvent(models.StreamStarted)
selectedThumbnailVideoQualityIndex, isVideoPassthrough := data.FindHighestVideoQualityIndex(_currentBroadcast.OutputSettings)
selectedThumbnailVideoQualityIndex, isVideoPassthrough := configRepository.FindHighestVideoQualityIndex(_currentBroadcast.OutputSettings)
transcoder.StartThumbnailGenerator(segmentPath, selectedThumbnailVideoQualityIndex, isVideoPassthrough)
_ = chat.SendSystemAction("Stay tuned, the stream is **starting**!", true)
@@ -176,8 +179,9 @@ func startLiveStreamNotificationsTimer() context.CancelFunc {
return
}
configRepository := configrepository.Get()
// Send Fediverse message.
if data.GetFederationEnabled() {
if configRepository.GetFederationEnabled() {
log.Traceln("Sending Federated Go Live message.")
if err := activitypub.SendLive(); err != nil {
log.Errorln(err)

View File

@@ -27,6 +27,7 @@ var supportedCodecs = map[string]string{
(&Libx264Codec{}).Name(): "libx264",
(&OmxCodec{}).Name(): "omx",
(&VaapiCodec{}).Name(): "vaapi",
(&QuicksyncCodec{}).Name(): "qsv",
(&NvencCodec{}).Name(): "NVIDIA nvenc",
(&VideoToolboxCodec{}).Name(): "videotoolbox",
}
@@ -191,7 +192,7 @@ func (c *VaapiCodec) GlobalFlags() string {
// PixelFormat is the pixel format required for this codec.
func (c *VaapiCodec) PixelFormat() string {
return "vaapi_vld"
return "vaapi"
}
// Scaler is the scaler used for resizing the video in the transcoder.
@@ -201,7 +202,7 @@ func (c *VaapiCodec) Scaler() string {
// ExtraFilters are the extra filters required for this codec in the transcoder.
func (c *VaapiCodec) ExtraFilters() string {
return ""
return "hwupload=extra_hw_frames=64,format=vaapi"
}
// ExtraArguments are the extra arguments used with this codec in the transcoder.
@@ -317,17 +318,22 @@ func (c *QuicksyncCodec) DisplayName() string {
// GlobalFlags are the global flags used with this codec in the transcoder.
func (c *QuicksyncCodec) GlobalFlags() string {
return ""
flags := []string{
"-init_hw_device", "qsv=hw",
"-filter_hw_device", "hw",
}
return strings.Join(flags, " ")
}
// PixelFormat is the pixel format required for this codec.
func (c *QuicksyncCodec) PixelFormat() string {
return "nv12"
return "qsv"
}
// Scaler is the scaler used for resizing the video in the transcoder.
func (c *QuicksyncCodec) Scaler() string {
return ""
return "scale_qsv"
}
// ExtraArguments are the extra arguments used with this codec in the transcoder.
@@ -337,7 +343,7 @@ func (c *QuicksyncCodec) ExtraArguments() string {
// ExtraFilters are the extra filters required for this codec in the transcoder.
func (c *QuicksyncCodec) ExtraFilters() string {
return ""
return "hwupload=extra_hw_frames=64,format=qsv"
}
// VariantFlags returns a string representing a single variant processed by this codec.
@@ -348,16 +354,16 @@ func (c *QuicksyncCodec) VariantFlags(v *HLSVariant) string {
// GetPresetForLevel returns the string preset for this codec given an integer level.
func (c *QuicksyncCodec) GetPresetForLevel(l int) string {
presetMapping := map[int]string{
0: "ultrafast",
1: "superfast",
2: "veryfast",
3: "faster",
4: "fast",
0: "veryfast",
1: "fast",
2: "medium",
3: "slow",
4: "veryslow",
}
preset, ok := presetMapping[l]
if !ok {
defaultPreset := presetMapping[1]
defaultPreset := presetMapping[2]
log.Errorf("Invalid level for quicksync preset %d, defaulting to %s", l, defaultPreset)
return defaultPreset
}

View File

@@ -11,7 +11,7 @@ import (
log "github.com/sirupsen/logrus"
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/utils"
)
@@ -88,9 +88,9 @@ func fireThumbnailGenerator(segmentPath string, variantIndex int) error {
if len(names) == 0 {
return nil
}
configRepository := configrepository.Get()
mostRecentFile := path.Join(framePath, names[0])
ffmpegPath := utils.ValidatedFfmpegPath(data.GetFfMpegPath())
ffmpegPath := utils.ValidatedFfmpegPath(configRepository.GetFfMpegPath())
outputFileTemp := path.Join(config.TempDir, "tempthumbnail.jpg")
thumbnailCmdFlags := []string{
@@ -120,7 +120,8 @@ func fireThumbnailGenerator(segmentPath string, variantIndex int) error {
}
func makeAnimatedGifPreview(sourceFile string, outputFile string) {
ffmpegPath := utils.ValidatedFfmpegPath(data.GetFfMpegPath())
configRepository := configrepository.Get()
ffmpegPath := utils.ValidatedFfmpegPath(configRepository.GetFfMpegPath())
outputFileTemp := path.Join(config.TempDir, "temppreview.gif")
// Filter is pulled from https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/

View File

@@ -12,9 +12,9 @@ import (
"github.com/teris-io/shortid"
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/logging"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/utils"
)
@@ -229,7 +229,8 @@ func (t *Transcoder) getString() string {
"-hls_segment_filename", localListenerAddress + "/%v/stream-" + t.segmentIdentifier + "-%d.ts", // Send HLS segments back to us over HTTP
"-max_muxing_queue_size", "400", // Workaround for Too many packets error: https://trac.ffmpeg.org/ticket/6375?cversion=0
"-method PUT", // HLS results sent back to us will be over PUTs
"-method PUT", // HLS results sent back to us will be over PUTs
localListenerAddress + "/%v/stream.m3u8", // Send HLS playlists back to us over HTTP
}
@@ -273,15 +274,16 @@ func getVariantFromConfigQuality(quality models.StreamOutputVariant, index int)
// NewTranscoder will return a new Transcoder, populated by the config.
func NewTranscoder() *Transcoder {
ffmpegPath := utils.ValidatedFfmpegPath(data.GetFfMpegPath())
configRepository := configrepository.Get()
ffmpegPath := utils.ValidatedFfmpegPath(configRepository.GetFfMpegPath())
transcoder := new(Transcoder)
transcoder.ffmpegPath = ffmpegPath
transcoder.internalListenerPort = config.InternalHLSListenerPort
transcoder.currentStreamOutputSettings = data.GetStreamOutputVariants()
transcoder.currentLatencyLevel = data.GetStreamLatencyLevel()
transcoder.codec = getCodec(data.GetVideoCodec())
transcoder.currentStreamOutputSettings = configRepository.GetStreamOutputVariants()
transcoder.currentLatencyLevel = configRepository.GetStreamLatencyLevel()
transcoder.codec = getCodec(configRepository.GetVideoCodec())
transcoder.segmentOutputPath = config.HLSStoragePath
transcoder.playlistOutputPath = config.HLSStoragePath

View File

@@ -0,0 +1,50 @@
package transcoder
import (
"path/filepath"
"testing"
"github.com/owncast/owncast/models"
)
func TestFFmpegQuicksyncCommand(t *testing.T) {
latencyLevel := models.GetLatencyLevel(2)
codec := QuicksyncCodec{}
transcoder := new(Transcoder)
transcoder.ffmpegPath = filepath.Join("fake", "path", "ffmpeg")
transcoder.SetInput("fakecontent.flv")
transcoder.SetOutputPath("fakeOutput")
transcoder.SetIdentifier("jdofFGg")
transcoder.SetInternalHTTPPort("8123")
transcoder.SetCodec(codec.Name())
transcoder.currentLatencyLevel = latencyLevel
variant := HLSVariant{}
variant.videoBitrate = 1200
variant.isAudioPassthrough = true
variant.SetVideoFramerate(30)
variant.SetCPUUsageLevel(2)
transcoder.AddVariant(variant)
variant2 := HLSVariant{}
variant2.videoBitrate = 3500
variant2.isAudioPassthrough = true
variant2.SetVideoFramerate(24)
variant2.SetCPUUsageLevel(4)
transcoder.AddVariant(variant2)
variant3 := HLSVariant{}
variant3.isAudioPassthrough = true
variant3.isVideoPassthrough = true
transcoder.AddVariant(variant3)
cmd := transcoder.getString()
expectedLogPath := filepath.Join("data", "logs", "transcoder.log")
expected := `FFREPORT=file="` + expectedLogPath + `":level=32 ` + transcoder.ffmpegPath + ` -hide_banner -loglevel warning -init_hw_device qsv=hw -filter_hw_device hw -fflags +genpts -flags +cgop -i fakecontent.flv -map v:0 -c:v:0 h264_qsv -b:v:0 1008k -maxrate:v:0 1088k -g:v:0 90 -keyint_min:v:0 90 -r:v:0 30 -map a:0? -c:a:0 copy -filter:v:0 "hwupload=extra_hw_frames=64,format=qsv" -preset medium -map v:0 -c:v:1 h264_qsv -b:v:1 3308k -maxrate:v:1 3572k -g:v:1 72 -keyint_min:v:1 72 -r:v:1 24 -map a:0? -c:a:1 copy -filter:v:1 "hwupload=extra_hw_frames=64,format=qsv" -preset veryslow -map v:0 -c:v:2 copy -map a:0? -c:a:2 copy -preset veryfast -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 " -f hls -hls_time 3 -hls_list_size 10 -hls_flags program_date_time+independent_segments+omit_endlist -segment_format_options mpegts_flags=mpegts_copyts=1 -pix_fmt qsv -sc_threshold 0 -master_pl_name stream.m3u8 -hls_segment_filename http://127.0.0.1:8123/%v/stream-jdofFGg-%d.ts -max_muxing_queue_size 400 -method PUT http://127.0.0.1:8123/%v/stream.m3u8`
if cmd != expected {
t.Errorf("ffmpeg command does not match expected.\nGot %s\n, want: %s", cmd, expected)
}
}

View File

@@ -42,7 +42,7 @@ func TestFFmpegVaapiCommand(t *testing.T) {
cmd := transcoder.getString()
expectedLogPath := filepath.Join("data", "logs", "transcoder.log")
expected := `FFREPORT=file="` + expectedLogPath + `":level=32 ` + transcoder.ffmpegPath + ` -hide_banner -loglevel warning -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -fflags +genpts -flags +cgop -i fakecontent.flv -map v:0 -c:v:0 h264_vaapi -b:v:0 1008k -maxrate:v:0 1088k -g:v:0 90 -keyint_min:v:0 90 -r:v:0 30 -map a:0? -c:a:0 copy -preset veryfast -map v:0 -c:v:1 h264_vaapi -b:v:1 3308k -maxrate:v:1 3572k -g:v:1 72 -keyint_min:v:1 72 -r:v:1 24 -map a:0? -c:a:1 copy -preset fast -map v:0 -c:v:2 copy -map a:0? -c:a:2 copy -preset ultrafast -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 " -f hls -hls_time 3 -hls_list_size 10 -hls_flags program_date_time+independent_segments+omit_endlist -segment_format_options mpegts_flags=mpegts_copyts=1 -pix_fmt vaapi_vld -sc_threshold 0 -master_pl_name stream.m3u8 -hls_segment_filename http://127.0.0.1:8123/%v/stream-jdofFGg-%d.ts -max_muxing_queue_size 400 -method PUT http://127.0.0.1:8123/%v/stream.m3u8`
expected := `FFREPORT=file="` + expectedLogPath + `":level=32 ` + transcoder.ffmpegPath + ` -hide_banner -loglevel warning -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -fflags +genpts -flags +cgop -i fakecontent.flv -map v:0 -c:v:0 h264_vaapi -b:v:0 1008k -maxrate:v:0 1088k -g:v:0 90 -keyint_min:v:0 90 -r:v:0 30 -map a:0? -c:a:0 copy -filter:v:0 "hwupload=extra_hw_frames=64,format=vaapi" -preset veryfast -map v:0 -c:v:1 h264_vaapi -b:v:1 3308k -maxrate:v:1 3572k -g:v:1 72 -keyint_min:v:1 72 -r:v:1 24 -map a:0? -c:a:1 copy -filter:v:1 "hwupload=extra_hw_frames=64,format=vaapi" -preset fast -map v:0 -c:v:2 copy -map a:0? -c:a:2 copy -preset ultrafast -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 " -f hls -hls_time 3 -hls_list_size 10 -hls_flags program_date_time+independent_segments+omit_endlist -segment_format_options mpegts_flags=mpegts_copyts=1 -pix_fmt vaapi -sc_threshold 0 -master_pl_name stream.m3u8 -hls_segment_filename http://127.0.0.1:8123/%v/stream-jdofFGg-%d.ts -max_muxing_queue_size 400 -method PUT http://127.0.0.1:8123/%v/stream.m3u8`
if cmd != expected {
t.Errorf("ffmpeg command does not match expected.\nGot %s\n, want: %s", cmd, expected)

View File

@@ -8,7 +8,7 @@ import (
"sync"
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/utils"
log "github.com/sirupsen/logrus"
)
@@ -59,6 +59,8 @@ var ignoredErrors = []string{
"Non-monotonous DTS in output",
"frames duplicated",
"To ignore this",
"Driver does not support some wanted packed headers (wanted 0xd, found 0x1)",
"Failed to allocate a vaapi/nv12 frame from a fixed pool of hardware frames.",
}
func handleTranscoderMessage(message string) {
@@ -99,9 +101,9 @@ func handleTranscoderMessage(message string) {
func createVariantDirectories() {
// Create private hls data dirs
utils.CleanupDirectory(config.HLSStoragePath)
if len(data.GetStreamOutputVariants()) != 0 {
for index := range data.GetStreamOutputVariants() {
configRepository := configrepository.Get()
if len(configRepository.GetStreamOutputVariants()) != 0 {
for index := range configRepository.GetStreamOutputVariants() {
if err := os.MkdirAll(path.Join(config.HLSStoragePath, strconv.Itoa(index)), 0o750); err != nil {
log.Fatalln(err)
}

View File

@@ -3,8 +3,8 @@ package webhooks
import (
"time"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/teris-io/shortid"
)
@@ -14,13 +14,15 @@ func SendStreamStatusEvent(eventType models.EventType) {
}
func sendStreamStatusEvent(eventType models.EventType, id string, timestamp time.Time) {
configRepository := configrepository.Get()
SendEventToWebhooks(WebhookEvent{
Type: eventType,
EventData: map[string]interface{}{
"id": id,
"name": data.GetServerName(),
"summary": data.GetServerSummary(),
"streamTitle": data.GetStreamTitle(),
"name": configRepository.GetServerName(),
"summary": configRepository.GetServerSummary(),
"streamTitle": configRepository.GetStreamTitle(),
"status": getStatus(),
"timestamp": timestamp,
},

View File

@@ -5,14 +5,16 @@ import (
"time"
"github.com/owncast/owncast/core/chat/events"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
)
func TestSendStreamStatusEvent(t *testing.T) {
data.SetServerName("my server")
data.SetServerSummary("my server where I stream")
data.SetStreamTitle("my stream")
configRepository := configrepository.Get()
configRepository.SetServerName("my server")
configRepository.SetServerSummary("my server where I stream")
configRepository.SetStreamTitle("my stream")
checkPayload(t, models.StreamStarted, func() {
sendStreamStatusEvent(events.StreamStarted, "id", time.Unix(72, 6).UTC())

11
crowdin.yml Normal file
View File

@@ -0,0 +1,11 @@
project_id_env: CROWDIN_PROJECT_ID
api_token_env: CROWDIN_PERSONAL_TOKEN
pull_request_title: Translations update
pull_request_labels:
- crowdin
- i18n
- translation
commit_message: Updated translations
files:
- source: /web/i18n/en/translation.json
translation: /web/i18n/%two_letters_code%/translation.json

View File

@@ -158,7 +158,7 @@ UPDATE users SET display_color = $1 WHERE id = $2
`
type ChangeDisplayColorParams struct {
DisplayColor int32
DisplayColor int
ID string
}
@@ -253,8 +253,8 @@ SELECT iri, inbox, name, username, image, created_at FROM ap_followers WHERE app
`
type GetFederationFollowersWithOffsetParams struct {
Limit int32
Offset int32
Limit int
Offset int
}
type GetFederationFollowersWithOffsetRow struct {
@@ -365,8 +365,8 @@ SELECT iri, actor, type, timestamp FROM ap_accepted_activities ORDER BY timestam
`
type GetInboundActivitiesWithOffsetParams struct {
Limit int32
Offset int32
Limit int
Offset int
}
type GetInboundActivitiesWithOffsetRow struct {
@@ -514,8 +514,8 @@ SELECT value FROM ap_outbox LIMIT $1 OFFSET $2
`
type GetOutboxWithOffsetParams struct {
Limit int32
Offset int32
Limit int
Offset int
}
func (q *Queries) GetOutboxWithOffset(ctx context.Context, arg GetOutboxWithOffsetParams) ([][]byte, error) {

File diff suppressed because one or more lines are too long

111
go.mod
View File

@@ -1,94 +1,81 @@
module github.com/owncast/owncast
go 1.22
go 1.22.0
toolchain go1.23.1
require (
github.com/aws/aws-sdk-go v1.54.13
github.com/go-fed/activity v1.0.1-0.20210803212804-d866ba75dd0f
github.com/CAFxX/httpcompression v0.0.9
github.com/SherClockHolmes/webpush-go v1.4.0
github.com/TwiN/go-away v1.6.14
github.com/andybalholm/cascadia v1.3.3
github.com/aws/aws-sdk-go v1.55.6
github.com/go-chi/chi/v5 v5.2.0
github.com/go-fed/activity v1.0.1-0.20220119073622-b14b50eecad0
github.com/go-fed/httpsig v1.1.0
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/gorilla/websocket v1.5.3
github.com/grafov/m3u8 v0.12.0
github.com/grafov/m3u8 v0.12.1
github.com/jellydator/ttlcache/v3 v3.3.0
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible
github.com/mattn/go-sqlite3 v1.14.22
github.com/mattn/go-sqlite3 v1.14.24
github.com/microcosm-cc/bluemonday v1.0.27
github.com/mssola/user_agent v0.6.0
github.com/nakabonne/tstorage v0.3.6
github.com/nareix/joy5 v0.0.0-20210317075623-2c912ca30590
github.com/oapi-codegen/runtime v1.1.1
github.com/oschwald/geoip2-golang v1.11.0
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.20.5
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
github.com/schollz/sqlite3dump v1.3.1
github.com/shirou/gopsutil/v4 v4.24.12
github.com/sirupsen/logrus v1.9.3
github.com/stretchr/testify v1.10.0
github.com/teris-io/shortid v0.0.0-20220617161101-71ec9f2aa569
github.com/yuin/goldmark v1.7.4
golang.org/x/mod v0.18.0
golang.org/x/time v0.5.0
github.com/yuin/goldmark v1.7.8
github.com/yuin/goldmark-emoji v1.0.4
golang.org/x/crypto v0.32.0
golang.org/x/mod v0.22.0
golang.org/x/net v0.34.0
golang.org/x/time v0.9.0
gopkg.in/evanphx/json-patch.v5 v5.9.0
mvdan.cc/xurls/v2 v2.6.0
)
require (
github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/lestrrat-go/strftime v1.0.4 // indirect
github.com/mvdan/xurls v1.1.0 // indirect
github.com/pkg/errors v0.9.1
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
golang.org/x/crypto v0.24.0
golang.org/x/net v0.26.0
golang.org/x/sys v0.21.0 // indirect
)
require github.com/prometheus/client_golang v1.19.1
require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/klauspost/compress v1.16.7 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/prometheus/client_model v0.5.0 // indirect
github.com/prometheus/common v0.48.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
golang.org/x/text v0.16.0 // indirect
google.golang.org/protobuf v1.33.0 // indirect
)
require (
github.com/nakabonne/tstorage v0.3.6
github.com/shirou/gopsutil/v4 v4.24.6
)
require github.com/SherClockHolmes/webpush-go v1.3.0
require (
github.com/andybalholm/brotli v1.0.5 // indirect
github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/ebitengine/purego v0.8.1 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-test/deep v1.0.4 // indirect
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
github.com/google/uuid v1.5.0 // indirect
github.com/gorilla/css v1.0.1 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/jonboulle/clockwork v0.2.2 // indirect
github.com/klauspost/compress v1.17.9 // indirect
github.com/lestrrat-go/strftime v1.0.4 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/oschwald/maxminddb-golang v1.13.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
golang.org/x/sync v0.7.0 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.55.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
golang.org/x/sync v0.10.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/text v0.21.0 // indirect
google.golang.org/protobuf v1.34.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
require (
github.com/CAFxX/httpcompression v0.0.9
github.com/TwiN/go-away v1.6.13
github.com/andybalholm/cascadia v1.3.2
github.com/go-chi/chi/v5 v5.1.0
github.com/jellydator/ttlcache/v3 v3.2.0
github.com/mssola/user_agent v0.6.0
github.com/oapi-codegen/runtime v1.1.1
github.com/shirou/gopsutil/v3 v3.24.5
github.com/stretchr/testify v1.9.0
github.com/yuin/goldmark-emoji v1.0.3
gopkg.in/evanphx/json-patch.v5 v5.9.0
mvdan.cc/xurls v1.1.0
mvdan.cc/xurls/v2 v2.5.0
)
replace github.com/go-fed/activity => github.com/owncast/activity v1.0.1-0.20211229051252-7821289d4026

193
go.sum
View File

@@ -3,33 +3,41 @@ github.com/CAFxX/httpcompression v0.0.9/go.mod h1:XX8oPZA+4IDcfZ0A71Hz0mZsv/YJOg
github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk=
github.com/SherClockHolmes/webpush-go v1.3.0 h1:CAu3FvEE9QS4drc3iKNgpBWFfGqNthKlZhp5QpYnu6k=
github.com/SherClockHolmes/webpush-go v1.3.0/go.mod h1:AxRHmJuYwKGG1PVgYzToik1lphQvDnqFYDqimHvwhIw=
github.com/SherClockHolmes/webpush-go v1.4.0 h1:ocnzNKWN23T9nvHi6IfyrQjkIc0oJWv1B1pULsf9i3s=
github.com/SherClockHolmes/webpush-go v1.4.0/go.mod h1:XSq8pKX11vNV8MJEMwjrlTkxhAj1zKfxmyhdV7Pd6UA=
github.com/TwiN/go-away v1.6.13 h1:aB6l/FPXmA5ds+V7I9zdhxzpsLLUvVtEuS++iU/ZmgE=
github.com/TwiN/go-away v1.6.13/go.mod h1:MpvIC9Li3minq+CGgbgUDvQ9tDaeW35k5IXZrF9MVas=
github.com/TwiN/go-away v1.6.14 h1:gjFP+6/A36gmj0NpYX0Sz9hrdU0KtHwtNWYnsJgV4fo=
github.com/TwiN/go-away v1.6.14/go.mod h1:d+Gv3XuqjIeFqXYuAIzlyNoDzr1vNsP5B/hRY3u/VLs=
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
github.com/andybalholm/cascadia v1.3.2 h1:3Xi6Dw5lHF15JtdcmAHD3i1+T8plmv7BQ/nsViSLyss=
github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ=
github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk=
github.com/aws/aws-sdk-go v1.53.5 h1:1OcVWMjGlwt7EU5OWmmEEXqaYfmX581EK317QJZXItM=
github.com/aws/aws-sdk-go v1.53.5/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/aws/aws-sdk-go v1.54.13 h1:zpCuiG+/mFdDY/klKJvmSioAZWk45F4rLGq0JWVAAzk=
github.com/aws/aws-sdk-go v1.54.13/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk=
github.com/aws/aws-sdk-go v1.55.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/dave/jennifer v1.3.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s=
github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE=
github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw=
github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
github.com/go-chi/chi/v5 v5.2.0 h1:Aj1EtB0qR2Rdo2dG4O94RIU35w2lvQSj6BRA4+qwFL0=
github.com/go-chi/chi/v5 v5.2.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
github.com/go-fed/httpsig v0.1.1-0.20190914113940-c2de3672e5b5/go.mod h1:T56HUNYZUQ1AGUzhAYPugZfp36sKApVnGBgKlIY+aIE=
github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI=
github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM=
@@ -40,27 +48,26 @@ github.com/go-test/deep v1.0.4 h1:u2CU3YKy9I2pmu9pX0eq50wCgjfGIt539SqR7FbHiho=
github.com/go-test/deep v1.0.4/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/google/brotli/go/cbrotli v0.0.0-20230829110029-ed738e842d2f h1:jopqB+UTSdJGEJT8tEqYyE29zN91fi2827oLET8tl7k=
github.com/google/brotli/go/cbrotli v0.0.0-20230829110029-ed738e842d2f/go.mod h1:nOPhAkwVliJdNTkj3gXpljmWhjc4wCaVqbMJcPKWP4s=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grafov/m3u8 v0.12.0 h1:T6iTwTsSEtMcwkayef+FJO8kj+Sglr4Lh81Zj8Ked/4=
github.com/grafov/m3u8 v0.12.0/go.mod h1:nqzOkfBiZJENr52zTVd/Dcl03yzphIMbJqkXGu+u080=
github.com/jellydator/ttlcache/v3 v3.2.0 h1:6lqVJ8X3ZaUwvzENqPAobDsXNExfUJd61u++uW8a3LE=
github.com/jellydator/ttlcache/v3 v3.2.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
github.com/grafov/m3u8 v0.12.1 h1:DuP1uA1kvRRmGNAZ0m+ObLv1dvrfNO0TPx0c/enNk0s=
github.com/grafov/m3u8 v0.12.1/go.mod h1:nqzOkfBiZJENr52zTVd/Dcl03yzphIMbJqkXGu+u080=
github.com/jellydator/ttlcache/v3 v3.3.0 h1:BdoC9cE81qXfrxeb9eoJi9dWrdhSuwXMAnHTbnBm4Wc=
github.com/jellydator/ttlcache/v3 v3.3.0/go.mod h1:bj2/e0l4jRnQdrnSTaGTsh4GSXvMjQcy41i7th0GVGw=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
@@ -68,13 +75,16 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC
github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE=
github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4=
@@ -84,28 +94,22 @@ github.com/lestrrat-go/strftime v1.0.4/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR7
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/microcosm-cc/bluemonday v1.0.26 h1:xbqSvqzQMeEHCqMi64VAs4d8uy6Mequs3rQ0k/Khz58=
github.com/microcosm-cc/bluemonday v1.0.26/go.mod h1:JyzOCs9gkyQyjs+6h10UEVSe02CGwkhd72Xdqh78TWs=
github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk=
github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
github.com/mssola/user_agent v0.6.0 h1:uwPR4rtWlCHRFyyP9u2KOV0u8iQXmS7Z7feTrstQwk4=
github.com/mssola/user_agent v0.6.0/go.mod h1:TTPno8LPY3wAIEKRpAtkdMT0f8SE24pLRGPahjCH4uw=
github.com/mvdan/xurls v1.1.0 h1:OpuDelGQ1R1ueQ6sSryzi6P+1RtBpfQHM8fJwlE45ww=
github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/nakabonne/tstorage v0.3.6 h1:usp7pTohax8mynnFiUSUQ2QVBCKLCkYx3gmb3+rJo54=
github.com/nakabonne/tstorage v0.3.6/go.mod h1:1xUrK3s1MXSlU6dn96xHerHx/MdO4BGmsAHEUbsaOxU=
github.com/nareix/joy5 v0.0.0-20210317075623-2c912ca30590 h1:PnxRU8L8Y2q82vFC2QdNw23Dm2u6WrjecIdpXjiYbXM=
github.com/nareix/joy5 v0.0.0-20210317075623-2c912ca30590/go.mod h1:XmAOs6UJXpNXRwKk+KY/nv5kL6xXYXyellk+A1pTlko=
github.com/oapi-codegen/runtime v1.1.1 h1:EXLHh0DXIJnWhdRPN2w4MXAzFyE4CskzhNLUmtpMYro=
github.com/oapi-codegen/runtime v1.1.1/go.mod h1:SK9X900oXmPWilYR5/WKPzt3Kqxn/uS/+lbpREv+eCg=
github.com/oschwald/geoip2-golang v1.9.0 h1:uvD3O6fXAXs+usU+UGExshpdP13GAqp4GBrzN7IgKZc=
github.com/oschwald/geoip2-golang v1.9.0/go.mod h1:BHK6TvDyATVQhKNbQBdrj9eAvuwOMi2zSFXizL3K81Y=
github.com/oschwald/geoip2-golang v1.11.0 h1:hNENhCn1Uyzhf9PTmquXENiWS6AlxAEnBII6r8krA3w=
github.com/oschwald/geoip2-golang v1.11.0/go.mod h1:P9zG+54KPEFOliZ29i7SeYZ/GM6tfEL+rgSn03hYuUo=
github.com/oschwald/maxminddb-golang v1.11.0 h1:aSXMqYR/EPNjGE8epgqwDay+P30hCBZIveY0WZbAWh0=
github.com/oschwald/maxminddb-golang v1.11.0/go.mod h1:YmVI+H0zh3ySFR3w+oz8PCfglAFj3PuCmui13+P9zDg=
github.com/oschwald/maxminddb-golang v1.13.0 h1:R8xBorY71s84yO06NgTmQvqvTvlS/bnYZrrWX1MElnU=
github.com/oschwald/maxminddb-golang v1.13.0/go.mod h1:BU0z8BfFVhi1LQaonTwwGQlsHUEu9pWNdMfmq4ztm0o=
github.com/owncast/activity v1.0.1-0.20211229051252-7821289d4026 h1:E1nxiX44BcMQTSSs8MHLm2rXnqXNedYZkFI31gXMsJc=
@@ -119,29 +123,26 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE=
github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho=
github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc=
github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8=
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo=
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/schollz/sqlite3dump v1.3.1 h1:QXizJ7XEJ7hggjqjZ3YRtF3+javm8zKtzNByYtEkPRA=
github.com/schollz/sqlite3dump v1.3.1/go.mod h1:mzSTjZpJH4zAb1FN3iNlhWPbbdyeBpOaTW0hukyMHyI=
github.com/shirou/gopsutil/v3 v3.24.4 h1:dEHgzZXt4LMNm+oYELpzl9YCqV65Yr/6SfrvgRBtXeU=
github.com/shirou/gopsutil/v3 v3.24.4/go.mod h1:lTd2mdiOspcqLgAnr9/nGi71NkeMpWKdmhuxm9GusH8=
github.com/shirou/gopsutil/v3 v3.24.5 h1:i0t8kL+kQTvpAYToeuiVk3TgDeKOFioZO3Ztz/iZ9pI=
github.com/shirou/gopsutil/v3 v3.24.5/go.mod h1:bsoOS1aStSs9ErQ1WWfxllSeS1K5D+U30r2NfcubMVk=
github.com/shirou/gopsutil/v4 v4.24.6/go.mod h1:aoebb2vxetJ/yIDZISmduFvVNPHqXQ9SEJwRXxkf0RA=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/shirou/gopsutil/v4 v4.24.10 h1:7VOzPtfw/5YDU+jLEoBwXwxJbQetULywoSV4RYY7HkM=
github.com/shirou/gopsutil/v4 v4.24.10/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8=
github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8=
github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8=
github.com/shirou/gopsutil/v4 v4.24.12 h1:qvePBOk20e0IKA1QXrIIU+jmk+zEiYVVx06WjBRlZo4=
github.com/shirou/gopsutil/v4 v4.24.12/go.mod h1:DCtMPAad2XceTeIAbGyVfycbYQNBGk2P8cvDi7/VN9o=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/cobra v0.0.4-0.20190109003409-7547e83b2d85/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
@@ -150,7 +151,6 @@ github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKk
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
@@ -159,6 +159,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/teris-io/shortid v0.0.0-20220617161101-71ec9f2aa569 h1:xzABM9let0HLLqFypcxvLmlvEciCHL7+Lv+4vwZqecI=
github.com/teris-io/shortid v0.0.0-20220617161101-71ec9f2aa569/go.mod h1:2Ly+NIftZN4de9zRmENdYbvPQeaVIYKWpLFStLFEBgI=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
@@ -168,35 +170,39 @@ github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9f
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/valyala/gozstd v1.20.1 h1:xPnnnvjmaDDitMFfDxmQ4vpx0+3CdTg2o3lALvXTU/g=
github.com/valyala/gozstd v1.20.1/go.mod h1:y5Ew47GLlP37EkTB+B4s7r6A5rdaeB7ftbl9zoYiIPQ=
github.com/yuin/goldmark v1.3.7/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yuin/goldmark v1.7.1 h1:3bajkSilaCbjdKVsKdZjZCLBNPL9pYzrCakKaf4U49U=
github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg=
github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
github.com/yuin/goldmark-emoji v1.0.2 h1:c/RgTShNgHTtc6xdz2KKI74jJr6rWi7FPgnP9GAsO5s=
github.com/yuin/goldmark-emoji v1.0.2/go.mod h1:RhP/RWpexdp+KHs7ghKnifRoIs/Bq4nDS7tRbCkOwKY=
github.com/yuin/goldmark-emoji v1.0.3 h1:aLRkLHOuBR2czCY4R8olwMjID+tENfhyFDMCRhbIQY4=
github.com/yuin/goldmark-emoji v1.0.3/go.mod h1:tTkZEbwu5wkPmgTcitqddVxY9osFZiavD+r4AzQrh1U=
github.com/yuin/goldmark v1.7.8 h1:iERMLn0/QJeHFhxSt3p6PeN9mGnvIKSpG9YYorDMnic=
github.com/yuin/goldmark v1.7.8/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
github.com/yuin/goldmark-emoji v1.0.4 h1:vCwMkPZSNefSUnOW2ZKRUjBSD5Ok3W78IXhGxxAEF90=
github.com/yuin/goldmark-emoji v1.0.4/go.mod h1:tTkZEbwu5wkPmgTcitqddVxY9osFZiavD+r4AzQrh1U=
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
golang.org/x/crypto v0.0.0-20180527072434-ab813273cd59/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
golang.org/x/crypto v0.30.0 h1:RwoQn3GkWiMkzlX562cLB7OxWvjH1L8xutO2WoJcRoY=
golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -205,17 +211,27 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo=
golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=
golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180525142821-c11f84a56e43/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -230,37 +246,55 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E=
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
@@ -272,6 +306,7 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
mvdan.cc/xurls v1.1.0 h1:kj0j2lonKseISJCiq1Tfk+iTv65dDGCl0rTbanXJGGc=
mvdan.cc/xurls v1.1.0/go.mod h1:TNWuhvo+IqbUCmtUIb/3LJSQdrzel8loVpgFm0HikbI=
mvdan.cc/xurls/v2 v2.5.0 h1:lyBNOm8Wo71UknhUs4QTFUNNMyxy2JEIaKKo0RWOh+8=
mvdan.cc/xurls/v2 v2.5.0/go.mod h1:yQgaGQ1rFtJUzkmKiHYSSfuQxqfYmd//X6PxvholpeE=
mvdan.cc/xurls/v2 v2.6.0 h1:3NTZpeTxYVWNSokW3MKeyVkz/j7uYXYiMtXRUfmjbgI=
mvdan.cc/xurls/v2 v2.6.0/go.mod h1:bCvEZ1XvdA6wDnxY7jPPjEmigDtvtvPXAD/Exa9IMSk=

15
main.go
View File

@@ -6,6 +6,7 @@ import (
"strconv"
"github.com/owncast/owncast/logging"
"github.com/owncast/owncast/persistence/configrepository"
log "github.com/sirupsen/logrus"
"github.com/owncast/owncast/config"
@@ -111,8 +112,10 @@ func main() {
}
func handleCommandLineFlags() {
configRepository := configrepository.Get()
if *newAdminPassword != "" {
if err := data.SetAdminPassword(*newAdminPassword); err != nil {
if err := configRepository.SetAdminPassword(*newAdminPassword); err != nil {
log.Errorln("Error setting your admin password.", err)
log.Exit(1)
} else {
@@ -134,25 +137,25 @@ func handleCommandLineFlags() {
}
log.Println("Saving new web server port number to", portNumber)
if err := data.SetHTTPPortNumber(float64(portNumber)); err != nil {
if err := configRepository.SetHTTPPortNumber(float64(portNumber)); err != nil {
log.Errorln(err)
}
}
config.WebServerPort = data.GetHTTPPortNumber()
config.WebServerPort = configRepository.GetHTTPPortNumber()
// Set the web server ip
if *webServerIPOverride != "" {
log.Println("Saving new web server listen IP address to", *webServerIPOverride)
if err := data.SetHTTPListenAddress(*webServerIPOverride); err != nil {
if err := configRepository.SetHTTPListenAddress(*webServerIPOverride); err != nil {
log.Errorln(err)
}
}
config.WebServerIP = data.GetHTTPListenAddress()
config.WebServerIP = configRepository.GetHTTPListenAddress()
// Set the rtmp server port
if *rtmpPortOverride > 0 {
log.Println("Saving new RTMP server port number to", *rtmpPortOverride)
if err := data.SetRTMPPortNumber(float64(*rtmpPortOverride)); err != nil {
if err := configRepository.SetRTMPPortNumber(float64(*rtmpPortOverride)); err != nil {
log.Errorln(err)
}
}

View File

@@ -3,9 +3,9 @@ package metrics
import (
"time"
"github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/disk"
"github.com/shirou/gopsutil/v3/mem"
"github.com/shirou/gopsutil/v4/cpu"
"github.com/shirou/gopsutil/v4/disk"
"github.com/shirou/gopsutil/v4/mem"
log "github.com/sirupsen/logrus"
)

View File

@@ -5,8 +5,8 @@ import (
"sort"
"github.com/owncast/owncast/core"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
"github.com/owncast/owncast/utils"
)
@@ -68,8 +68,8 @@ func networkSpeedHealthOverviewMessage() string {
isVideoPassthrough bool
bitrate int
}
outputVariants := data.GetStreamOutputVariants()
configRepository := configrepository.Get()
outputVariants := configRepository.GetStreamOutputVariants()
streamSortVariants := make([]singleVariant, len(outputVariants))
for i, variant := range outputVariants {
@@ -155,7 +155,8 @@ func wastefulBitrateOverviewMessage() string {
return ""
}
outputVariants := data.GetStreamOutputVariants()
configRepository := configrepository.Get()
outputVariants := configRepository.GetStreamOutputVariants()
type singleVariant struct {
isVideoPassthrough bool
@@ -229,7 +230,8 @@ func errorCountHealthOverviewMessage() string {
healthyPercentage := utils.IntPercentage(clientsWithErrors, totalNumberOfClients)
isUsingPassthrough := false
outputVariants := data.GetStreamOutputVariants()
configRepository := configrepository.Get()
outputVariants := configRepository.GetStreamOutputVariants()
for _, variant := range outputVariants {
if variant.IsVideoPassthrough {
isUsingPassthrough = true

View File

@@ -5,8 +5,8 @@ import (
"time"
"github.com/owncast/owncast/config"
"github.com/owncast/owncast/core/data"
"github.com/owncast/owncast/models"
"github.com/owncast/owncast/persistence/configrepository"
)
// How often we poll for updates.
@@ -56,8 +56,9 @@ var _getStatus func() models.Status
// Start will begin the metrics collection and alerting.
func Start(getStatus func() models.Status) {
configRepository := configrepository.Get()
_getStatus = getStatus
host := data.GetServerURL()
host := configRepository.GetServerURL()
if host == "" {
host = "unknown"
}

View File

@@ -31,6 +31,7 @@ func startViewerCollectionMetrics() {
func collectViewerCount() {
// Don't collect metrics for viewers if there's no stream active.
if !core.GetStatus().Online {
activeViewerCount.Set(0)
return
}

View File

@@ -1,4 +1,4 @@
package data
package models
import (
"bytes"
@@ -12,48 +12,48 @@ type ConfigEntry struct {
Key string
}
func (c *ConfigEntry) getStringSlice() ([]string, error) {
decoder := c.getDecoder()
func (c *ConfigEntry) GetStringSlice() ([]string, error) {
decoder := c.GetDecoder()
var result []string
err := decoder.Decode(&result)
return result, err
}
func (c *ConfigEntry) getStringMap() (map[string]string, error) {
decoder := c.getDecoder()
func (c *ConfigEntry) GetStringMap() (map[string]string, error) {
decoder := c.GetDecoder()
var result map[string]string
err := decoder.Decode(&result)
return result, err
}
func (c *ConfigEntry) getString() (string, error) {
decoder := c.getDecoder()
func (c *ConfigEntry) GetString() (string, error) {
decoder := c.GetDecoder()
var result string
err := decoder.Decode(&result)
return result, err
}
func (c *ConfigEntry) getNumber() (float64, error) {
decoder := c.getDecoder()
func (c *ConfigEntry) GetNumber() (float64, error) {
decoder := c.GetDecoder()
var result float64
err := decoder.Decode(&result)
return result, err
}
func (c *ConfigEntry) getBool() (bool, error) {
decoder := c.getDecoder()
func (c *ConfigEntry) GetBool() (bool, error) {
decoder := c.GetDecoder()
var result bool
err := decoder.Decode(&result)
return result, err
}
func (c *ConfigEntry) getObject(result interface{}) error {
decoder := c.getDecoder()
func (c *ConfigEntry) GetObject(result interface{}) error {
decoder := c.GetDecoder()
err := decoder.Decode(result)
return err
}
func (c *ConfigEntry) getDecoder() *gob.Decoder {
func (c *ConfigEntry) GetDecoder() *gob.Decoder {
valueBytes := c.Value.([]byte)
decoder := gob.NewDecoder(bytes.NewBuffer(valueBytes))
return decoder

View File

@@ -105,7 +105,7 @@ func GetAllSocialHandles() map[string]SocialHandle {
Icon: "/img/platformlogos/twitch.svg",
},
"twitter": {
Platform: "Twitter",
Platform: "X",
Icon: "/img/platformlogos/twitter.svg",
},
"youtube": {

Some files were not shown because too many files have changed in this diff Show More