more invite thoughts

This commit is contained in:
Risotto Bias 2025-04-07 05:54:13 -06:00
parent 0a25e9fa99
commit 70a19ba6d7
5 changed files with 43 additions and 5 deletions

View file

@ -1,8 +1,17 @@
package invite package invite
import "time"
// Generate makes a new invite // Generate makes a new invite
func (i *InviteKV) Generate(email string) (url string) { func (i *InviteKV) Generate(email string) (url string) {
// generate opaque token // generate opaque token
opaque := "ASDF" //rand.// had old thing to generate this...
inv := Invite{
Email: email,
Generated: time.Now(),
}
// store relationship in store // store relationship in store
i.store.Set(opaque, inv)
// return domain + token // return domain + token
return i.URL + opaque
} }

6
new.go
View file

@ -2,5 +2,9 @@ package invite
// New creates a new invite store // New creates a new invite store
func New(root_url string, store Store) InviteKV { func New(root_url string, store Store) InviteKV {
res := InviteKV{
URL: root_url,
store: store,
}
return res
} }

View file

@ -1,6 +1,19 @@
package invite package invite
import (
"strings"
"time"
)
// returns the email allowed for this invite // returns the email allowed for this invite
func (i *InviteKV) Redeem(given_url string) string { func (i *InviteKV) Redeem(given_url string) (string, bool) {
// check URL signature // check URL
opaque := strings.Split(given_url, i.URL)[1]
potential, exists := i.store.Get(opaque)
if !exists {
return "", false
}
potential.Redeemed = time.Now()
i.store.Set(opaque, potential)
return potential.Email, true
} }

View file

@ -1,6 +1,7 @@
package invite package invite
type Store interface { type Store interface {
Get(string) string Get(string) (Invite, bool)
Set(string, string) Set(string, Invite)
Del(string)
} }

11
type.go Normal file
View file

@ -0,0 +1,11 @@
package invite
import (
"time"
)
type Invite struct {
Email string
Generated time.Time
Redeemed time.Time
}