view cmd/tokenserver/main.go @ 14:afc0de09231f

Fix path in tokenserver. Fix configuration in client. After reorganizing and merging the tokenserver with the current frontendcode were two defects: 1) The run:both command for yarn the toplevel path as origin. Now to start from the client folder, the command has to be relative to that. 2) The api prefix was doubled for the tokenserver route. The subpaths are '/' and '/token', not '/api/token'
author Thomas Junk <thomas.junk@intevation.de>
date Wed, 20 Jun 2018 17:21:32 +0200
parents 000adddf74c8
children 05d828374256
line wrap: on
line source

package main

import (
	"flag"
	"fmt"
	"log"
	"net/http"
	"path/filepath"
	"time"

	jwt "github.com/dgrijalva/jwt-go"
)

func token(rw http.ResponseWriter, req *http.Request) {
	user := req.FormValue("user")
	password := req.FormValue("password")

	_ = password

	eol := time.Now().Add(45 * time.Minute)

	token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
		"user": user,
		"eol":  eol.Unix(),
	})

	signingKey := []byte("very, very secret!")

	tokenString, err := token.SignedString(signingKey)

	if err != nil {
		http.Error(rw, "Signing failed", http.StatusInternalServerError)
		return
	}

	rw.Header().Set("Content-Type", "text/plain")

	fmt.Fprintf(rw, "%s\n", tokenString)
}

func main() {
	port := flag.Int("port", 8000, "port to listen at.")
	host := flag.String("host", "localhost", "host to listen at.")
	flag.Parse()
	p, _ := filepath.Abs("./web")
	mux := http.NewServeMux()
	mux.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir(p))))
	mux.HandleFunc("/token", token)
	api := http.NewServeMux()
	api.Handle("/api/", http.StripPrefix("/api", mux))

	addr := fmt.Sprintf("%s:%d", *host, *port)
	log.Fatalln(http.ListenAndServe(addr, api))
}