commit 1c431553933dad925f4ca4a84bb55eef786f5ff2
parent 4d9eed02504028f85e003354389a5ba76a42fd40
Author: Lucy <contact@lucy.lt>
Date: Tue, 23 Jun 2026 00:20:39 +0300
Another update
Diffstat:
| M | main.go | | | 74 | ++++++++++++++++++++++++++++++++++++++++++++------------------------------ |
1 file changed, 44 insertions(+), 30 deletions(-)
diff --git a/main.go b/main.go
@@ -1,53 +1,67 @@
package main
import (
- "bufio"
"context"
"fmt"
"io"
"os"
+ "os/signal"
"path/filepath"
"regexp"
+ "syscall"
"github.com/mitchellh/go-finger"
)
-func main() {
- profile_folder := "profiles"
+var profile_folder = "profiles"
+
+var validUser = regexp.MustCompile(`^[a-zA-Z0-9_-]*$`)
+
+func handler(ctx context.Context, w io.Writer, q *finger.Query) {
+ text := ""
+ filename := ""
+
+ if !validUser.MatchString(q.Username) {
+ w.Write([]byte("ERR:\nInvalid username!"))
+ return
+ }
- var validUser = regexp.MustCompile(`^[a-zA-Z0-9_-]+$`)
+ if q.Username == "" {
+ filename = "root"
+ } else {
+ filename = filepath.Join(profile_folder, q.Username)
+ }
- go finger.Serve(finger.HandlerFunc(func(ctx context.Context, w io.Writer, q *finger.Query) {
- text := ""
- filename := ""
+ b, err := os.ReadFile(filename)
+ if err != nil {
+ text = "ERR:\nNo such user!"
+ } else {
+ text = "MSG:\n" + string(b)
+ }
- if !validUser.MatchString(q.Username) {
- w.Write([]byte("ERR:\nInvalid username!"))
- return
- }
+ fmt.Fprint(w, text)
- if q.Username == "" {
- filename = "root"
- } else {
- filename = filepath.Join(profile_folder, q.Username)
- }
+ if q.Username == "" {
+ fmt.Println("Requested root")
+ } else {
+ fmt.Printf("Requested username: %s\n", q.Username)
+ }
+}
+
+func main() {
+ fmt.Print("\x1b[?1049h")
- b, err := os.ReadFile(filename)
- if err != nil {
- text = "ERR:\nNo such user!"
- } else {
- text = "MSG:\n" + string(b)
- }
+ sig := make(chan os.Signal, 1)
+ signal.Notify(sig, os.Interrupt, syscall.SIGTERM)
- fmt.Fprint(w, text)
+ go func() {
+ <-sig
- if q.Username == "" {
- fmt.Println("Requested root")
- } else {
- fmt.Printf("Requested username: %s\n", q.Username)
- }
- }))
+ fmt.Println("\nShutting down...")
+ fmt.Print("\x1b[?1049l")
+ os.Exit(0)
+ }()
fmt.Print("Flick Finger Server is running on 0.0.0.0\n")
- bufio.NewReader(os.Stdin).ReadBytes('\n')
+ finger.Serve(finger.HandlerFunc(handler))
}