derek mcquay
4f7b61cb86
cleaned up some things from starz that weren't needed any more. Also cleaned up the oauth process and now am storing the users emai but also have the userInfo struct that gathers all the info that google oauth userinfo returns
149 lines
2.6 KiB
Go
149 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"math/rand"
|
|
"net/http"
|
|
"os"
|
|
"os/signal"
|
|
"strconv"
|
|
"time"
|
|
|
|
"s.mcquay.me/dm/chipmunk"
|
|
|
|
"github.com/kelseyhightower/envconfig"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
type Config struct {
|
|
Host string
|
|
Port int
|
|
ClientID string
|
|
ClientSecret string
|
|
CookieSecret string
|
|
}
|
|
|
|
func init() {
|
|
rand.Seed(time.Now().UnixNano())
|
|
}
|
|
|
|
func main() {
|
|
var host, clientId, clientSecret, cookieSecret string
|
|
var port int
|
|
|
|
var run = &cobra.Command{
|
|
Use: "run",
|
|
Short: "run command",
|
|
Long: `run chipd with given options`,
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
config := &Config{}
|
|
err := envconfig.Process("chipd", config)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if host != "" {
|
|
config.Host = host
|
|
}
|
|
if port != -1 {
|
|
config.Port = port
|
|
} else {
|
|
if config.Port == 0 {
|
|
config.Port = 8000
|
|
}
|
|
}
|
|
if clientId != "" {
|
|
config.ClientID = clientId
|
|
}
|
|
if clientSecret != "" {
|
|
config.ClientSecret = clientSecret
|
|
}
|
|
if cookieSecret != "" {
|
|
config.CookieSecret = cookieSecret
|
|
} else {
|
|
if config.CookieSecret == "" {
|
|
config.CookieSecret = strconv.Itoa(rand.Int())
|
|
}
|
|
}
|
|
if config.ClientID == "" || config.ClientSecret == "" {
|
|
log.Println("Please provide both a clientId and a clientSecret")
|
|
os.Exit(1)
|
|
}
|
|
log.Printf("%+v", config)
|
|
|
|
sigs := make(chan os.Signal, 1)
|
|
signal.Notify(sigs, os.Interrupt, os.Kill)
|
|
go func() {
|
|
s := <-sigs
|
|
log.Printf("signal: %+v", s)
|
|
os.Exit(1)
|
|
}()
|
|
|
|
sm := http.NewServeMux()
|
|
_ = chipmunk.NewServer(
|
|
sm,
|
|
config.ClientID,
|
|
config.ClientSecret,
|
|
config.CookieSecret,
|
|
"",
|
|
)
|
|
|
|
hostname := "localhost"
|
|
if config.Host == "" {
|
|
hostname, err = os.Hostname()
|
|
if err != nil {
|
|
log.Printf("problem getting hostname:", err)
|
|
}
|
|
}
|
|
log.Printf("serving at: http://%s:%d/", hostname, config.Port)
|
|
|
|
addr := fmt.Sprintf("%s:%d", config.Host, config.Port)
|
|
err = http.ListenAndServe(addr, sm)
|
|
if err != nil {
|
|
log.Printf("%+v", err)
|
|
os.Exit(1)
|
|
}
|
|
},
|
|
}
|
|
|
|
run.Flags().StringVarP(
|
|
&host,
|
|
"host",
|
|
"n",
|
|
"",
|
|
"hostname",
|
|
)
|
|
run.Flags().IntVarP(
|
|
&port,
|
|
"port",
|
|
"p",
|
|
-1,
|
|
"port",
|
|
)
|
|
run.Flags().StringVarP(
|
|
&clientId,
|
|
"clientId",
|
|
"i",
|
|
"",
|
|
"github oauth clientId",
|
|
)
|
|
run.Flags().StringVarP(
|
|
&clientSecret,
|
|
"clientSecret",
|
|
"s",
|
|
"",
|
|
"github oauth clientSecret",
|
|
)
|
|
run.Flags().StringVarP(
|
|
&cookieSecret,
|
|
"cookieSecret",
|
|
"c",
|
|
"",
|
|
"cookieSecret",
|
|
)
|
|
|
|
var rootCmd = &cobra.Command{Use: "app"}
|
|
rootCmd.AddCommand(run)
|
|
rootCmd.Execute()
|
|
}
|