Skip to content
Snippets Groups Projects
Select Git revision
1 result Searching

main.go

Blame
  • main.go 5.77 KiB
    package main
    
    import (
    	"crypto/rand"
    	"encoding/hex"
    	"encoding/json"
    	"errors"
    	"flag"
    	"fmt"
    	"html/template"
    	"io"
    	"io/ioutil"
    	"log"
    	"net/http"
    	"time"
    
    	"golang.org/x/oauth2"
    
    	"github.com/dgrijalva/jwt-go"
    	"github.com/gorilla/mux"
    	"github.com/gorilla/sessions"
    	"github.com/nsheridan/cashier/lib"
    	"github.com/nsheridan/cashier/server/auth"
    	"github.com/nsheridan/cashier/server/auth/google"
    	"github.com/nsheridan/cashier/server/config"
    	"github.com/nsheridan/cashier/server/signer"
    )
    
    var (
    	cfg = flag.String("config_file", "config.json", "Path to configuration file.")
    )
    
    type appContext struct {
    	cookiestore   *sessions.CookieStore
    	authprovider  auth.Provider
    	authsession   *auth.Session
    	views         *template.Template
    	sshKeySigner  *signer.KeySigner
    	jwtSigningKey []byte
    }
    
    func (a *appContext) getAuthCookie(r *http.Request) *oauth2.Token {
    	session, _ := a.cookiestore.Get(r, "tok")
    	t, ok := session.Values["token"]
    	if !ok {
    		return nil
    	}
    	var tok oauth2.Token
    	if err := json.Unmarshal(t.([]byte), &tok); err != nil {
    		return nil
    	}
    	if !a.authprovider.Valid(&tok) {
    		return nil
    	}
    	return &tok
    }
    
    func (a *appContext) setAuthCookie(w http.ResponseWriter, r *http.Request, t *oauth2.Token) {
    	session, _ := a.cookiestore.Get(r, "tok")
    	val, _ := json.Marshal(t)
    	session.Values["token"] = val
    	session.Save(r, w)
    }
    
    func parseKey(r *http.Request) (*lib.SignRequest, error) {
    	var s lib.SignRequest
    	body, err := ioutil.ReadAll(r.Body)
    	if err != nil {
    		return nil, err
    	}