flick

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

commit 4d9eed02504028f85e003354389a5ba76a42fd40
parent 20b812b172e2ed3512716d88d3038731c3c716dd
Author: Lucy <contact@lucy.lt>
Date:   Sat, 16 May 2026 11:18:04 +0300

Update go version, fix module name, fix vurnerabilities, some idiomatic changes

Diffstat:
M.gitignore | 2+-
Mgo.mod | 6+++---
Mmain.go | 53++++++++++++++++++++++++++++-------------------------
3 files changed, 32 insertions(+), 29 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,5 +1,5 @@ profiles/* root -finger +flick *.exe *.sum diff --git a/go.mod b/go.mod @@ -1,5 +1,5 @@ -module finger +module flick -go 1.16 +go 1.25 -require github.com/mitchellh/go-finger v0.0.0-20170709001451-be12f0ff8b97 // indirect +require github.com/mitchellh/go-finger v0.0.0-20170709001451-be12f0ff8b97 diff --git a/main.go b/main.go @@ -1,50 +1,53 @@ package main -import "github.com/mitchellh/go-finger" import ( - "fmt" - "bufio" - "os" - "io/ioutil" - "io" - "context" + "bufio" + "context" + "fmt" + "io" + "os" + "path/filepath" + "regexp" + + "github.com/mitchellh/go-finger" ) func main() { + profile_folder := "profiles" - profile_folder := "profiles/" + var validUser = regexp.MustCompile(`^[a-zA-Z0-9_-]+$`) go finger.Serve(finger.HandlerFunc(func(ctx context.Context, w io.Writer, q *finger.Query) { text := "" filename := "" + if !validUser.MatchString(q.Username) { + w.Write([]byte("ERR:\nInvalid username!")) + return + } + if q.Username == "" { filename = "root" } else { - filename = profile_folder + q.Username + filename = filepath.Join(profile_folder, q.Username) } - file, err := os.Open(filename) + b, err := os.ReadFile(filename) if err != nil { text = "ERR:\nNo such user!" + } else { + text = "MSG:\n" + string(b) } - defer func() { - if err = file.Close(); err != nil { - } - }() - - if err == nil { - b, err := ioutil.ReadAll(file) - if err != nil { - text = "ERR:\nNo such user!" - } else { - text = "OK:\n" + string(b) - } - } - w.Write([]byte(fmt.Sprintln(text))) - fmt.Printf("Requested username: %s\n", q.Username) + fmt.Fprint(w, text) + + if q.Username == "" { + fmt.Println("Requested root") + } else { + fmt.Printf("Requested username: %s\n", q.Username) + } })) + fmt.Print("Flick Finger Server is running on 0.0.0.0\n") bufio.NewReader(os.Stdin).ReadBytes('\n') }