flick

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

main.go (1179B)


      1 package main
      2 
      3 import (
      4 	"context"
      5 	"fmt"
      6 	"io"
      7 	"os"
      8   "os/signal"
      9 	"path/filepath"
     10 	"regexp"
     11   "syscall"
     12 
     13 	"github.com/mitchellh/go-finger"
     14 )
     15 
     16 var profile_folder = "profiles"
     17 
     18 var validUser = regexp.MustCompile(`^[a-zA-Z0-9_-]*$`)
     19 
     20 func handler(ctx context.Context, w io.Writer, q *finger.Query) {
     21   text := ""
     22   filename := ""
     23 
     24   if !validUser.MatchString(q.Username) {
     25     w.Write([]byte("ERR:\nInvalid username!"))
     26     return
     27   }
     28 
     29   if q.Username == "" {
     30     filename = "root"
     31   } else {
     32     filename = filepath.Join(profile_folder, q.Username)
     33   }
     34 
     35   b, err := os.ReadFile(filename)
     36   if err != nil {
     37     text = "ERR:\nNo such user!"
     38   } else {
     39     text = "MSG:\n" + string(b)
     40   }
     41 
     42   fmt.Fprint(w, text)
     43 
     44   if q.Username == "" {
     45     fmt.Println("Requested root")
     46   } else {
     47     fmt.Printf("Requested username: %s\n", q.Username)
     48   }
     49 }
     50 
     51 func main() {
     52 	fmt.Print("\x1b[?1049h")
     53 
     54   sig := make(chan os.Signal, 1)
     55 	signal.Notify(sig, os.Interrupt, syscall.SIGTERM)
     56 
     57 	go func() {
     58 		<-sig
     59 
     60 		fmt.Println("\nShutting down...")
     61 	  fmt.Print("\x1b[?1049l")
     62     os.Exit(0)
     63 	}()
     64 
     65   fmt.Print("Flick Finger Server is running on 0.0.0.0\n")
     66   finger.Serve(finger.HandlerFunc(handler))
     67 }