111 lines
2.0 KiB
Go
111 lines
2.0 KiB
Go
// Copyright (C) 2021-2023 YumeMichi
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package utils
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"encoding/hex"
|
|
"errors"
|
|
"math/rand"
|
|
"net/url"
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
func PathExists(path string) bool {
|
|
_, err := os.Stat(path)
|
|
return err == nil || os.IsExist(err)
|
|
}
|
|
|
|
func ReadAllText(path string) string {
|
|
b, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
func WriteAllText(path, text string) {
|
|
_ = os.WriteFile(path, []byte(text), 0644)
|
|
}
|
|
|
|
func SliceXor(s1, s2 []byte) (res []byte) {
|
|
for k, b := range s1 {
|
|
newBt := b ^ s2[k]
|
|
res = append(res, newBt)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func Sub16(str []byte) []byte {
|
|
return str[16:]
|
|
}
|
|
|
|
func RandomStr(len int) string {
|
|
rand.Seed(time.Now().UnixNano())
|
|
mRand := make([]byte, len)
|
|
rand.Read(mRand)
|
|
mRandStr := hex.EncodeToString(mRand)[0:len]
|
|
|
|
return mRandStr
|
|
}
|
|
|
|
func RandomBase64Token(len int) string {
|
|
rand.NewSource(time.Now().UnixNano())
|
|
mRand := make([]byte, len)
|
|
rand.Read(mRand)
|
|
mRandStr := hex.EncodeToString(mRand)[0:len]
|
|
|
|
return base64.RawStdEncoding.EncodeToString([]byte(mRandStr))
|
|
}
|
|
|
|
func ParseAuthorizeStr(authorize []string) (url.Values, error) {
|
|
if len(authorize) == 0 {
|
|
return nil, errors.New("authorize is null")
|
|
}
|
|
urlParams, err := url.ParseQuery(authorize[0])
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return urlParams, nil
|
|
}
|
|
|
|
func GetAuthorizeToken(authorize []string) (string, error) {
|
|
params, err := ParseAuthorizeStr(authorize)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
token := params["token"]
|
|
if len(token) == 0 {
|
|
return "", errors.New("token is null")
|
|
}
|
|
|
|
return token[0], nil
|
|
}
|
|
|
|
func GetAuthorizeNonce(authorize []string) (int, error) {
|
|
params, err := ParseAuthorizeStr(authorize)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
nonce := params["nonce"]
|
|
if len(nonce) == 0 {
|
|
return 0, errors.New("nonce is null")
|
|
}
|
|
|
|
n_nonce, err := strconv.Atoi(nonce[0])
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
if n_nonce == 0 {
|
|
return 0, errors.New("nonce is 0")
|
|
}
|
|
|
|
return n_nonce, nil
|
|
}
|