photoprism/pkg/rnd/crc.go
Michael Mayer 467f7b1585 OAuth2: Add Client Credentials Authentication #213 #782 #808 #3730 #3943
This adds standard OAuth2 client credentials and bearer token support as
well as scope-based authorization checks for REST API clients. Note that
this initial implementation should not be used in production and that
the access token limit has not been implemented yet.

Signed-off-by: Michael Mayer <michael@photoprism.app>
2023-12-12 18:42:50 +01:00

37 lines
712 B
Go

package rnd
import (
"fmt"
"hash/crc32"
"strconv"
)
// CrcToken returns a string token with checksum.
func CrcToken() string {
token := make([]byte, 0, 14)
token = append(token, []byte(Base36(4))...)
token = append(token, '-')
token = append(token, []byte(Base36(4))...)
checksum := crc32.ChecksumIEEE(token)
sum := strconv.FormatInt(int64(checksum), 16)
return fmt.Sprintf("%s-%.4s", token, sum)
}
// ValidateCrcToken tests if the token string is valid.
func ValidateCrcToken(s string) bool {
if len(s) != 14 {
return false
}
token := []byte(s[:9])
checksum := crc32.ChecksumIEEE(token)
sum := strconv.FormatInt(int64(checksum), 16)
return s == fmt.Sprintf("%s-%.4s", token, sum)
}