Skip to content
Snippets Groups Projects
Verified Commit 9c47618b authored by Ophestra's avatar Ophestra
Browse files

feat(api): add registration count API endpoint


This adds /api/count which returns a value initialised on startup and incremented each successful registration.

Signed-off-by: default avatarOphestra Umiker <cat@ophivana.moe>
parent 5376d04a
No related branches found
No related tags found
1 merge request!6feat(api): add registration count API endpoint
......@@ -4,6 +4,7 @@ import (
"fmt"
"log"
"os"
"sync/atomic"
"time"
"github.com/gofiber/contrib/hcaptcha"
......@@ -54,8 +55,14 @@ func serve(sig chan os.Signal, db *leveldb.DB) error {
confEnv[hCaptchaSiteKey][0], confEnv[hCaptchaSecretKey][0])
}
count := new(atomic.Uint64)
routeHCaptchaSiteKey(app, "/api", !hCaptchaEnable, conf[hCaptchaSiteKey])
routeRegister(app, "/api/register", db, captcha)
routeRegister(app, "/api/register", db, count, captcha)
if err := routeCount(app, "/api/count", db, count); err != nil {
return err
}
// graceful shutdown
go func() {
......
count.go 0 → 100644
package main
import (
"log"
"strconv"
"sync/atomic"
"github.com/gofiber/fiber/v3"
"github.com/syndtr/goleveldb/leveldb"
)
func routeCount(app *fiber.App, p string, db *leveldb.DB, count *atomic.Uint64) error {
var c uint64
iter := db.NewIterator(nil, nil)
for iter.Next() {
c++
}
iter.Release()
if err := iter.Error(); err != nil {
return err
}
count.Store(c)
log.Printf("registration count is %d on startup", c)
app.Get(p, func(c fiber.Ctx) error {
c.Set("Content-Type", "text/plain")
return c.SendString(strconv.FormatUint(count.Load(), 10))
})
return nil
}
......@@ -3,6 +3,7 @@ package main
import (
"log"
"regexp"
"sync/atomic"
"github.com/gofiber/fiber/v3"
"github.com/syndtr/goleveldb/leveldb"
......@@ -15,7 +16,7 @@ type registration struct {
}
// Waitlist registration route
func routeRegister(app *fiber.App, p string, db *leveldb.DB, captcha fiber.Handler) {
func routeRegister(app *fiber.App, p string, db *leveldb.DB, count *atomic.Uint64, captcha fiber.Handler) {
app.Post(p, func(c fiber.Ctx) error {
req := new(registration)
......@@ -53,6 +54,7 @@ func routeRegister(app *fiber.App, p string, db *leveldb.DB, captcha fiber.Handl
}
log.Printf("registered email %q", req.Email)
count.Add(1)
return c.JSON(newMessage(true, "Email registered successfully"))
}, captcha)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment