59 lines
1.0 KiB
Go
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
|
|
|
|
}
|