Commit Graph

403 Commits

Author SHA1 Message Date
ges 89ad58cb54 feat: show pending copyright notices panel on the broadcaster dashboard
Fetches NOTIFIED reports on page load and renders an amber warning panel above
the main content. Each notice shows the asset ID, optional resolution note,
date, a link to the admin console, and a dismiss button that transitions the
report to RESOLVED. Panel hides itself when all notices are cleared.
WebSocket subscription refreshes the list live on COPYRIGHT_WARNING messages.
2026-04-28 14:47:12 +02:00
ges 87367a6e35 feat: add copyright report UI (public report page, admin flag button, sysadmin review)
- /report: public three-step page to find a broadcaster, pick an asset, and
  submit a DMCA-style claim; uses asset.url fallback for images without previews
- Admin console: flag button opens report modal for the selected asset
- Settings page: sysadmin copyright reports section with status/broadcaster
  filters, paginated table, and review modal with action radio buttons
- Footer on index.html links to /report
2026-04-28 14:47:05 +02:00
ges 05a7c5d2b5 feat: implement copyright report service, API, and broadcaster notice endpoints
- CopyrightReportService: submit, list, get, review (DISMISS / REMOVE_ASSET /
  NOTIFY_BROADCASTER / BAN_BROADCASTER); NOTIFY_BROADCASTER sets NOTIFIED
  status so notices persist until broadcaster dismisses them
- BroadcasterCopyrightNoticeApiController: channel-admin-scoped list + dismiss
- CopyrightReportApiController: public submit, sysadmin list/get/review
- RateLimitInterceptor: 5 reports/IP/hour on the public submit endpoint
- Banned check added to asset upload path
2026-04-28 14:46:53 +02:00
ges c17c1b469e feat: add copyright_reports table and channel banned flag (V15, V16) 2026-04-28 14:46:43 +02:00
ges 9002fc60d7 refactor: migrate remaining Locale.ROOT toLowerCaseRoot calls to StringNormalizer in service layer 2026-04-24 16:28:21 +02:00
ges 0d3d679fff test: add ChannelDirectoryServiceTest coverage for deleteAsset, reorderAssets, triggerPlayback, importMarketplaceScript 2026-04-24 16:24:36 +02:00
ges b696f51663 refactor: extract ChannelScriptAssetApiController from ChannelApiController 2026-04-24 16:22:47 +02:00
ges a1c9e471e0 refactor: replace inline Locale.ROOT calls with StringNormalizer in TwitchUserLookupService 2026-04-24 16:19:39 +02:00
ges d8f492db2d test: add AccountServiceTest (6 tests) covering deleteAccount behaviour 2026-04-24 16:16:40 +02:00
ges 7b72cbafc9 refactor: inline private normalize() wrappers; use StringNormalizer.toLowerCaseRoot() directly
Remove boilerplate private normalize(String) wrappers from:
- ChannelDirectoryService
- ChannelSettingsService
- AccountService
- AuditLogService (keepsg normalizeFilter() which adds null-if-blank semantics)

