ranpas: remove all dependencies except stdlib
Signed-off-by: Nagy Károly Gábriel <k@jpi.io>
This commit is contained in:
@@ -2,11 +2,10 @@ package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/labstack/echo"
|
||||
"github.com/labstack/echo/middleware"
|
||||
)
|
||||
|
||||
type passwordData struct {
|
||||
@@ -20,48 +19,75 @@ type passwordData struct {
|
||||
|
||||
var d, defaults passwordData
|
||||
|
||||
func generatePassword(c echo.Context) error {
|
||||
|
||||
func generatePassword(w http.ResponseWriter, r *http.Request) {
|
||||
var err error
|
||||
|
||||
d.Length, err = strconv.Atoi(c.FormValue("length"))
|
||||
if err != nil {
|
||||
d.Length = defaults.Length
|
||||
if r.URL.Path != "/" {
|
||||
http.Error(w, "404 not found.", http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
|
||||
d.Digits, err = strconv.Atoi(c.FormValue("digits"))
|
||||
if err != nil {
|
||||
d.Digits = defaults.Digits
|
||||
}
|
||||
switch r.Method {
|
||||
case "GET":
|
||||
d.Password, err = generate(defaults.Length, defaults.Digits, defaults.Symbols, false, false)
|
||||
if err != nil {
|
||||
d.Password = "Error: " + err.Error()
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
w.Write([]byte(d.Password))
|
||||
return
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write([]byte(d.Password))
|
||||
case "POST":
|
||||
if err = r.ParseForm(); err != nil {
|
||||
w.WriteHeader(http.StatusUnprocessableEntity)
|
||||
w.Write([]byte(fmt.Sprintf("ParseForm() err: %v", err)))
|
||||
return
|
||||
}
|
||||
d.Length, err = strconv.Atoi(r.FormValue("length"))
|
||||
if err != nil {
|
||||
d.Length = defaults.Length
|
||||
}
|
||||
|
||||
d.Symbols, err = strconv.Atoi(c.FormValue("symbols"))
|
||||
if err != nil {
|
||||
d.Symbols = defaults.Symbols
|
||||
}
|
||||
d.Digits, err = strconv.Atoi(r.FormValue("digits"))
|
||||
if err != nil {
|
||||
d.Digits = defaults.Digits
|
||||
}
|
||||
|
||||
if c.FormValue("noupper") == "on" {
|
||||
d.NoUpper = true
|
||||
}
|
||||
d.Symbols, err = strconv.Atoi(r.FormValue("symbols"))
|
||||
if err != nil {
|
||||
d.Symbols = defaults.Symbols
|
||||
}
|
||||
|
||||
if c.FormValue("denyrepeat") == "on" {
|
||||
d.DenyRepeat = true
|
||||
}
|
||||
if r.FormValue("noupper") == "on" {
|
||||
d.NoUpper = true
|
||||
}
|
||||
|
||||
// Generate a password
|
||||
d.Password, err = generate(d.Length, d.Digits, d.Symbols, d.NoUpper, !d.DenyRepeat)
|
||||
if err != nil {
|
||||
d.Password = "Error: " + err.Error()
|
||||
}
|
||||
if d.Length == 0 {
|
||||
d.Password = "Error: password can not have zero length"
|
||||
}
|
||||
if r.FormValue("denyrepeat") == "on" {
|
||||
d.DenyRepeat = true
|
||||
}
|
||||
|
||||
return c.String(http.StatusOK, d.Password)
|
||||
d.Password, err = generate(d.Length, d.Digits, d.Symbols, d.NoUpper, !d.DenyRepeat)
|
||||
if err != nil {
|
||||
d.Password = "Error: " + err.Error()
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
w.Write([]byte(d.Password))
|
||||
return
|
||||
}
|
||||
if d.Length == 0 {
|
||||
d.Password = "Error: password can not have zero length"
|
||||
}
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write([]byte(d.Password))
|
||||
default:
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte("Sorry, only GET and POST methods are supported."))
|
||||
}
|
||||
}
|
||||
|
||||
func checkHealth(c echo.Context) error {
|
||||
s := `{"status":"OK"}`
|
||||
return c.String(http.StatusOK, s)
|
||||
func checkHealth(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write([]byte("Status:OK"))
|
||||
}
|
||||
|
||||
func main() {
|
||||
@@ -77,17 +103,8 @@ func main() {
|
||||
defaults.Digits = *digitsPtr
|
||||
defaults.Symbols = *symbolsPtr
|
||||
|
||||
e := echo.New()
|
||||
e.HideBanner = true
|
||||
http.HandleFunc("/", generatePassword)
|
||||
http.HandleFunc("/health", checkHealth)
|
||||
|
||||
// Middleware
|
||||
e.Use(middleware.Logger())
|
||||
e.Use(middleware.Recover())
|
||||
|
||||
e.GET("/", generatePassword)
|
||||
e.POST("/", generatePassword)
|
||||
|
||||
e.GET("/health", checkHealth)
|
||||
|
||||
e.Logger.Fatal(e.Start(":" + strconv.Itoa(*portPtr)))
|
||||
log.Fatal(http.ListenAndServe(":"+strconv.Itoa(*portPtr), nil))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user