mirror of
https://github.com/netbirdio/netbird.git
synced 2026-03-31 06:24:18 -04:00
* implement reverse proxy --------- Co-authored-by: Alisdair MacLeod <git@alisdairmacleod.co.uk> Co-authored-by: mlsmaycon <mlsmaycon@gmail.com> Co-authored-by: Eduard Gert <kontakt@eduardgert.de> Co-authored-by: Viktor Liu <viktor@netbird.io> Co-authored-by: Diego Noguês <diego.sure@gmail.com> Co-authored-by: Diego Noguês <49420+diegocn@users.noreply.github.com> Co-authored-by: Bethuel Mmbaga <bethuelmbaga12@gmail.com> Co-authored-by: Zoltan Papp <zoltan.pmail@gmail.com> Co-authored-by: Ashley Mensah <ashleyamo982@gmail.com>
95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
package idp
|
|
|
|
import (
|
|
"encoding/json"
|
|
"math/rand"
|
|
"net/url"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
lowerCharSet = "abcdedfghijklmnopqrst"
|
|
upperCharSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
specialCharSet = "!@#$%&*"
|
|
numberSet = "0123456789"
|
|
allCharSet = lowerCharSet + upperCharSet + specialCharSet + numberSet
|
|
)
|
|
|
|
type JsonParser struct{}
|
|
|
|
func (JsonParser) Marshal(v interface{}) ([]byte, error) {
|
|
return json.Marshal(v)
|
|
}
|
|
|
|
func (JsonParser) Unmarshal(data []byte, v interface{}) error {
|
|
return json.Unmarshal(data, v)
|
|
}
|
|
|
|
// GeneratePassword generates user password
|
|
func GeneratePassword(passwordLength, minSpecialChar, minNum, minUpperCase int) string {
|
|
var password strings.Builder
|
|
|
|
//Set special character
|
|
for i := 0; i < minSpecialChar; i++ {
|
|
random := rand.Intn(len(specialCharSet))
|
|
password.WriteString(string(specialCharSet[random]))
|
|
}
|
|
|
|
//Set numeric
|
|
for i := 0; i < minNum; i++ {
|
|
random := rand.Intn(len(numberSet))
|
|
password.WriteString(string(numberSet[random]))
|
|
}
|
|
|
|
//Set uppercase
|
|
for i := 0; i < minUpperCase; i++ {
|
|
random := rand.Intn(len(upperCharSet))
|
|
password.WriteString(string(upperCharSet[random]))
|
|
}
|
|
|
|
remainingLength := passwordLength - minSpecialChar - minNum - minUpperCase
|
|
for i := 0; i < remainingLength; i++ {
|
|
random := rand.Intn(len(allCharSet))
|
|
password.WriteString(string(allCharSet[random]))
|
|
}
|
|
inRune := []rune(password.String())
|
|
rand.Shuffle(len(inRune), func(i, j int) {
|
|
inRune[i], inRune[j] = inRune[j], inRune[i]
|
|
})
|
|
return string(inRune)
|
|
}
|
|
|
|
// baseURL returns the base url by concatenating
|
|
// the scheme and host components of the parsed URL.
|
|
func baseURL(rawURL string) string {
|
|
parsedURL, err := url.Parse(rawURL)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
|
|
return parsedURL.Scheme + "://" + parsedURL.Host
|
|
}
|
|
|
|
const (
|
|
// Provides the env variable name for use with idpTimeout function
|
|
idpTimeoutEnv = "NB_IDP_TIMEOUT"
|
|
// Sets the defaultTimeout to 10s.
|
|
defaultTimeout = 10 * time.Second
|
|
)
|
|
|
|
// idpTimeout returns a timeout value for the IDP
|
|
func idpTimeout() time.Duration {
|
|
timeoutStr, ok := os.LookupEnv(idpTimeoutEnv)
|
|
if !ok || timeoutStr == "" {
|
|
return defaultTimeout
|
|
}
|
|
|
|
timeout, err := time.ParseDuration(timeoutStr)
|
|
if err != nil {
|
|
return defaultTimeout
|
|
}
|
|
return timeout
|
|
}
|