v2.0.0.0000
This commit is contained in:
169
src/authentication.go
Normal file
169
src/authentication.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user