Skip to content
Snippets Groups Projects
Select Git revision
  • 1b0bc521664664e4d8c69909872c09d7ad0d9544
  • master default protected
  • feature/PRXS-3383-CollectionsSort
  • feature/2781-SpacesLoggingMiddleware
  • feature/PRXS-3421-ImplementNewRefAPI
  • feature/PRXS-3143-3235-ReferenceOptions
  • feature/PRXS-3143-LimitReferenceFields
  • feature/PRXS-3234-FeaturePruneIdents
  • PRXS-3421-RecursiveReferences
  • feature/3109-SerializeFeature
  • release/0.33
  • feature/3109-RecoverySchema
  • feature/3109-feature
  • fix/PRXS-3369-ValidateFields
  • refactor/PRXS-3306-MovePkgGroup1
  • refactor/6-pkg-refactor-expr
  • fix/PRXS-3360-TemplateBuilderPatch
  • feature/3293-MongoV2
  • feature/3272-GoVersionUp
  • feature/PRXS-3218-HideTemplateActions
  • feature/PRXS-3234-PruneIdents
  • v0.33.1
  • v0.32.0
  • v0.31.1
  • v0.31.0
  • v0.30.0
  • v0.29.0
  • v0.28.0
  • v0.27.0-alpha.1+16
  • v0.27.0-alpha.1+15
  • v0.27.0-alpha.1+14
  • v0.27.0-alpha.1+13
  • v0.27.0-alpha.1+12
  • v0.27.0-alpha.1+11
  • v0.27.0-alpha.1+10
  • v0.27.0-alpha.1+9
  • v0.27.0-alpha.1+8
  • v0.27.0-alpha.1+7
  • v0.27.0-alpha.1+6
  • v0.27.0-alpha.1+5
  • v0.27.0-alpha.1+4
41 results

key.go

Blame
  • key.go 1.24 KiB
    package extension
    
    import (
    	"crypto/sha512"
    	"encoding/base64"
    	"strings"
    )
    
    // KeyFunc функция получения ключа доступа к указанному пространству
    type KeyFunc func(spaceID string) string
    type SignatureFunc func(spaceID string) string
    
    func NamedSignedKey(name string, signature any) KeyFunc {
    	switch v := signature.(type) {
    	case string:
    		return func(spaceID string) string {
    			return Sign(name, spaceID, v)
    		}
    	case SignatureFunc:
    		return func(spaceID string) string {
    			return Sign(name, spaceID, v(spaceID))
    		}
    	}
    	panic("incorrect signature")
    }
    
    func ExtensionSignedKey(ext, signature any) KeyFunc {
    	var desc *ExtensionDescriptor
    
    	switch v := ext.(type) {
    	case Extension:
    		desc = v.GetDescriptor()
    	case *ExtensionDescriptor:
    		desc = v
    	}
    
    	switch v := signature.(type) {
    	case string:
    		return func(spaceID string) string {
    			return Sign(desc.Extension, spaceID, v)
    		}
    	case SignatureFunc:
    		return func(spaceID string) string {
    			return Sign(desc.Extension, spaceID, v(spaceID))
    		}
    	}
    	panic("incorrect signature")
    }
    
    func Sign(vals ...string) string {
    	value := strings.Join(vals, ".")
    	hash := sha512.Sum512([]byte(value))
    	encoded := base64.StdEncoding.EncodeToString(hash[:])
    	return encoded
    }