feat: share link

This commit is contained in:
vxclutch
2026-05-28 08:25:59 -04:00
parent 363c3b6c96
commit d18838dfee
6 changed files with 46 additions and 2 deletions

3
TODO
View File

@@ -1,7 +1,6 @@
maint: clean up source code maint: clean up source code
maint: document more maint: document more
maint: make the colors more cross platform
feat: improve flags feat: improve flags
feat: replace uuid dep with custom id generator feat: replace uuid dep with custom id generator
feat: multiple files feat: multiple files
feat: share link
maint: make the colors more cross platform

View File

@@ -7,10 +7,12 @@ import (
"lash" "lash"
"lash/internal/app" "lash/internal/app"
"lash/internal/errx" "lash/internal/errx"
share "lash/internal/shareLink"
"net/http" "net/http"
) )
var versionFlag = flag.Bool("version", false, "Print out version and exit.") var versionFlag = flag.Bool("version", false, "Print out version and exit.")
var port = flag.Int("p", 1337, "Set the port for LASH exchanges.") var port = flag.Int("p", 1337, "Set the port for LASH exchanges.")
func main() { func main() {
@@ -24,6 +26,7 @@ func main() {
srv := app.New() srv := app.New()
// TODO(vxc): Make this more portable // TODO(vxc): Make this more portable
errx.Log("Your share link is %s", share.GenerateShareLink(*port))
errx.Log("Your token is \033[1;92m%s\033[0m", lash.Token) errx.Log("Your token is \033[1;92m%s\033[0m", lash.Token)
errx.Log("starting server at http://0.0.0.0:%d", *port) errx.Log("starting server at http://0.0.0.0:%d", *port)

View File

@@ -32,6 +32,7 @@ func New() http.Handler {
mux.HandleFunc("/", share.Handler) mux.HandleFunc("/", share.Handler)
mux.HandleFunc("/api/receive-token", file.APIHandler) mux.HandleFunc("/api/receive-token", file.APIHandler)
mux.HandleFunc("/"+lash.ShareLinkToken, file.FileHandler)
return mux return mux
} }

View File

@@ -40,3 +40,13 @@ func (h FileData) APIHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
w.Write(h.Contents) w.Write(h.Contents)
} }
func (h FileData) FileHandler(w http.ResponseWriter, r *http.Request) {
// Send the file over as a stream of bytes
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%s", h.FileName))
w.Header().Set("Content-Type", "application/octet-stream")
w.Header().Set("Content-Length", strconv.Itoa(len(h.Contents)))
w.WriteHeader(http.StatusOK)
w.Write(h.Contents)
}

View File

@@ -0,0 +1,29 @@
package sharelink
import (
"fmt"
"lash"
"lash/internal/errx"
"net"
)
func GenerateShareLink(port int) string {
link := "http://"
link += getLocalIP()
link += fmt.Sprintf(":%d", port)
link += "/"
link += lash.ShareLinkToken
return link
}
func getLocalIP() string {
conn, err := net.Dial("udp", "8.8.8.8:80")
if err != nil {
errx.FatalPerror(err)
}
defer conn.Close()
localAddress := conn.LocalAddr().(*net.UDPAddr)
return localAddress.IP.String()
}

View File

@@ -14,3 +14,5 @@ var Version string
// TODO(vxc): Replace this with custom token generator // TODO(vxc): Replace this with custom token generator
var Token string = uuid.New().String() var Token string = uuid.New().String()
var ShareLinkToken string = uuid.New().String()