options.go 1.1 KiB
Newer Older
package jwtmdl

import (
	"time"

	"corelab.mkcl.org/MKCLOS/coredevelopmentplatform/corepkgv2/authmdl/sessionmdl"
)

type Options struct {
	Key       string
	UserID    string
	ClientIP  string
	Metadata  string
	Groups    []string
	ExpiresAt int64
	Session   sessionmdl.Session
}

type Option func(*Options)

func WithKey(k string) Option {
	return func(args *Options) {
		args.Key = k
	}
}

func WithUserID(uid string) Option {
	return func(args *Options) {
		args.UserID = uid
	}
}

func WithSession(sid, sessionFor string) Option {
	return func(args *Options) {
		args.Session = sessionmdl.Session{
			SessionId:  sid,
			SessionFor: sessionFor,
		}
	}
}

func WithClientIP(ip string) Option {
	return func(args *Options) {
		args.ClientIP = ip
	}
}

func WithMetaData(data string) Option {
	return func(args *Options) {
		args.Metadata = data
	}
}

func WithGroups(gs []string) Option {
	return func(args *Options) {
		args.Groups = gs
	}
}

func WithExpiration(e time.Duration) Option {
	return func(args *Options) {
		if e == 0 {
			args.ExpiresAt = 0
			return
		}

		args.ExpiresAt = time.Now().Add(e).Unix()
	}
}