Add StringNormalizer import to AuditLogService; remove now-unused Locale import.
2026-04-24 16:13:27 +02:00
ges 41ba1e242e refactor: add VisualAsset.shallowCopy() to eliminate 9-field manual entity copy in previewTransform 2026-04-23 11:16:44 +02:00
ges 4b5cb6023c refactor+test: extend StringNormalizer, migrate SystemAdministratorService, add SystemAdministratorServiceTest
- Add StringNormalizer.normalize() (trim + toLowerCase ROOT) for username normalization
- Migrate SystemAdministratorService private normalize() to use StringNormalizer.normalize()
- Remove now-unused Locale import from SystemAdministratorService
- Add StringNormalizerTest coverage for new normalize() method
- Add SystemAdministratorServiceTest with 10 unit tests covering all public methods
2026-04-23 11:14:02 +02:00
ges 6dabdd5662 refactor: remove hand-rolled ObjectMapper singleton in MarketplaceScriptSeedLoader; replace TODO comments with Javadoc
- Replace JsonSupport inner class (AtomicReference lazy singleton) with simple static final ObjectMapper field
- Replace TODO code-smell comments in TwitchEmoteService, SevenTvEmoteService, and MarketplaceScriptSeedLoader with descriptive Javadoc
- Use normalize() consistently in ChannelDirectoryService.topicFor()
2026-04-23 11:10:37 +02:00
ges 8c04b9c755 test: add StringNormalizerTest and AssetCleanupService unit tests 2026-04-21 16:36:48 +02:00
ges 2e6ead0382 refactor: extract ChannelAdminApiController and clean up ChannelDirectoryService
- Extract admin endpoint group (add/remove/list admins, suggestions) into dedicated ChannelAdminApiController
- ChannelApiController reduced from 665 to 520 lines; removes 3 dependency injections
- ChannelDirectoryService: extract resolveOrderForSort() helper from bulk-reorder comparator lambda
- Remove TODO comment from ChannelApiController (partially addressed by this split)
2026-04-21 16:32:00 +02:00
ges 3511936a29 refactor: move SchemaMigration responsibilities to Flyway migrations V13 and V14
- V13: create oauth2_authorized_client table and SPRING_SESSION_ATTRIBUTES upsert trigger
- V14: normalize oauth2_authorized_client timestamp columns (one-time data migration)
- SchemaMigration now only retains legacy backward-compat code for pre-Flyway databases
- Remove normalizeAuthorizedClientTimestamps() and ensureSessionAttributeUpsertTrigger() from SchemaMigration
- Add clear comment explaining SchemaMigration is legacy code only
2026-04-21 16:20:48 +02:00
ges 1a2e2344da refactor+test: add MarketplaceService and SettingsService unit tests; use StringNormalizer in AccountService 2026-04-21 16:15:25 +02:00
ges b6ca67d96c refactor: eliminate code duplication across AssetPatch, OAuthTokenCipher, upload guards, SecurityConfig, and normalize helpers
- Add AssetPatch.forOrder() and simplify AssetPatch.fromVisibility() factory
- Replace null-chain AssetPatch constructors in ChannelDirectoryService with forOrder()
- Extract OAuthTokenCipher.buildFromKeys() to deduplicate two fromEnvironment() overloads
- Replace inline upload-size guards in createAsset/createScriptAttachment with enforceUploadLimit()
- Make script attachment content endpoint public for all channels (not just hard-coded 'gasolinebased')
- Extract StringNormalizer.toLowerCaseRoot() utility and use it in ChannelDirectoryService/ChannelSettingsService
2026-04-21 16:12:31 +02:00
ges f62d01c30a refactor: standardize logger field name to LOG across all production classes 2026-04-21 16:05:20 +02:00
ges c9c5dc6eab fix: update test to use MarketplaceService.listScripts after method was moved 2026-04-21 16:03:07 +02:00
ges 009c8f21fb Extract ChannelSettingsService for canvas and script-overlay settings; add ChannelSettingsServiceTest 2026-04-21 15:47:25 +02:00
ges 0dd1a7418d Extract AllowedDomainNormalizer utility; remove @Autowired, dead constants, and inline VISUAL_ASSET_TYPES duplication 2026-04-21 15:28:54 +02:00
ges b741fb176a Add tests for VersionService, GithubReleaseService, AuditLogService, AuthorizationService, MarketplaceScriptSeedLoader; fix duplicate import in ChannelDirectoryService 2026-04-21 15:23:40 +02:00
ges 3bcd6d6747 Add volume limiter 2026-03-13 16:36:21 +01:00
ges e7af8907b4 Add GitInfoService 2026-03-13 15:21:53 +01:00
ges 0975c039a0 Cleanup chanenls 2026-02-13 14:16:52 +01:00
ges c4bed3f050 Add todos 2026-02-10 13:44:21 +01:00
ges 45fb1921da Bump version 0.0.3 2026-02-09 17:15:45 +01:00
ges ed5007538b Add instant updates to assset transformations 2026-02-09 17:15:29 +01:00
ges 0f088dc83b Bump version 2026-02-09 16:40:35 +01:00
ges fe6fb68b53 Reduce repaints of asset list 0.0.2 2026-02-09 16:33:25 +01:00
ges 1c6d115181 Fix ordering 2026-02-09 16:28:05 +01:00
ges 1c118aab0c Update AGENTS.md file 2026-02-09 16:27:59 +01:00
ges d6271b1758 Deferred emote sync 2026-01-30 08:51:55 +01:00
ges f9613c7c2f Add emote sync 2026-01-29 16:56:20 +01:00
ges 1d48b7d5e7 Major refactor 2026-01-27 23:15:29 +01:00
ges 39bb599219 Refactor models 2026-01-27 15:40:55 +01:00
ges 9cf25a4351 New CI 0.0.1 2026-01-26 18:20:46 +01:00
ges ebdd9e9f18 Add missing transactions 2026-01-26 18:05:23 +01:00
ges b57420d727 Add domain allow-list for script assets 2026-01-25 14:01:53 +01:00
ges b115e16f11 Add text rendering and ttf support 2026-01-25 11:51:37 +01:00
ges d22a2ca93c Add APNG support 2026-01-25 11:38:08 +01:00
ges 92a5578e06 Add keepalive 2026-01-25 11:06:26 +01:00
ges c96918340a Separate audit log db 2026-01-23 18:14:09 +01:00
ges e578007115 Remove docs chip in logout 2026-01-23 17:05:00 +01:00
ges 8c8cd0f42d Add docs link 2026-01-23 17:03:47 +01:00
ges 6ee91c8b0c Add social embed 2026-01-23 17:03:06 +01:00
ges d78db75aeb Use int values for canvas size 2026-01-23 16:33:51 +01:00
ges f881d73dcc Remove redundant badge 2026-01-23 16:30:30 +01:00
ges 2da8b6b81e Pagination on audit log 2026-01-23 13:59:32 +01:00