2023-09-11 15:43:09 +00:00
/ *
2024-01-14 18:39:14 +00:00
Copyright © 2024 Seednode < seednode @ seedno . de >
2023-09-11 15:43:09 +00:00
* /
2023-09-13 04:35:17 +00:00
package video
2023-09-11 15:43:09 +00:00
import (
"fmt"
2024-01-30 19:07:59 +00:00
"net/http"
2023-09-14 22:37:22 +00:00
"path/filepath"
2023-09-12 21:32:19 +00:00
"strings"
2023-09-13 04:35:17 +00:00
"seedno.de/seednode/roulette/types"
2023-09-11 15:43:09 +00:00
)
2024-01-14 18:39:14 +00:00
type Format struct { }
2023-09-13 01:56:39 +00:00
2024-01-30 19:07:59 +00:00
func ( t Format ) CSP ( w http . ResponseWriter ) string {
2024-01-30 19:22:42 +00:00
nonce := types . GetNonce ( 6 )
w . Header ( ) . Add ( "Content-Security-Policy" , fmt . Sprintf ( "default-src 'self' 'nonce-%s';" , nonce ) )
return nonce
2024-01-30 19:07:59 +00:00
}
func ( t Format ) CSS ( ) string {
2023-09-13 01:56:39 +00:00
var css strings . Builder
css . WriteString ( ` html,body { margin:0;padding:0;height:100%;} ` )
css . WriteString ( ` a { color:inherit;display:block;height:100%;width:100%;text-decoration:none;} ` )
css . WriteString ( ` video { margin:auto;display:block;max-width:97%;max-height:97%; ` )
css . WriteString ( ` object-fit:scale-down;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);} ` )
return css . String ( )
}
2023-09-15 19:28:21 +00:00
func ( t Format ) Title ( rootUrl , fileUri , filePath , fileName , prefix , mime string ) ( string , error ) {
return fmt . Sprintf ( ` <title>%s</title> ` , fileName ) , nil
2023-09-13 01:56:39 +00:00
}
2024-01-30 19:07:59 +00:00
func ( t Format ) Body ( rootUrl , fileUri , filePath , fileName , prefix , mime , nonce string ) ( string , error ) {
2024-01-30 19:22:42 +00:00
return fmt . Sprintf ( ` <a href="%s"><video nonce=%q controls autoplay loop preload="auto"><source src="%s" type="%s" alt="Roulette selected: %s">Your browser does not support the video tag.</video></a> ` ,
2023-09-14 04:24:29 +00:00
rootUrl ,
2024-01-30 19:22:42 +00:00
nonce ,
2023-09-13 01:56:39 +00:00
fileUri ,
mime ,
2023-09-15 19:28:21 +00:00
fileName ) , nil
2023-09-13 01:56:39 +00:00
}
2023-09-13 04:35:17 +00:00
func ( t Format ) Extensions ( ) map [ string ] string {
2023-09-13 01:56:39 +00:00
return map [ string ] string {
` .mp4 ` : ` video/mp4 ` ,
` .ogm ` : ` video/ogg ` ,
` .ogv ` : ` video/ogg ` ,
` .webm ` : ` video/webm ` ,
2023-09-11 15:43:09 +00:00
}
}
2023-09-13 01:56:39 +00:00
2023-10-09 14:47:17 +00:00
func ( t Format ) MediaType ( path string ) string {
2023-09-14 22:37:22 +00:00
extensions := t . Extensions ( )
extension := filepath . Ext ( path )
value , exists := extensions [ extension ]
if exists {
return value
2023-09-13 01:56:39 +00:00
}
2023-09-14 22:37:22 +00:00
return ""
2023-09-13 01:56:39 +00:00
}
2023-09-13 04:35:17 +00:00
func ( t Format ) Validate ( filePath string ) bool {
2023-09-13 01:56:39 +00:00
return true
}
2023-09-13 04:35:17 +00:00
2023-09-15 20:13:45 +00:00
func ( t Format ) Type ( ) string {
return "embed"
}
2023-09-13 14:26:15 +00:00
func init ( ) {
2023-09-29 19:36:11 +00:00
types . SupportedFormats . Register ( Format { } )
2023-09-13 04:35:17 +00:00
}