Files
photoview/api/utils/utils.go
Googol Lee 6f78bb8f1f Avoid all os.Exit and log.Fatal (#1279)
* Avoid all os.Exit and log.Fatal

* Exit test with 1 by default, to catch panic errors.

* Fix log messages.
2025-08-19 16:07:16 +02:00

97 lines
2.0 KiB
Go

package utils
import (
"crypto/rand"
"fmt"
"log"
"math/big"
"os"
"path"
"path/filepath"
"github.com/pkg/errors"
)
func GenerateToken() string {
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
const length = 8
charLen := big.NewInt(int64(len(charset)))
b := make([]byte, length)
for i := range b {
n, err := rand.Int(rand.Reader, charLen)
if err != nil {
log.Panicf("Could not generate random number: %v", err)
}
b[i] = charset[n.Int64()]
}
return string(b)
}
type PhotoviewError struct {
message string
original error
}
func (e PhotoviewError) Error() string {
return fmt.Sprintf("%s: %s", e.message, e.original)
}
func HandleError(message string, err error) PhotoviewError {
log.Printf("ERROR: %s: %s", message, err)
return PhotoviewError{
message: message,
original: err,
}
}
var test_face_recognition_models_path string = ""
func ConfigureTestFaceRecognitionModelsPath(path string) {
test_face_recognition_models_path = path
}
func FaceRecognitionModelsPath() string {
if test_face_recognition_models_path != "" {
return test_face_recognition_models_path
}
if EnvFaceRecognitionModelsPath.GetValue() == "" {
return path.Join("data", "models")
}
return EnvFaceRecognitionModelsPath.GetValue()
}
// IsDirSymlink checks that the given path is a symlink and resolves to a
// directory.
func IsDirSymlink(path string) (bool, error) {
isDirSymlink := false
fileInfo, err := os.Lstat(path)
if err != nil {
return false, errors.Wrapf(err, "could not stat %s", path)
}
//Resolve symlinks
if fileInfo.Mode()&os.ModeSymlink == os.ModeSymlink {
resolvedPath, err := filepath.EvalSymlinks(path)
if err != nil {
return false, errors.Wrapf(err, "Cannot resolve linktarget of %s, ignoring it", path)
}
resolvedFile, err := os.Stat(resolvedPath)
if err != nil {
return false, fmt.Errorf("Cannot get fileinfo of linktarget %s of symlink %s, ignoring it: %w",
resolvedPath, path, err)
}
isDirSymlink = resolvedFile.IsDir()
return isDirSymlink, nil
}
return false, nil
}