mirror of
https://github.com/aunefyren/wrapperr
synced 2024-11-10 05:34:12 +00:00
Changes
Create share links without Plex Auth Delete old share links once a day Pull friendly name for requester from Tautulli
This commit is contained in:
parent
07a12ade2b
commit
0e69e26941
8 changed files with 183 additions and 65 deletions
|
@ -9,12 +9,14 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var link_path, _ = filepath.Abs("./config/links")
|
var link_path, _ = filepath.Abs("./config/links")
|
||||||
|
|
||||||
// Save new link object to the correct path
|
// Save new link object to the correct path
|
||||||
func SaveLink(link_object *models.WrapperrShareLink) error {
|
func SaveLink(link_object *models.WrapperrShareLink, plexAuth bool) error {
|
||||||
|
|
||||||
// Check if the link folder exists
|
// Check if the link folder exists
|
||||||
err := CheckLinkDir()
|
err := CheckLinkDir()
|
||||||
|
@ -27,7 +29,12 @@ func SaveLink(link_object *models.WrapperrShareLink) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var link_object_path, _ = filepath.Abs(link_path + "/" + strconv.Itoa(link_object.UserID) + ".json")
|
var link_object_path string
|
||||||
|
if plexAuth {
|
||||||
|
link_object_path, _ = filepath.Abs(link_path + "/" + strconv.Itoa(link_object.UserID) + ".json")
|
||||||
|
} else {
|
||||||
|
link_object_path, _ = filepath.Abs(link_path + "/" + link_object.Hash + ".json")
|
||||||
|
}
|
||||||
|
|
||||||
err = ioutil.WriteFile(link_object_path, file, 0644)
|
err = ioutil.WriteFile(link_object_path, file, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -64,8 +71,22 @@ func CheckLinkDir() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DeleteLink(fileName string) error {
|
||||||
|
linkpath, err := filepath.Abs(link_path + "/" + fileName + ".json")
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Failed to create path. Error: " + err.Error())
|
||||||
|
return errors.New("Failed to create path.")
|
||||||
|
}
|
||||||
|
err = os.Remove(linkpath)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Failed to delete file. Error: " + err.Error())
|
||||||
|
return errors.New("Failed to delete file.")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Read
|
// Read
|
||||||
func GetLink(UserID string) (*models.WrapperrShareLink, error) {
|
func GetLink(fileName string) (*models.WrapperrShareLink, error) {
|
||||||
// Check if the link folder exists
|
// Check if the link folder exists
|
||||||
err := CheckLinkDir()
|
err := CheckLinkDir()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -74,13 +95,14 @@ func GetLink(UserID string) (*models.WrapperrShareLink, error) {
|
||||||
|
|
||||||
link_object := models.WrapperrShareLink{}
|
link_object := models.WrapperrShareLink{}
|
||||||
|
|
||||||
share_link_path, err := filepath.Abs(link_path + "/" + UserID + ".json")
|
share_link_path, err := filepath.Abs(link_path + "/" + fileName + ".json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = os.Stat(share_link_path)
|
_, err = os.Stat(share_link_path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Println("Failed to load file from path. Returning error. Error: " + err.Error())
|
||||||
return nil, errors.New("Invalid share link.")
|
return nil, errors.New("Invalid share link.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,10 +116,47 @@ func GetLink(UserID string) (*models.WrapperrShareLink, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if link_object.Expired {
|
|
||||||
return nil, errors.New("This Wrapped link has expired.")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return config object
|
// Return config object
|
||||||
return &link_object, nil
|
return &link_object, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CleanOldShareableLinks() {
|
||||||
|
// Check if the link folder exists
|
||||||
|
err := CheckLinkDir()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Failed to verify link directory exists. Error: " + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
items, _ := ioutil.ReadDir(link_path)
|
||||||
|
|
||||||
|
for _, item := range items {
|
||||||
|
if item.IsDir() {
|
||||||
|
continue
|
||||||
|
} else {
|
||||||
|
if strings.HasSuffix(strings.ToLower(item.Name()), ".json") {
|
||||||
|
fileNameParts := strings.Split(item.Name(), ".")
|
||||||
|
if len(fileNameParts) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
linkObject, err := GetLink(fileNameParts[0])
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Failed to load " + item.Name() + ". Error: " + err.Error())
|
||||||
|
}
|
||||||
|
now := time.Now()
|
||||||
|
linkTime, err := time.Parse("2006-01-02", linkObject.Date)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Failed to parse " + item.Name() + " datetime. Error: " + err.Error())
|
||||||
|
}
|
||||||
|
linkTime = linkTime.Add(7 * 24 * time.Hour)
|
||||||
|
if linkTime.Before(now) {
|
||||||
|
log.Println("Deleting " + item.Name() + ".")
|
||||||
|
err = DeleteLink(fileNameParts[0])
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Failed to delete " + item.Name() + ". Error: " + err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -11,3 +11,5 @@ require (
|
||||||
github.com/patrickmn/sortutil v0.0.0-20120526081524-abeda66eb583
|
github.com/patrickmn/sortutil v0.0.0-20120526081524-abeda66eb583
|
||||||
golang.org/x/crypto v0.14.0
|
golang.org/x/crypto v0.14.0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
require github.com/procyon-projects/chrono v1.1.2 // indirect
|
||||||
|
|
8
go.sum
8
go.sum
|
@ -1,3 +1,4 @@
|
||||||
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/golang-jwt/jwt/v5 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
|
github.com/golang-jwt/jwt/v5 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
|
||||||
github.com/golang-jwt/jwt/v5 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
github.com/golang-jwt/jwt/v5 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||||
github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=
|
github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=
|
||||||
|
@ -14,7 +15,14 @@ github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uia
|
||||||
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
|
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
|
||||||
github.com/patrickmn/sortutil v0.0.0-20120526081524-abeda66eb583 h1:+gFSK6FP5Ky3BPFrxQjHz92uRsj0DsrBL+xoIbiWRco=
|
github.com/patrickmn/sortutil v0.0.0-20120526081524-abeda66eb583 h1:+gFSK6FP5Ky3BPFrxQjHz92uRsj0DsrBL+xoIbiWRco=
|
||||||
github.com/patrickmn/sortutil v0.0.0-20120526081524-abeda66eb583/go.mod h1:DyFPU22sg+Or/eRPmpwVVp0fUw+aQSYddY0DzzNjSN4=
|
github.com/patrickmn/sortutil v0.0.0-20120526081524-abeda66eb583/go.mod h1:DyFPU22sg+Or/eRPmpwVVp0fUw+aQSYddY0DzzNjSN4=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/procyon-projects/chrono v1.1.2 h1:Uw7V96Ckl/pOeMBNvaEki7k6Ssgd9OX8b9PY0gpXmoU=
|
||||||
|
github.com/procyon-projects/chrono v1.1.2/go.mod h1:RwQ27W7hRaq+QUWN2yXU3BDG2FUyEQiKds8/M1FI5C8=
|
||||||
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
|
golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
|
||||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||||
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
|
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
|
||||||
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
|
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|
18
main.go
18
main.go
|
@ -4,6 +4,7 @@ import (
|
||||||
"aunefyren/wrapperr/files"
|
"aunefyren/wrapperr/files"
|
||||||
"aunefyren/wrapperr/routes"
|
"aunefyren/wrapperr/routes"
|
||||||
"aunefyren/wrapperr/utilities"
|
"aunefyren/wrapperr/utilities"
|
||||||
|
"context"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
@ -13,6 +14,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"github.com/procyon-projects/chrono"
|
||||||
|
|
||||||
_ "time/tzdata"
|
_ "time/tzdata"
|
||||||
)
|
)
|
||||||
|
@ -116,9 +118,11 @@ func main() {
|
||||||
router.HandleFunc(root+"/api/get/login-url", routes.ApiGetLoginURL)
|
router.HandleFunc(root+"/api/get/login-url", routes.ApiGetLoginURL)
|
||||||
router.HandleFunc(root+"/api/login/plex-auth", routes.ApiLoginPlexAuth)
|
router.HandleFunc(root+"/api/login/plex-auth", routes.ApiLoginPlexAuth)
|
||||||
router.HandleFunc(root+"/api/validate/plex-auth", routes.ApiValidatePlexAuth)
|
router.HandleFunc(root+"/api/validate/plex-auth", routes.ApiValidatePlexAuth)
|
||||||
router.HandleFunc(root+"/api/create/share-link", routes.ApiCreateShareLink)
|
|
||||||
router.HandleFunc(root+"/api/get/user-share-link", routes.ApiGetUserShareLink)
|
router.HandleFunc(root+"/api/get/user-share-link", routes.ApiGetUserShareLink)
|
||||||
|
|
||||||
|
// Depends on config
|
||||||
router.HandleFunc(root+"/api/delete/user-share-link", routes.ApiDeleteUserShareLink)
|
router.HandleFunc(root+"/api/delete/user-share-link", routes.ApiDeleteUserShareLink)
|
||||||
|
router.HandleFunc(root+"/api/create/share-link", routes.ApiCreateShareLink)
|
||||||
|
|
||||||
// Get stats route
|
// Get stats route
|
||||||
router.HandleFunc(root+"/api/get/statistics", routes.ApiWrapperGetStatistics)
|
router.HandleFunc(root+"/api/get/statistics", routes.ApiWrapperGetStatistics)
|
||||||
|
@ -149,6 +153,18 @@ func main() {
|
||||||
http.ServeFile(w, r, "./web/txt/robots.txt")
|
http.ServeFile(w, r, "./web/txt/robots.txt")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Create task scheduler for sunday reminders
|
||||||
|
taskScheduler := chrono.NewDefaultTaskScheduler()
|
||||||
|
|
||||||
|
_, err = taskScheduler.ScheduleWithCron(func(ctx context.Context) {
|
||||||
|
log.Println("Shareable link cleaner starting.")
|
||||||
|
files.CleanOldShareableLinks()
|
||||||
|
}, "0 0 0 * * *")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Shareable link cleaner was not scheduled successfully. Error: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
// Start web-server
|
// Start web-server
|
||||||
log.Fatal(http.ListenAndServe(":"+strconv.Itoa(port), router))
|
log.Fatal(http.ListenAndServe(":"+strconv.Itoa(port), router))
|
||||||
}
|
}
|
||||||
|
|
|
@ -350,12 +350,6 @@ func ApiGetShareLink(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !config.PlexAuth {
|
|
||||||
log.Println("Plex Auth is not enabled in the Wrapperr configuration.")
|
|
||||||
utilities.RespondDefaultError(w, r, errors.New("Plex Auth is not enabled in the Wrapperr configuration."), 400)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if !config.CreateShareLinks {
|
if !config.CreateShareLinks {
|
||||||
log.Println("Shareable links are not enabled in the Wrapperr configuration.")
|
log.Println("Shareable links are not enabled in the Wrapperr configuration.")
|
||||||
utilities.RespondDefaultError(w, r, errors.New("Shareable links are not enabled in the Wrapperr configuration."), 400)
|
utilities.RespondDefaultError(w, r, errors.New("Shareable links are not enabled in the Wrapperr configuration."), 400)
|
||||||
|
@ -374,6 +368,9 @@ func ApiGetShareLink(w http.ResponseWriter, r *http.Request) {
|
||||||
var link_payload models.WrapperrShareLinkGetRequest
|
var link_payload models.WrapperrShareLinkGetRequest
|
||||||
json.Unmarshal(reqBody, &link_payload)
|
json.Unmarshal(reqBody, &link_payload)
|
||||||
|
|
||||||
|
var fileName string
|
||||||
|
var hash string
|
||||||
|
|
||||||
hash_array := strings.Split(link_payload.Hash, "-")
|
hash_array := strings.Split(link_payload.Hash, "-")
|
||||||
|
|
||||||
if len(hash_array) < 2 {
|
if len(hash_array) < 2 {
|
||||||
|
@ -384,17 +381,29 @@ func ApiGetShareLink(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
user_id := hash_array[0]
|
if config.PlexAuth {
|
||||||
hash := ""
|
|
||||||
|
|
||||||
for j := 1; j < len(hash_array); j++ {
|
for j := 1; j < len(hash_array); j++ {
|
||||||
if j != 1 {
|
if j != 1 {
|
||||||
hash = hash + "-"
|
hash = hash + "-"
|
||||||
|
}
|
||||||
|
hash = hash + hash_array[j]
|
||||||
}
|
}
|
||||||
hash = hash + hash_array[j]
|
|
||||||
|
fileName = hash_array[0]
|
||||||
|
} else {
|
||||||
|
|
||||||
|
for j := 1; j < len(hash_array); j++ {
|
||||||
|
if j != 1 {
|
||||||
|
hash = hash + "-"
|
||||||
|
}
|
||||||
|
hash = hash + hash_array[j]
|
||||||
|
}
|
||||||
|
|
||||||
|
fileName = hash
|
||||||
}
|
}
|
||||||
|
|
||||||
share_link_object, err := files.GetLink(user_id)
|
share_link_object, err := files.GetLink(fileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
|
@ -415,14 +424,14 @@ func ApiGetShareLink(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
linkTime = linkTime.Add(7 * 24 * time.Hour)
|
linkTime = linkTime.Add(7 * 24 * time.Hour)
|
||||||
|
|
||||||
if !linkTime.Before(currentTime) && share_link_object.Hash == hash {
|
if !linkTime.Before(currentTime) && share_link_object.Hash == hash && !share_link_object.Expired {
|
||||||
|
|
||||||
share_link_object.Message = "Shared link retrieved."
|
share_link_object.Message = "Shared link retrieved."
|
||||||
share_link_object.Error = false
|
share_link_object.Error = false
|
||||||
|
|
||||||
ip_string := utilities.GetOriginIPString(w, r)
|
ip_string := utilities.GetOriginIPString(w, r)
|
||||||
|
|
||||||
log.Println("Retrieved Wrapperr share link made by User ID: " + user_id + "." + ip_string)
|
log.Println("Retrieved Wrapperr share link made by User ID/with hash: " + fileName + "." + ip_string)
|
||||||
|
|
||||||
utilities.RespondWithJSON(w, http.StatusOK, share_link_object)
|
utilities.RespondWithJSON(w, http.StatusOK, share_link_object)
|
||||||
return
|
return
|
||||||
|
@ -434,7 +443,7 @@ func ApiGetShareLink(w http.ResponseWriter, r *http.Request) {
|
||||||
if linkTime.Before(currentTime) {
|
if linkTime.Before(currentTime) {
|
||||||
|
|
||||||
share_link_object.Expired = true
|
share_link_object.Expired = true
|
||||||
err = files.SaveLink(share_link_object)
|
err = files.SaveLink(share_link_object, config.PlexAuth)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,8 +94,20 @@ func ApiWrapperGetStatistics(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set user details from Plex login
|
||||||
user_name = plex_object.Username
|
user_name = plex_object.Username
|
||||||
user_id = plex_object.ID
|
user_id = plex_object.ID
|
||||||
|
|
||||||
|
// Check for friendly name using Tautulli
|
||||||
|
for i := 0; i < len(config.TautulliConfig); i++ {
|
||||||
|
_, new_username, err := modules.TautulliGetUserId(config.TautulliConfig[i].TautulliPort, config.TautulliConfig[i].TautulliIP, config.TautulliConfig[i].TautulliHttps, config.TautulliConfig[i].TautulliRoot, config.TautulliConfig[i].TautulliApiKey, user_name)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
user_name = new_username
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Println("3. Auth check passed." + ip_string)
|
log.Println("3. Auth check passed." + ip_string)
|
||||||
|
@ -114,7 +126,6 @@ func ApiWrapperGetStatistics(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
// If no auth has been passed, caching mode is false, and user is not admin, search for the Plex details using Tautulli and PlexIdentity
|
// If no auth has been passed, caching mode is false, and user is not admin, search for the Plex details using Tautulli and PlexIdentity
|
||||||
if !auth_passed && !wrapperr_request.CachingMode && !admin {
|
if !auth_passed && !wrapperr_request.CachingMode && !admin {
|
||||||
|
|
||||||
UserNameFound := false
|
UserNameFound := false
|
||||||
|
|
||||||
for i := 0; i < len(config.TautulliConfig); i++ {
|
for i := 0; i < len(config.TautulliConfig); i++ {
|
||||||
|
|
|
@ -244,39 +244,35 @@ func ApiCreateShareLink(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !config.PlexAuth {
|
|
||||||
log.Println("Plex Auth is not enabled in the Wrapperr configuration.")
|
|
||||||
utilities.RespondDefaultError(w, r, errors.New("Plex Auth is not enabled in the Wrapperr configuration."), 400)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if !config.CreateShareLinks {
|
if !config.CreateShareLinks {
|
||||||
log.Panicln("Shareable links are not enabled in the Wrapperr configuration.")
|
log.Panicln("Shareable links are not enabled in the Wrapperr configuration.")
|
||||||
utilities.RespondDefaultError(w, r, errors.New("Shareable links are not enabled in the Wrapperr configuration."), 400)
|
utilities.RespondDefaultError(w, r, errors.New("Shareable links are not enabled in the Wrapperr configuration."), 400)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to authorize bearer token from header
|
|
||||||
payload, err := modules.AuthorizeToken(w, r, false)
|
|
||||||
|
|
||||||
var user_name string
|
var user_name string
|
||||||
var user_id int
|
var user_id int
|
||||||
|
|
||||||
if err != nil || payload.Admin {
|
// Try to authorize bearer token from header
|
||||||
log.Println(err)
|
if config.PlexAuth {
|
||||||
log.Println(payload.Admin)
|
payload, err := modules.AuthorizeToken(w, r, false)
|
||||||
utilities.RespondDefaultError(w, r, errors.New("Failed to authorize request."), 401)
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
plex_object, err := modules.PlexAuthValidateToken(payload.AuthToken, config.ClientKey, config.WrapperrVersion)
|
|
||||||
if err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
utilities.RespondDefaultError(w, r, errors.New("Could not validate Plex Auth login."), 500)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
user_name = plex_object.Username
|
if err != nil || payload.Admin {
|
||||||
user_id = plex_object.ID
|
log.Println(err)
|
||||||
|
log.Println(payload.Admin)
|
||||||
|
utilities.RespondDefaultError(w, r, errors.New("Failed to authorize request."), 401)
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
plex_object, err := modules.PlexAuthValidateToken(payload.AuthToken, config.ClientKey, config.WrapperrVersion)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
utilities.RespondDefaultError(w, r, errors.New("Could not validate Plex Auth login."), 500)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
user_name = plex_object.Username
|
||||||
|
user_id = plex_object.ID
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read payload from Post input
|
// Read payload from Post input
|
||||||
|
@ -292,6 +288,11 @@ func ApiCreateShareLink(w http.ResponseWriter, r *http.Request) {
|
||||||
currentTime := time.Now()
|
currentTime := time.Now()
|
||||||
hash_value := uuid.New().String()
|
hash_value := uuid.New().String()
|
||||||
|
|
||||||
|
if !config.PlexAuth {
|
||||||
|
user_name = link_payload.Data.User.Name
|
||||||
|
user_id = 0
|
||||||
|
}
|
||||||
|
|
||||||
link_object := models.WrapperrShareLink{
|
link_object := models.WrapperrShareLink{
|
||||||
Content: link_payload,
|
Content: link_payload,
|
||||||
UserID: user_id,
|
UserID: user_id,
|
||||||
|
@ -301,7 +302,7 @@ func ApiCreateShareLink(w http.ResponseWriter, r *http.Request) {
|
||||||
Expired: false,
|
Expired: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = files.SaveLink(&link_object)
|
err = files.SaveLink(&link_object, config.PlexAuth)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
utilities.RespondDefaultError(w, r, errors.New("Failed to save new link."), 500)
|
utilities.RespondDefaultError(w, r, errors.New("Failed to save new link."), 500)
|
||||||
|
@ -477,30 +478,30 @@ func ApiDeleteUserShareLink(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if !config.PlexAuth {
|
|
||||||
log.Println("Plex Auth is not enabled in the Wrapperr configuration.")
|
|
||||||
utilities.RespondDefaultError(w, r, errors.New("Plex Auth is not enabled in the Wrapperr configuration."), 400)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if !config.CreateShareLinks {
|
if !config.CreateShareLinks {
|
||||||
log.Println("Shareable links are not enabled in the Wrapperr configuration.")
|
log.Println("Shareable links are not enabled in the Wrapperr configuration.")
|
||||||
utilities.RespondDefaultError(w, r, errors.New("Shareable links are not enabled in the Wrapperr configuration."), 400)
|
utilities.RespondDefaultError(w, r, errors.New("Shareable links are not enabled in the Wrapperr configuration."), 400)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to authorize bearer token from header
|
if !config.PlexAuth {
|
||||||
payload, err := modules.AuthorizeToken(w, r, false)
|
log.Println("Shareable links are are only deleteable if made through Plex Auth login.")
|
||||||
|
utilities.RespondDefaultError(w, r, errors.New("Shareable links are are only deleteable if made through Plex Auth login."), 400)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
var user_name string
|
var user_name string
|
||||||
var user_id int
|
var user_id int
|
||||||
|
|
||||||
|
// Try to authorize bearer token from header
|
||||||
|
payload, err := modules.AuthorizeToken(w, r, false)
|
||||||
|
|
||||||
if err != nil || payload.Admin {
|
if err != nil || payload.Admin {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
log.Println(payload.Admin)
|
log.Println(payload.Admin)
|
||||||
utilities.RespondDefaultError(w, r, errors.New("Failed to authorize request."), 401)
|
utilities.RespondDefaultError(w, r, errors.New("Failed to authorize request."), 401)
|
||||||
return
|
return
|
||||||
} else {
|
} else if config.PlexAuth {
|
||||||
plex_object, err := modules.PlexAuthValidateToken(payload.AuthToken, config.ClientKey, config.WrapperrVersion)
|
plex_object, err := modules.PlexAuthValidateToken(payload.AuthToken, config.ClientKey, config.WrapperrVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
|
@ -523,7 +524,7 @@ func ApiDeleteUserShareLink(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
share_link_object.Date = "1970-01-01"
|
share_link_object.Date = "1970-01-01"
|
||||||
|
|
||||||
err = files.SaveLink(share_link_object)
|
err = files.SaveLink(share_link_object, config.PlexAuth)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
|
|
|
@ -975,7 +975,7 @@ function load_outro() {
|
||||||
|
|
||||||
text += "<div class='boks2' style='margin-top:5em;'>";
|
text += "<div class='boks2' style='margin-top:5em;'>";
|
||||||
|
|
||||||
if(!link_mode && functions.create_share_links && functions.plex_auth) {
|
if(!link_mode && functions.create_share_links) {
|
||||||
|
|
||||||
text += "<div class='form-group' id='share_wrapped_div' style=''>";
|
text += "<div class='form-group' id='share_wrapped_div' style=''>";
|
||||||
text += "<button class='form-control btn' name='share_wrapped_button' id='share_wrapped_button' onclick='create_wrapped_link()'>";
|
text += "<button class='form-control btn' name='share_wrapped_button' id='share_wrapped_button' onclick='create_wrapped_link()'>";
|
||||||
|
@ -992,8 +992,12 @@ function load_outro() {
|
||||||
text += "<div class='form-control btn' id='share_wrapped_delete_button' style='background-color: var(--white); cursor: default;'>";
|
text += "<div class='form-control btn' id='share_wrapped_delete_button' style='background-color: var(--white); cursor: default;'>";
|
||||||
text += "<span id='share_wrapped_results_url' class='share_wrapped_url' style=''></span>";
|
text += "<span id='share_wrapped_results_url' class='share_wrapped_url' style=''></span>";
|
||||||
text += "<img id='share_wrapped_copy' src='assets/share.svg' style='' title='Click to copy the URL' onclick='copy_link_user();'>";
|
text += "<img id='share_wrapped_copy' src='assets/share.svg' style='' title='Click to copy the URL' onclick='copy_link_user();'>";
|
||||||
text += "<img id='share_wrapped_delete' src='assets/trash.svg' style='' title='Click to delete this URL' onclick='delete_new_link_user();'>";
|
|
||||||
text += "</div>";
|
if(functions.plex_auth) {
|
||||||
|
text += "<img id='share_wrapped_delete' src='assets/trash.svg' style='' title='Click to delete this URL' onclick='delete_new_link_user();'>";
|
||||||
|
}
|
||||||
|
|
||||||
|
text += "</div>";
|
||||||
text += "</div>";
|
text += "</div>";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1027,6 +1031,15 @@ function create_wrapped_link() {
|
||||||
|
|
||||||
var wrapped_data = JSON.stringify(wrapped_form);
|
var wrapped_data = JSON.stringify(wrapped_form);
|
||||||
|
|
||||||
|
// Debug lines
|
||||||
|
// console.log(wrapped_data);
|
||||||
|
// return;
|
||||||
|
|
||||||
|
var bearerToken = ""
|
||||||
|
if(functions.plex_auth) {
|
||||||
|
bearerToken = "Bearer " + cookie
|
||||||
|
}
|
||||||
|
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
xhttp.onreadystatechange = function() {
|
xhttp.onreadystatechange = function() {
|
||||||
if (this.readyState == 4 && (this.status == 200 || this.status == 400 || this.status == 500)) {
|
if (this.readyState == 4 && (this.status == 200 || this.status == 400 || this.status == 500)) {
|
||||||
|
@ -1046,7 +1059,6 @@ function create_wrapped_link() {
|
||||||
document.getElementById("share_wrapped_button").style.opacity = '1';
|
document.getElementById("share_wrapped_button").style.opacity = '1';
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
document.getElementById('share_wrapped_results_url').innerHTML = window.location.href.split('?')[0] + '?hash=' + result.data;
|
document.getElementById('share_wrapped_results_url').innerHTML = window.location.href.split('?')[0] + '?hash=' + result.data;
|
||||||
document.getElementById('share_wrapped_results_title_div').style.display = 'block';
|
document.getElementById('share_wrapped_results_title_div').style.display = 'block';
|
||||||
document.getElementById('share_wrapped_results_div').style.display = 'flex';
|
document.getElementById('share_wrapped_results_div').style.display = 'flex';
|
||||||
|
@ -1059,7 +1071,7 @@ function create_wrapped_link() {
|
||||||
xhttp.withCredentials = true;
|
xhttp.withCredentials = true;
|
||||||
xhttp.open("post", api_url + "create/share-link");
|
xhttp.open("post", api_url + "create/share-link");
|
||||||
xhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
xhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
||||||
xhttp.setRequestHeader("Authorization", "Bearer " + cookie);
|
xhttp.setRequestHeader("Authorization", bearerToken);
|
||||||
xhttp.send(wrapped_data);
|
xhttp.send(wrapped_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue