From 70a19ba6d7e3cc8d4f29e435f186f1dd2035ff52 Mon Sep 17 00:00:00 2001 From: risotto Date: Mon, 7 Apr 2025 05:54:13 -0600 Subject: [PATCH] more invite thoughts --- generate.go | 9 +++++++++ new.go | 6 +++++- redeem.go | 17 +++++++++++++++-- store.go | 5 +++-- type.go | 11 +++++++++++ 5 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 type.go diff --git a/generate.go b/generate.go index 17e9c07..85d84bd 100644 --- a/generate.go +++ b/generate.go @@ -1,8 +1,17 @@ package invite +import "time" + // Generate makes a new invite func (i *InviteKV) Generate(email string) (url string) { // generate opaque token + opaque := "ASDF" //rand.// had old thing to generate this... + inv := Invite{ + Email: email, + Generated: time.Now(), + } // store relationship in store + i.store.Set(opaque, inv) // return domain + token + return i.URL + opaque } diff --git a/new.go b/new.go index 67797d0..2b2705d 100644 --- a/new.go +++ b/new.go @@ -2,5 +2,9 @@ package invite // New creates a new invite store func New(root_url string, store Store) InviteKV { - + res := InviteKV{ + URL: root_url, + store: store, + } + return res } diff --git a/redeem.go b/redeem.go index b7a0347..4ae6a01 100644 --- a/redeem.go +++ b/redeem.go @@ -1,6 +1,19 @@ package invite +import ( + "strings" + "time" +) + // returns the email allowed for this invite -func (i *InviteKV) Redeem(given_url string) string { - // check URL signature +func (i *InviteKV) Redeem(given_url string) (string, bool) { + // 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 } diff --git a/store.go b/store.go index 82366eb..506d7f6 100644 --- a/store.go +++ b/store.go @@ -1,6 +1,7 @@ package invite type Store interface { - Get(string) string - Set(string, string) + Get(string) (Invite, bool) + Set(string, Invite) + Del(string) } diff --git a/type.go b/type.go new file mode 100644 index 0000000..51b4d06 --- /dev/null +++ b/type.go @@ -0,0 +1,11 @@ +package invite + +import ( + "time" +) + +type Invite struct { + Email string + Generated time.Time + Redeemed time.Time +}