mirror of
https://github.com/phishingclub/phishingclub.git
synced 2026-02-13 00:22:49 +00:00
163 lines
3.9 KiB
Go
163 lines
3.9 KiB
Go
package vo
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/phishingclub/phishingclub/random"
|
|
"github.com/phishingclub/phishingclub/validate"
|
|
)
|
|
|
|
// UserFullname is a user name
|
|
type UserFullname struct {
|
|
inner string
|
|
}
|
|
|
|
// NewUserFullname creates a new name for a user
|
|
func NewUserFullname(name string) (*UserFullname, error) {
|
|
err := validate.ErrorIfStringNotBetween(name, 0, 65)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("invalid name: %w", err)
|
|
}
|
|
return &UserFullname{
|
|
inner: name,
|
|
}, nil
|
|
}
|
|
|
|
// NewUserFUllnameMust creates a new name for a user, panicking if the input is invalid
|
|
func NewUserFullnameMust(name string) *UserFullname {
|
|
ss, err := NewUserFullname(name)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return ss
|
|
}
|
|
|
|
// MarshalJSON implements the json.Marshaler interface
|
|
func (s UserFullname) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(s.inner)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the json into a string
|
|
func (s *UserFullname) UnmarshalJSON(data []byte) error {
|
|
var str string
|
|
if err := json.Unmarshal(data, &str); err != nil {
|
|
return err
|
|
}
|
|
ss, err := NewUserFullname(str)
|
|
if err != nil {
|
|
return unwrapError(err)
|
|
}
|
|
s.inner = ss.inner
|
|
return nil
|
|
}
|
|
|
|
// String returns the string representation of the name
|
|
func (n UserFullname) String() string {
|
|
return n.inner
|
|
}
|
|
|
|
// Username is a username
|
|
type Username struct {
|
|
inner string
|
|
}
|
|
|
|
// NewUsername creates a new username
|
|
func NewUsername(username string) (*Username, error) {
|
|
err := validate.ErrorIfStringNotBetween(username, 0, 65)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("invalid username: %w", err)
|
|
}
|
|
err = validate.ErrorIfNotAlphaNumeric(username)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("invalid username: %w", err)
|
|
}
|
|
username = strings.ToLower(username)
|
|
return &Username{
|
|
inner: username,
|
|
}, nil
|
|
}
|
|
|
|
// NewUsernameMust creates a new username, panicking if the input is invalid
|
|
func NewUsernameMust(username string) *Username {
|
|
ss, err := NewUsername(username)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return ss
|
|
}
|
|
|
|
// MarshalJSON implements the json.Marshaler interface
|
|
func (u Username) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(u.inner)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the json into a string
|
|
func (u *Username) UnmarshalJSON(data []byte) error {
|
|
var str string
|
|
if err := json.Unmarshal(data, &str); err != nil {
|
|
return err
|
|
}
|
|
uu, err := NewUsername(str)
|
|
if err != nil {
|
|
return unwrapError(err)
|
|
}
|
|
u.inner = uu.inner
|
|
return nil
|
|
}
|
|
|
|
// String returns the string representation of the username
|
|
func (u Username) String() string {
|
|
return u.inner
|
|
}
|
|
|
|
// ReasonableLengthPassword is a reasonable length password
|
|
type ReasonableLengthPassword struct {
|
|
password string
|
|
}
|
|
|
|
// NewReasonableLengthPassword creates a new reasonable secure password
|
|
func NewReasonableLengthPassword(password string) (*ReasonableLengthPassword, error) {
|
|
err := validate.ErrorIfStringNotBetween(password, 15, 65)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("invalid password: %w", err)
|
|
}
|
|
return &ReasonableLengthPassword{
|
|
password: password,
|
|
}, nil
|
|
}
|
|
|
|
// NewReasonableLengthPasswordGenerated creates a new reasonable length password
|
|
func NewReasonableLengthPasswordGenerated() (*ReasonableLengthPassword, error) {
|
|
password, err := random.GenerateRandomURLBase64Encoded(32)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("could not generate password: %w", err)
|
|
}
|
|
return NewReasonableLengthPassword(password)
|
|
}
|
|
|
|
// MarshalJSON implements the json.Marshaler interface
|
|
func (s ReasonableLengthPassword) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(s.password)
|
|
}
|
|
|
|
// UnmarshalJSON unmarshals the json into a string
|
|
func (s *ReasonableLengthPassword) UnmarshalJSON(data []byte) error {
|
|
var str string
|
|
if err := json.Unmarshal(data, &str); err != nil {
|
|
return err
|
|
}
|
|
ss, err := NewReasonableLengthPassword(str)
|
|
if err != nil {
|
|
return unwrapError(err)
|
|
}
|
|
s.password = ss.password
|
|
return nil
|
|
}
|
|
|
|
// String returns the password
|
|
func (p ReasonableLengthPassword) String() string {
|
|
return p.password
|
|
}
|