Select Git revision
PACKAGING.md
-
Richard Hartmann authoredRichard Hartmann authored
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
}