mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Add prefix to back/auth/transcoder (#747)
This commit is contained in:
commit
c427d080c7
@ -1,6 +1,9 @@
|
|||||||
# vi: ft=sh
|
# vi: ft=sh
|
||||||
# shellcheck disable=SC2034
|
# shellcheck disable=SC2034
|
||||||
|
|
||||||
|
# http route prefix (will listen to $KEIBI_PREFIX/users for example)
|
||||||
|
KEIBI_PREFIX=""
|
||||||
|
|
||||||
# Database things
|
# Database things
|
||||||
POSTGRES_USER=kyoo
|
POSTGRES_USER=kyoo
|
||||||
POSTGRES_PASSWORD=password
|
POSTGRES_PASSWORD=password
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"crypto/rsa"
|
"crypto/rsa"
|
||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"encoding/pem"
|
"encoding/pem"
|
||||||
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/golang-jwt/jwt/v5"
|
"github.com/golang-jwt/jwt/v5"
|
||||||
@ -13,6 +14,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Configuration struct {
|
type Configuration struct {
|
||||||
|
Prefix string
|
||||||
JwtPrivateKey *rsa.PrivateKey
|
JwtPrivateKey *rsa.PrivateKey
|
||||||
JwtPublicKey *rsa.PublicKey
|
JwtPublicKey *rsa.PublicKey
|
||||||
Issuer string
|
Issuer string
|
||||||
@ -52,6 +54,8 @@ func LoadConfiguration(db *dbc.Queries) (*Configuration, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret.Prefix = os.Getenv("KEIBI_PREFIX")
|
||||||
|
|
||||||
if ret.JwtPrivateKey == nil {
|
if ret.JwtPrivateKey == nil {
|
||||||
ret.JwtPrivateKey, err = rsa.GenerateKey(rand.Reader, 4096)
|
ret.JwtPrivateKey, err = rsa.GenerateKey(rand.Reader, 4096)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
15
auth/main.go
15
auth/main.go
@ -163,29 +163,30 @@ func main() {
|
|||||||
}
|
}
|
||||||
h.config = conf
|
h.config = conf
|
||||||
|
|
||||||
r := e.Group("")
|
g := e.Group(conf.Prefix)
|
||||||
|
r := e.Group(conf.Prefix)
|
||||||
r.Use(echojwt.WithConfig(echojwt.Config{
|
r.Use(echojwt.WithConfig(echojwt.Config{
|
||||||
SigningMethod: "RS256",
|
SigningMethod: "RS256",
|
||||||
SigningKey: h.config.JwtPublicKey,
|
SigningKey: h.config.JwtPublicKey,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
e.GET("/health", h.CheckHealth)
|
g.GET("/health", h.CheckHealth)
|
||||||
|
|
||||||
r.GET("/users", h.ListUsers)
|
r.GET("/users", h.ListUsers)
|
||||||
r.GET("/users/:id", h.GetUser)
|
r.GET("/users/:id", h.GetUser)
|
||||||
r.GET("/users/me", h.GetMe)
|
r.GET("/users/me", h.GetMe)
|
||||||
r.DELETE("/users/:id", h.DeleteUser)
|
r.DELETE("/users/:id", h.DeleteUser)
|
||||||
r.DELETE("/users/me", h.DeleteSelf)
|
r.DELETE("/users/me", h.DeleteSelf)
|
||||||
e.POST("/users", h.Register)
|
g.POST("/users", h.Register)
|
||||||
|
|
||||||
e.POST("/sessions", h.Login)
|
g.POST("/sessions", h.Login)
|
||||||
r.DELETE("/sessions", h.Logout)
|
r.DELETE("/sessions", h.Logout)
|
||||||
r.DELETE("/sessions/:id", h.Logout)
|
r.DELETE("/sessions/:id", h.Logout)
|
||||||
|
|
||||||
e.GET("/jwt", h.CreateJwt)
|
g.GET("/jwt", h.CreateJwt)
|
||||||
e.GET("/info", h.GetInfo)
|
g.GET("/info", h.GetInfo)
|
||||||
|
|
||||||
e.GET("/swagger/*", echoSwagger.WrapHandler)
|
g.GET("/swagger/*", echoSwagger.WrapHandler)
|
||||||
|
|
||||||
e.Logger.Fatal(e.Start(":4568"))
|
e.Logger.Fatal(e.Start(":4568"))
|
||||||
}
|
}
|
||||||
|
5
back/.env.example
Normal file
5
back/.env.example
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# vi: ft=sh
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
|
||||||
|
# http route prefix (will listen to $KYOO_PREFIX/movie for example)
|
||||||
|
KYOO_PREFIX=""
|
@ -17,7 +17,6 @@
|
|||||||
// along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
// along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using Kyoo.Abstractions.Controllers;
|
|
||||||
using Kyoo.Authentication;
|
using Kyoo.Authentication;
|
||||||
using Kyoo.Core;
|
using Kyoo.Core;
|
||||||
using Kyoo.Core.Controllers;
|
using Kyoo.Core.Controllers;
|
||||||
@ -28,6 +27,7 @@ using Kyoo.RabbitMq;
|
|||||||
using Kyoo.Swagger;
|
using Kyoo.Swagger;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
@ -85,6 +85,7 @@ builder.ConfigureRabbitMq();
|
|||||||
WebApplication app = builder.Build();
|
WebApplication app = builder.Build();
|
||||||
CoreModule.Services = app.Services;
|
CoreModule.Services = app.Services;
|
||||||
|
|
||||||
|
app.UsePathBase(new PathString(builder.Configuration.GetValue("KYOO_PREFIX", "")));
|
||||||
app.UseHsts();
|
app.UseHsts();
|
||||||
app.UseKyooOpenApi();
|
app.UseKyooOpenApi();
|
||||||
app.UseResponseCompression();
|
app.UseResponseCompression();
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MeiliSearch" Version="0.15.5" />
|
<PackageReference Include="MeiliSearch" Version="0.15.4" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -19,7 +19,8 @@ services:
|
|||||||
build: ./back
|
build: ./back
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
- TRANSCODER_URL=${TRANSCODER_URL:-http://transcoder:7666}
|
- TRANSCODER_URL=${TRANSCODER_URL:-http://transcoder:7666/video}
|
||||||
|
- KYOO_PREFIX=/api
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
depends_on:
|
depends_on:
|
||||||
@ -36,9 +37,6 @@ services:
|
|||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.api.rule=PathPrefix(`/api/`)"
|
- "traefik.http.routers.api.rule=PathPrefix(`/api/`)"
|
||||||
- "traefik.http.routers.api.middlewares=api-sp"
|
|
||||||
- "traefik.http.middlewares.api-sp.stripprefix.prefixes=/api"
|
|
||||||
- "traefik.http.middlewares.api-sp.stripprefix.forceSlash=false"
|
|
||||||
|
|
||||||
migrations:
|
migrations:
|
||||||
build:
|
build:
|
||||||
@ -55,7 +53,7 @@ services:
|
|||||||
build: ./front
|
build: ./front
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
- KYOO_URL=${KYOO_URL:-http://back:5000}
|
- KYOO_URL=${KYOO_URL:-http://back:5000/api}
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.front.rule=PathPrefix(`/`)"
|
- "traefik.http.routers.front.rule=PathPrefix(`/`)"
|
||||||
@ -68,12 +66,11 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
|
environment:
|
||||||
|
- KEIBI_PREFIX=/auth
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.auth.rule=PathPrefix(`/auth/`)"
|
- "traefik.http.routers.auth.rule=PathPrefix(`/auth/`)"
|
||||||
- "traefik.http.routers.auth.middlewares=auth-sp"
|
|
||||||
- "traefik.http.middlewares.auth-sp.stripprefix.prefixes=/auth"
|
|
||||||
- "traefik.http.middlewares.auth-sp.stripprefix.forceSlash=false"
|
|
||||||
profiles:
|
profiles:
|
||||||
- "v5"
|
- "v5"
|
||||||
|
|
||||||
@ -86,7 +83,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
environment:
|
environment:
|
||||||
- KYOO_URL=${KYOO_URL:-http://back:5000}
|
- KYOO_URL=${KYOO_URL:-http://back:5000/api}
|
||||||
volumes:
|
volumes:
|
||||||
- ${LIBRARY_ROOT}:/video:ro
|
- ${LIBRARY_ROOT}:/video:ro
|
||||||
|
|
||||||
@ -100,7 +97,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
environment:
|
environment:
|
||||||
- KYOO_URL=${KYOO_URL:-http://back:5000}
|
- KYOO_URL=${KYOO_URL:-http://back:5000/api}
|
||||||
|
|
||||||
autosync:
|
autosync:
|
||||||
build: ./autosync
|
build: ./autosync
|
||||||
|
@ -29,7 +29,8 @@ services:
|
|||||||
- "5000:5000"
|
- "5000:5000"
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
- TRANSCODER_URL=${TRANSCODER_URL:-http://transcoder:7666}
|
- TRANSCODER_URL=${TRANSCODER_URL:-http://transcoder:7666/video}
|
||||||
|
- KYOO_PREFIX=/api
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
depends_on:
|
depends_on:
|
||||||
@ -48,9 +49,6 @@ services:
|
|||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.api.rule=PathPrefix(`/api/`)"
|
- "traefik.http.routers.api.rule=PathPrefix(`/api/`)"
|
||||||
- "traefik.http.routers.api.middlewares=api-sp"
|
|
||||||
- "traefik.http.middlewares.api-sp.stripprefix.prefixes=/api"
|
|
||||||
- "traefik.http.middlewares.api-sp.stripprefix.forceSlash=false"
|
|
||||||
|
|
||||||
migrations:
|
migrations:
|
||||||
build:
|
build:
|
||||||
@ -79,7 +77,7 @@ services:
|
|||||||
- "8081:8081"
|
- "8081:8081"
|
||||||
restart: on-failure
|
restart: on-failure
|
||||||
environment:
|
environment:
|
||||||
- KYOO_URL=${KYOO_URL:-http://back:5000}
|
- KYOO_URL=${KYOO_URL:-http://back:5000/api}
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.front.rule=PathPrefix(`/`)"
|
- "traefik.http.routers.front.rule=PathPrefix(`/`)"
|
||||||
@ -96,14 +94,13 @@ services:
|
|||||||
- "4568:4568"
|
- "4568:4568"
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
|
environment:
|
||||||
|
- KEIBI_PREFIX=/auth
|
||||||
volumes:
|
volumes:
|
||||||
- ./auth:/app
|
- ./auth:/app
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.auth.rule=PathPrefix(`/auth/`)"
|
- "traefik.http.routers.auth.rule=PathPrefix(`/auth/`)"
|
||||||
- "traefik.http.routers.auth.middlewares=auth-sp"
|
|
||||||
- "traefik.http.middlewares.auth-sp.stripprefix.prefixes=/auth"
|
|
||||||
- "traefik.http.middlewares.auth-sp.stripprefix.forceSlash=false"
|
|
||||||
|
|
||||||
scanner:
|
scanner:
|
||||||
build: ./scanner
|
build: ./scanner
|
||||||
@ -114,7 +111,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
environment:
|
environment:
|
||||||
- KYOO_URL=${KYOO_URL:-http://back:5000}
|
- KYOO_URL=${KYOO_URL:-http://back:5000/api}
|
||||||
volumes:
|
volumes:
|
||||||
- ${LIBRARY_ROOT}:/video:ro
|
- ${LIBRARY_ROOT}:/video:ro
|
||||||
|
|
||||||
@ -128,7 +125,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
environment:
|
environment:
|
||||||
- KYOO_URL=${KYOO_URL:-http://back:5000}
|
- KYOO_URL=${KYOO_URL:-http://back:5000/api}
|
||||||
|
|
||||||
autosync:
|
autosync:
|
||||||
build: ./autosync
|
build: ./autosync
|
||||||
|
@ -20,7 +20,8 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
cpus: 1.5
|
cpus: 1.5
|
||||||
environment:
|
environment:
|
||||||
- TRANSCODER_URL=${TRANSCODER_URL:-http://transcoder:7666}
|
- TRANSCODER_URL=${TRANSCODER_URL:-http://transcoder:7666/video}
|
||||||
|
- KYOO_PREFIX=/api
|
||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
depends_on:
|
depends_on:
|
||||||
@ -37,9 +38,6 @@ services:
|
|||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.api.rule=PathPrefix(`/api/`)"
|
- "traefik.http.routers.api.rule=PathPrefix(`/api/`)"
|
||||||
- "traefik.http.routers.api.middlewares=api-sp"
|
|
||||||
- "traefik.http.middlewares.api-sp.stripprefix.prefixes=/api"
|
|
||||||
- "traefik.http.middlewares.api-sp.stripprefix.forceSlash=false"
|
|
||||||
|
|
||||||
migrations:
|
migrations:
|
||||||
image: ghcr.io/zoriya/kyoo_migrations:edge
|
image: ghcr.io/zoriya/kyoo_migrations:edge
|
||||||
@ -54,7 +52,7 @@ services:
|
|||||||
image: ghcr.io/zoriya/kyoo_front:edge
|
image: ghcr.io/zoriya/kyoo_front:edge
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
- KYOO_URL=${KYOO_URL:-http://back:5000}
|
- KYOO_URL=${KYOO_URL:-http://back:5000/api}
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.front.rule=PathPrefix(`/`)"
|
- "traefik.http.routers.front.rule=PathPrefix(`/`)"
|
||||||
@ -68,7 +66,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
environment:
|
environment:
|
||||||
- KYOO_URL=${KYOO_URL:-http://back:5000}
|
- KYOO_URL=${KYOO_URL:-http://back:5000/api}
|
||||||
volumes:
|
volumes:
|
||||||
- ${LIBRARY_ROOT}:/video:ro
|
- ${LIBRARY_ROOT}:/video:ro
|
||||||
|
|
||||||
@ -82,7 +80,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- ./.env
|
- ./.env
|
||||||
environment:
|
environment:
|
||||||
- KYOO_URL=${KYOO_URL:-http://back:5000}
|
- KYOO_URL=${KYOO_URL:-http://back:5000/api}
|
||||||
|
|
||||||
autosync:
|
autosync:
|
||||||
image: ghcr.io/zoriya/kyoo_autosync:edge
|
image: ghcr.io/zoriya/kyoo_autosync:edge
|
||||||
|
@ -308,18 +308,19 @@ func main() {
|
|||||||
metadata: metadata,
|
metadata: metadata,
|
||||||
}
|
}
|
||||||
|
|
||||||
e.GET("/:path/direct", DirectStream)
|
g := e.Group(src.Settings.RoutePrefix)
|
||||||
e.GET("/:path/direct/:identifier", DirectStream)
|
g.GET("/:path/direct", DirectStream)
|
||||||
e.GET("/:path/master.m3u8", h.GetMaster)
|
g.GET("/:path/direct/:identifier", DirectStream)
|
||||||
e.GET("/:path/:video/:quality/index.m3u8", h.GetVideoIndex)
|
g.GET("/:path/master.m3u8", h.GetMaster)
|
||||||
e.GET("/:path/audio/:audio/index.m3u8", h.GetAudioIndex)
|
g.GET("/:path/:video/:quality/index.m3u8", h.GetVideoIndex)
|
||||||
e.GET("/:path/:video/:quality/:chunk", h.GetVideoSegment)
|
g.GET("/:path/audio/:audio/index.m3u8", h.GetAudioIndex)
|
||||||
e.GET("/:path/audio/:audio/:chunk", h.GetAudioSegment)
|
g.GET("/:path/:video/:quality/:chunk", h.GetVideoSegment)
|
||||||
e.GET("/:path/info", h.GetInfo)
|
g.GET("/:path/audio/:audio/:chunk", h.GetAudioSegment)
|
||||||
e.GET("/:path/thumbnails.png", h.GetThumbnails)
|
g.GET("/:path/info", h.GetInfo)
|
||||||
e.GET("/:path/thumbnails.vtt", h.GetThumbnailsVtt)
|
g.GET("/:path/thumbnails.png", h.GetThumbnails)
|
||||||
e.GET("/:path/attachment/:name", h.GetAttachment)
|
g.GET("/:path/thumbnails.vtt", h.GetThumbnailsVtt)
|
||||||
e.GET("/:path/subtitle/:name", h.GetSubtitle)
|
g.GET("/:path/attachment/:name", h.GetAttachment)
|
||||||
|
g.GET("/:path/subtitle/:name", h.GetSubtitle)
|
||||||
|
|
||||||
e.Logger.Fatal(e.Start(":7666"))
|
e.Logger.Fatal(e.Start(":7666"))
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user