Documentation ¶
Index ¶
- Constants
- Variables
- func AddDefaultApiKey(c *gin.Context)
- func ApiKeyChecker() gin.HandlerFunc
- func Fetch(uri, method string, header http.Header, body map[string]interface{}) (model.HttpRes[*jsons.Item], http.Header)
- func HandleImages(c *gin.Context)
- func LoadCacheItems(c *gin.Context)
- func ProxyOrigin(c *gin.Context)
- func ProxySocket() func(*gin.Context)
- func ProxySubtitles(c *gin.Context)
- func RandomItemsWithLimit(c *gin.Context)
- func RawFetch(uri, method string, header http.Header, body io.ReadCloser) (model.HttpRes[*jsons.Item], http.Header)
- func Redirect2AlistLink(c *gin.Context)
- func Redirect2Transcode(c *gin.Context)
- func RedirectOrigin(c *gin.Context)
- func ResortEpisodes(c *gin.Context)
- func ResortRandomItems(c *gin.Context)
- func TestProxyUri(c *gin.Context) bool
- func TransferPlaybackInfo(c *gin.Context)
- type ApiKeyType
- type ItemInfo
- type MsInfo
Constants ¶
const ( QueryApiKeyName = "api_key" QueryTokenName = "X-Emby-Token" HeaderAuthName = "Authorization" HeaderFullAuthName = "X-Emby-Authorization" )
const ( // ItemsCacheSpace 专门存放 items 信息的缓存空间 ItemsCacheSpace = "UserItems" // ResortMinNum 至少请求多少个 item 时才会走重排序逻辑 ResortMinNum = 300 )
const ( // PlaybackCacheSpace PlaybackInfo 的缓存空间 key PlaybackCacheSpace = "PlaybackInfo" // MasterM3U8UrlTemplate 转码 m3u8 地址模板 MasterM3U8UrlTemplate = `` /* 764-byte string literal not displayed */ // PlaybackCommonPayload 请求 PlaybackInfo 的通用请求体 PlaybackCommonPayload = `` /* 4055-byte string literal not displayed */ )
const AuthUri = "/emby/Auth/Keys"
AuthUri 鉴权地址
通过此 uri, 可以判断出客户端传递的 api_key 是否是被 emby 服务器认可的
const MediaSourceIdSegment = "[[_]]"
MediaSourceIdSegment 自定义 MediaSourceId 的分隔符
Variables ¶
var ( // ValidCacheItemsTypeRegex 校验 Items 的 Type 参数, 通过正则才覆盖 PlaybackInfo 缓存 ValidCacheItemsTypeRegex = regexp.MustCompile(`(?i)(movie|episode)`) // UnvalidCacheItemsUARegex 特定客户端的 Items 请求, 不覆盖 PlaybackInfo 缓存 UnvalidCacheItemsUARegex = regexp.MustCompile(`(?i)(infuse)`) )
var NoRedirectClients = map[string]struct{}{
"Emby for iOS": {},
"Emby for macOS": {},
"Emby for Android": {},
}
NoRedirectClients 不使用重定向的客户端
Functions ¶
func AddDefaultApiKey ¶
AddDefaultApiKey 为请求加上 api_key
如果检测到已经包含了 api_key 或者 X-Emby-Token 则取消操作
如果已经成功加上了 api_key, 则移除请求头的 Authorization 属性
func ApiKeyChecker ¶
func ApiKeyChecker() gin.HandlerFunc
ApiKeyChecker 对指定的 api 进行鉴权
该中间件会将客户端传递的 api_key 发送给 emby 服务器, 如果 emby 返回 401 异常 说明这个 api_key 是客户端伪造的, 阻断客户端的请求
func Fetch ¶
func Fetch(uri, method string, header http.Header, body map[string]interface{}) (model.HttpRes[*jsons.Item], http.Header)
Fetch 请求 emby api 接口, 使用 map 请求体
如果 uri 中不包含 token, 自动从配置中取 token 进行拼接
func LoadCacheItems ¶
LoadCacheItems 拦截并代理 items 接口
如果 PlaybackInfo 缓存空间有相应的缓存 则将缓存中的 MediaSources 信息覆盖到响应中
防止转码资源信息丢失
func ProxySocket ¶
func RandomItemsWithLimit ¶
RandomItemsWithLimit 代理原始的随机列表接口
func RawFetch ¶
func RawFetch(uri, method string, header http.Header, body io.ReadCloser) (model.HttpRes[*jsons.Item], http.Header)
RawFetch 请求 emby api 接口, 使用流式请求体
如果 uri 中不包含 token, 自动从配置中取 token 进行拼接
func Redirect2AlistLink ¶
Redirect2AlistLink 重定向资源到 alist 网盘直链
func Redirect2Transcode ¶
Redirect2Transcode 将 master 请求重定向到本地 ts 代理
func RedirectOrigin ¶
RedirectOrigin 将 GET 请求 308 重定向到源服务器 其他请求走本地代理
func ResortRandomItems ¶
ResortRandomItems 对随机的 items 列表进行重排序
func TestProxyUri ¶
TestProxyUri 用于测试的代理, 主要是为了查看实际请求的详细信息, 方便测试
func TransferPlaybackInfo ¶
TransferPlaybackInfo 代理 PlaybackInfo 接口, 防止客户端转码
Types ¶
type ApiKeyType ¶
type ApiKeyType string
ApiKeyType 标记 emby 支持的不同种 api_key 传递方式
const ( Query ApiKeyType = "query" // query 参数中的 api_key Header ApiKeyType = "header" // 请求头中的 Authorization )
type ItemInfo ¶
type ItemInfo struct { Id string // item id MsInfo MsInfo // MediaSourceId 解析信息 ApiKey string // emby 接口密钥 PlaybackInfoUri string // item 信息查询接口 uri, 通过源服务器查询 }
ItemInfo emby 资源 item 解析信息
type MsInfo ¶
type MsInfo struct { Empty bool // 传递的 id 是否是个空值 Transcode bool // 是否请求转码的资源 OriginId string // 原始 MediaSourceId RawId string // 未经过解析的原始请求 Id TemplateId string // alist 中转码资源的模板 id Format string // 转码资源的格式, 比如:1920x1080 SourceNamePrefix string // 转码资源名称前缀 AlistPath string // 资源在 alist 中的地址 }
MsInfo MediaSourceId 解析信息