view cmd/gemma/main.go @ 206:cd6ad5eaef8d

Renamed cmd/tokenserver to cmd/gemma.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 22 Jul 2018 10:40:17 +0200
parents cmd/tokenserver/main.go@fe3a88f00b0a
children ddc78991edbc
line wrap: on
line source

package main

import (
	"context"
	"flag"
	"fmt"
	"log"
	"net/http"
	"os"
	"os/signal"
	"path/filepath"
	"syscall"

	"gemma.intevation.de/gemma/auth"
)

func sysAdmin(rw http.ResponseWriter, req *http.Request) {
	session, _ := auth.GetSession(req)
	rw.Header().Set("Content-Type", "text/plain")
	fmt.Fprintf(rw, "%s is a sys_admin\n", session.User)
}

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("/api/token", token)
	mux.Handle("/api/logout", auth.SessionMiddleware(http.HandlerFunc(token)))
	mux.Handle("/api/renew", auth.SessionMiddleware(http.HandlerFunc(renew)))
	mux.Handle("/api/sys_admin",
		auth.SessionMiddleware(
			auth.SessionChecker(http.HandlerFunc(sysAdmin), auth.HasRole("sys_admin"))))
	mux.Handle("/api/create_user",
		auth.SessionMiddleware(
			auth.SessionChecker(http.HandlerFunc(createUser), auth.HasRole("sys_admin"))))

	addr := fmt.Sprintf("%s:%d", *host, *port)

	server := http.Server{Addr: addr, Handler: mux}

	done := make(chan error)

	go func() {
		defer close(done)
		done <- server.ListenAndServe()
	}()

	sigChan := make(chan os.Signal)
	signal.Notify(sigChan, os.Interrupt, os.Kill, syscall.SIGTERM)

	select {
	case err := <-done:
		if err != nil && err != http.ErrServerClosed {
			log.Fatalf("error: %v\n", err)
		}
	case <-sigChan:
	}

	server.Shutdown(context.Background())

	<-done

	if err := auth.ConnPool.Shutdown(); err != nil {
		log.Fatalf("error: %v\n", err)
	}
}