v2.0.0.0000

This commit is contained in:
marmei
2019-08-02 20:12:09 +02:00
parent e396af91cb
commit e001b06b62
85 changed files with 22786 additions and 2 deletions

169
src/authentication.go Normal file
View File

@@ -0,0 +1,169 @@
package src
import (
"encoding/base64"
"errors"
"net/http"
"strings"
"../src/internal/authentication"
)
func activatedSystemAuthentication() (err error) {
err = authentication.Init(System.Folder.Config, 60)
if err != nil {
return
}
var defaults = make(map[string]interface{})
defaults["authentication.web"] = false
defaults["authentication.pms"] = false
defaults["authentication.xml"] = false
defaults["authentication.api"] = false
err = authentication.SetDefaultUserData(defaults)
return
}
func createFirstUserForAuthentication(username, password string) (token string, err error) {
var authenticationErr = func(err error) {
if err != nil {
return
}
}
err = authentication.CreateDefaultUser(username, password)
authenticationErr(err)
token, err = authentication.UserAuthentication(username, password)
authenticationErr(err)
token, err = authentication.CheckTheValidityOfTheToken(token)
authenticationErr(err)
var userData = make(map[string]interface{})
userData["username"] = username
userData["authentication.web"] = true
userData["authentication.pms"] = true
userData["authentication.m3u"] = true
userData["authentication.xml"] = true
userData["authentication.api"] = false
userData["defaultUser"] = true
userID, err := authentication.GetUserID(token)
authenticationErr(err)
err = authentication.WriteUserData(userID, userData)
authenticationErr(err)
return
}
func tokenAuthentication(token string) (newToken string, err error) {
if System.ConfigurationWizard == true {
return
}
newToken, err = authentication.CheckTheValidityOfTheToken(token)
return
}
func basicAuth(r *http.Request, level string) (username string, err error) {
err = errors.New("User authentication failed")
auth := strings.SplitN(r.Header.Get("Authorization"), " ", 2)
if len(auth) != 2 || auth[0] != "Basic" {
return
}
payload, _ := base64.StdEncoding.DecodeString(auth[1])
pair := strings.SplitN(string(payload), ":", 2)
username = pair[0]
var password = pair[1]
token, err := authentication.UserAuthentication(username, password)
if err != nil {
return
}
err = checkAuthorizationLevel(token, level)
return
}
func urlAuth(r *http.Request, requestType string) (err error) {
var level, token string
var username = r.URL.Query().Get("username")
var password = r.URL.Query().Get("password")
switch requestType {
case "m3u":
level = "authentication.m3u"
if Settings.AuthenticationM3U == true {
token, err = authentication.UserAuthentication(username, password)
if err != nil {
return
}
err = checkAuthorizationLevel(token, level)
}
case "xml":
level = "authentication.xml"
if Settings.AuthenticationXML == true {
token, err = authentication.UserAuthentication(username, password)
if err != nil {
return
}
err = checkAuthorizationLevel(token, level)
}
}
return
}
func checkAuthorizationLevel(token, level string) (err error) {
var authenticationErr = func(err error) {
if err != nil {
return
}
}
userID, err := authentication.GetUserID(token)
authenticationErr(err)
userData, err := authentication.ReadUserData(userID)
authenticationErr(err)
if len(userData) > 0 {
if v, ok := userData[level].(bool); ok {
if v == false {
err = errors.New("No authorization")
}
} else {
userData[level] = false
err = authentication.WriteUserData(userID, userData)
err = errors.New("No authorization")
}
} else {
err = authentication.WriteUserData(userID, userData)
err = errors.New("No authorization")
}
return
}