This commit is contained in:
Darko Luketic 2024-12-30 23:56:13 +01:00
commit d7841b32be
8 changed files with 169 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.idea

0
LICENSE Normal file
View File

48
README.md Normal file
View File

@ -0,0 +1,48 @@
# rtmp auth
## Usage
In a nginx rtmp config like this
```nginx
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
on_publish http://127.0.0.1:31337/auth;
push ...;
}
}
```
You would
```bash
RTMPAUTH_PASS="3lit3dud3" rtmpauth simple -p 31337
```
## Install
```bash
go install code.icod.de/dalu/rtmpauth
mv ~/go/bin/rtmpauth /usr/local/bin/
```
systemd service
```systemd
[Unit]
Description=rtmpauth service
After=local-fs.target network.target nginx.service
Wants=nginx.service
[Service]
User=nginx
Group=nginx
Type=simple
ExecStart=/usr/local/bin/rtmpauth simple
Restart=on-failure
RestartSec=3s
[Install]
WantedBy=multi-user.target
```

37
cmd/root.go Normal file
View File

@ -0,0 +1,37 @@
package cmd
import (
"os"
"github.com/spf13/cobra"
)
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "rtmpauth",
Short: "A brief description of your application",
// Uncomment the following line if your bare application
// has an action associated with it:
// Run: func(cmd *cobra.Command, args []string) { },
}
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() {
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
}
}
func init() {
// Here you will define your flags and configuration settings.
// Cobra supports persistent flags, which, if defined here,
// will be global for your application.
// rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.rtmpauth.yaml)")
// Cobra also supports local flags, which will only run
// when this action is called directly.
rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}

47
cmd/simple.go Normal file
View File

@ -0,0 +1,47 @@
package cmd
import (
"fmt"
"net/http"
"os"
"github.com/dchest/uniuri"
"github.com/spf13/cobra"
)
var port = "31337"
// simpleCmd represents the simple command
var simpleCmd = &cobra.Command{
Use: "simple",
Short: "simple password comparison",
RunE: func(cmd *cobra.Command, args []string) error {
var pass = os.Getenv("RTMPAUTH_PASS")
if pass == "" {
pass = uniuri.New()
}
fmt.Println("Stream password:", pass)
return http.ListenAndServe(fmt.Sprintf("127.0.0.1:%s", port), http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.FormValue("name") == pass {
w.WriteHeader(http.StatusOK)
} else {
w.WriteHeader(http.StatusForbidden)
}
}))
},
}
func init() {
rootCmd.AddCommand(simpleCmd)
// Here you will define your flags and configuration settings.
// Cobra supports Persistent Flags which will work for this command
// and all subcommands, e.g.:
// simpleCmd.PersistentFlags().String("foo", "", "A help for foo")
// Cobra supports local flags which will only run when this command
// is called directly, e.g.:
// simpleCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
simpleCmd.Flags().StringVarP(&port, "port", "p", "31337", "Port to listen on")
}

13
go.mod Normal file
View File

@ -0,0 +1,13 @@
module code.icod.de/dalu/rtmpauth
go 1.23
require (
github.com/dchest/uniuri v1.2.0
github.com/spf13/cobra v1.8.1
)
require (
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
)

12
go.sum Normal file
View File

@ -0,0 +1,12 @@
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/dchest/uniuri v1.2.0 h1:koIcOUdrTIivZgSLhHQvKgqdWZq5d7KdMEWF1Ud6+5g=
github.com/dchest/uniuri v1.2.0/go.mod h1:fSzm4SLHzNZvWLvWJew423PhAzkpNQYq+uNLq4kxhkY=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

11
main.go Normal file
View File

@ -0,0 +1,11 @@
/*
Copyright © 2024 NAME HERE <EMAIL ADDRESS>
*/
package main
import "code.icod.de/dalu/rtmpauth/cmd"
func main() {
cmd.Execute()
}