shortify/serve.go
2025-08-06 20:59:33 +02:00

59 lines
1.0 KiB
Go

package shortify
import (
"encoding/binary"
"net"
"os"
"github.com/gofiber/fiber/v2"
)
func (s *Server) Admin() *fiber.App {
a := fiber.New()
a.Get("/register", func(c *fiber.Ctx) error {
prefix, err := s.prefixManager.AllocateNewPrefix()
if err != nil {
return err
}
response := make([]byte, 2)
binary.LittleEndian.PutUint16(response, prefix)
return c.Send(response)
})
a.Post("/shorten", func(c *fiber.Ctx) error {
longUrl := string(c.Body())
shortUrl := c.Query("s")
if shortUrl == "" {
shortUrl = s.serverGen.NextID()
}
err := s.storage.Put(shortUrl, longUrl)
if err != nil {
return err
}
return c.SendString(shortUrl)
})
return a
}
// util
func GetUnixListener(path string) (net.Listener, error) {
// Remove old socket if exists
socketPath := path
_ = os.Remove(socketPath)
// Create a Unix socket listener
ln, err := net.Listen("unix", socketPath)
if err != nil {
return nil, err
}
// Optionally set permissions so other processes can connect
_ = os.Chmod(socketPath, 0666)
return ln, nil
}