🚚 Split scope.go on scope.go and scopes.go
This commit is contained in:
parent
e0d9212678
commit
c287f65eef
|
@ -8,18 +8,13 @@ import (
|
||||||
"source.toby3d.me/toby3d/auth/internal/common"
|
"source.toby3d.me/toby3d/auth/internal/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
type (
|
// Scope represent single token scope supported by IndieAuth.
|
||||||
// Scope represent single token scope supported by IndieAuth.
|
//
|
||||||
//
|
// NOTE(toby3d): Encapsulate enums in structs for extra compile-time safety:
|
||||||
// NOTE(toby3d): Encapsulate enums in structs for extra compile-time safety:
|
// https://threedots.tech/post/safer-enums-in-go/#struct-based-enums
|
||||||
// https://threedots.tech/post/safer-enums-in-go/#struct-based-enums
|
type Scope struct {
|
||||||
Scope struct {
|
uid string
|
||||||
uid string
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Scopes represent set of Scope domains.
|
|
||||||
Scopes []Scope
|
|
||||||
)
|
|
||||||
|
|
||||||
var ErrScopeUnknown error = NewError(ErrorCodeInvalidRequest, "unknown scope", "https://indieweb.org/scope")
|
var ErrScopeUnknown error = NewError(ErrorCodeInvalidRequest, "unknown scope", "https://indieweb.org/scope")
|
||||||
|
|
||||||
|
@ -101,100 +96,3 @@ func (s Scope) String() string {
|
||||||
func (s Scope) GoString() string {
|
func (s Scope) GoString() string {
|
||||||
return "domain.Scope(" + s.String() + ")"
|
return "domain.Scope(" + s.String() + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnmarshalForm implements custom unmarshler for form values.
|
|
||||||
func (s *Scopes) UnmarshalForm(v []byte) error {
|
|
||||||
scopes := make(Scopes, 0)
|
|
||||||
|
|
||||||
for _, rawScope := range strings.Fields(string(v)) {
|
|
||||||
scope, err := ParseScope(rawScope)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Scopes: UnmarshalForm: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if scopes.Has(scope) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
scopes = append(scopes, scope)
|
|
||||||
}
|
|
||||||
|
|
||||||
*s = scopes
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnmarshalJSON implements custom unmarshler for JSON.
|
|
||||||
func (s *Scopes) UnmarshalJSON(v []byte) error {
|
|
||||||
src, err := strconv.Unquote(string(v))
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Scopes: UnmarshalJSON: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
result := make(Scopes, 0)
|
|
||||||
|
|
||||||
for _, rawScope := range strings.Fields(src) {
|
|
||||||
scope, err := ParseScope(rawScope)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Scopes: UnmarshalJSON: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if result.Has(scope) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
result = append(result, scope)
|
|
||||||
}
|
|
||||||
|
|
||||||
*s = result
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnmarshalJSON implements custom marshler for JSON.
|
|
||||||
func (s Scopes) MarshalJSON() ([]byte, error) {
|
|
||||||
scopes := make([]string, len(s))
|
|
||||||
|
|
||||||
for i := range s {
|
|
||||||
scopes[i] = s[i].String()
|
|
||||||
}
|
|
||||||
|
|
||||||
return []byte(strconv.Quote(strings.Join(scopes, " "))), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// String returns string representation of scopes.
|
|
||||||
func (s Scopes) String() string {
|
|
||||||
scopes := make([]string, len(s))
|
|
||||||
|
|
||||||
for i := range s {
|
|
||||||
scopes[i] = s[i].String()
|
|
||||||
}
|
|
||||||
|
|
||||||
return strings.Join(scopes, " ")
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsEmpty returns true if the set does not contain valid scope.
|
|
||||||
func (s Scopes) IsEmpty() bool {
|
|
||||||
for i := range s {
|
|
||||||
if s[i] == ScopeUnd {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Has check what input scope contains in current scopes collection.
|
|
||||||
func (s Scopes) Has(scope Scope) bool {
|
|
||||||
for i := range s {
|
|
||||||
if s[i] != scope {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
package domain
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Scopes represent set of Scope domains.
|
||||||
|
type Scopes []Scope
|
||||||
|
|
||||||
|
// UnmarshalForm implements custom unmarshler for form values.
|
||||||
|
func (s *Scopes) UnmarshalForm(v []byte) error {
|
||||||
|
scopes := make(Scopes, 0)
|
||||||
|
|
||||||
|
for _, rawScope := range strings.Fields(string(v)) {
|
||||||
|
scope, err := ParseScope(rawScope)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Scopes: UnmarshalForm: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if scopes.Has(scope) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
scopes = append(scopes, scope)
|
||||||
|
}
|
||||||
|
|
||||||
|
*s = scopes
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON implements custom unmarshler for JSON.
|
||||||
|
func (s *Scopes) UnmarshalJSON(v []byte) error {
|
||||||
|
src, err := strconv.Unquote(string(v))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Scopes: UnmarshalJSON: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
result := make(Scopes, 0)
|
||||||
|
|
||||||
|
for _, rawScope := range strings.Fields(src) {
|
||||||
|
scope, err := ParseScope(rawScope)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Scopes: UnmarshalJSON: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if result.Has(scope) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
result = append(result, scope)
|
||||||
|
}
|
||||||
|
|
||||||
|
*s = result
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON implements custom marshler for JSON.
|
||||||
|
func (s Scopes) MarshalJSON() ([]byte, error) {
|
||||||
|
scopes := make([]string, len(s))
|
||||||
|
|
||||||
|
for i := range s {
|
||||||
|
scopes[i] = s[i].String()
|
||||||
|
}
|
||||||
|
|
||||||
|
return []byte(strconv.Quote(strings.Join(scopes, " "))), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns string representation of scopes.
|
||||||
|
func (s Scopes) String() string {
|
||||||
|
scopes := make([]string, len(s))
|
||||||
|
|
||||||
|
for i := range s {
|
||||||
|
scopes[i] = s[i].String()
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.Join(scopes, " ")
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsEmpty returns true if the set does not contain valid scope.
|
||||||
|
func (s Scopes) IsEmpty() bool {
|
||||||
|
for i := range s {
|
||||||
|
if s[i] == ScopeUnd {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Has check what input scope contains in current scopes collection.
|
||||||
|
func (s Scopes) Has(scope Scope) bool {
|
||||||
|
for i := range s {
|
||||||
|
if s[i] != scope {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
Loading…
Reference in New Issue