package application

import (
	"fmt"
	"strconv"

	"github.com/gorilla/sessions"
	log "github.com/sirupsen/logrus"
	"goauthentik.io/api"
	"goauthentik.io/internal/config"
	"gopkg.in/boj/redistore.v1"
)

func GetStore(p api.ProxyOutpostConfig) sessions.Store {
	var store sessions.Store
	if config.G.Redis.Host != "" {
		rs, err := redistore.NewRediStoreWithDB(10, "tcp", fmt.Sprintf("%s:%d", config.G.Redis.Host, config.G.Redis.Port), config.G.Redis.Password, strconv.Itoa(config.G.Redis.OutpostSessionDB), []byte(*p.CookieSecret))
		if err != nil {
			panic(err)
		}
		rs.Options.Domain = *p.CookieDomain
		log.Info("using redis session backend")
		store = rs
	} else {
		cs := sessions.NewCookieStore([]byte(*p.CookieSecret))
		cs.Options.Domain = *p.CookieDomain
		log.Info("using cookie session backend")
		store = cs
	}
	return store
}