diff --git a/.gitignore b/.gitignore index fac86fa..20e2001 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .env* vote -.idea/ \ No newline at end of file +.idea/ +.vscode/ \ No newline at end of file diff --git a/constitutional.go b/constitutional.go index 7528b34..4fc412c 100644 --- a/constitutional.go +++ b/constitutional.go @@ -49,8 +49,8 @@ func InitConstitution() { startOfDay := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, time.Local) nextMidnight := startOfDay.AddDate(0, 0, 1) fmt.Println(nextMidnight) - fmt.Println(nextMidnight.Sub(time.Now())) - ticker := time.NewTicker(nextMidnight.Sub(time.Now())) + fmt.Println(time.Until(nextMidnight)) + ticker := time.NewTicker(time.Until(nextMidnight)) first := true go func() { for { diff --git a/database/database.go b/database/database.go index d03bc42..238fe85 100644 --- a/database/database.go +++ b/database/database.go @@ -21,7 +21,7 @@ const ( Updated UpsertResult = 1 ) -var Client *mongo.Client = Connect() +var Client *mongo.Client var db = "" func Connect() *mongo.Client { @@ -33,7 +33,7 @@ func Connect() *mongo.Client { logging.Logger.WithFields(logrus.Fields{"module": "database", "method": "Connect"}).Info("beginning database connection") - ctx, cancel := context.WithTimeout(context.TODO(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() uri := os.Getenv("VOTE_MONGODB_URI") @@ -54,7 +54,7 @@ func Connect() *mongo.Client { } func Disconnect() { - ctx, cancel := context.WithTimeout(context.TODO(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() if err := Client.Disconnect(ctx); err != nil { diff --git a/go.mod b/go.mod index c16c793..2f6a5d5 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.24.1 require ( github.com/computersciencehouse/csh-auth v0.1.0 github.com/gin-gonic/gin v1.11.0 + github.com/joho/godotenv v1.5.1 github.com/sirupsen/logrus v1.9.3 github.com/slack-go/slack v0.17.3 github.com/stretchr/testify v1.11.1 diff --git a/go.sum b/go.sum index b325fdf..778f6f7 100644 --- a/go.sum +++ b/go.sum @@ -42,6 +42,8 @@ github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co= diff --git a/main.go b/main.go index a5f1a2a..cccf7dc 100644 --- a/main.go +++ b/main.go @@ -19,6 +19,7 @@ import ( "github.com/computersciencehouse/vote/logging" "github.com/computersciencehouse/vote/sse" "github.com/gin-gonic/gin" + "github.com/joho/godotenv" "github.com/sirupsen/logrus" "go.mongodb.org/mongo-driver/bson/primitive" "mvdan.cc/xurls/v2" @@ -57,6 +58,8 @@ func MakeLinks(s string) template.HTML { var oidcClient = OIDCClient{} func main() { + godotenv.Load() + database.Client = database.Connect() r := gin.Default() r.StaticFS("/static", http.Dir("static")) r.SetFuncMap(template.FuncMap{ @@ -126,7 +129,34 @@ func main() { closedPolls = uniquePolls(closedPolls) c.HTML(200, "index.tmpl", gin.H{ - "Polls": polls, + "Polls": polls, + "Username": claims.UserInfo.Username, + "FullName": claims.UserInfo.FullName, + }) + })) + + r.GET("/closed", csh.AuthWrapper(func(c *gin.Context) { + cl, _ := c.Get("cshauth") + claims := cl.(cshAuth.CSHClaims) + + closedPolls, err := database.GetClosedVotedPolls(c, claims.UserInfo.Username) + if err != nil { + c.JSON(500, gin.H{"error": err.Error()}) + return + } + ownedPolls, err := database.GetClosedOwnedPolls(c, claims.UserInfo.Username) + if err != nil { + c.JSON(500, gin.H{"error": err.Error()}) + return + } + closedPolls = append(closedPolls, ownedPolls...) + + sort.Slice(closedPolls, func(i, j int) bool { + return closedPolls[i].Id > closedPolls[j].Id + }) + closedPolls = uniquePolls(closedPolls) + + c.HTML(200, "closed.tmpl", gin.H{ "ClosedPolls": closedPolls, "Username": claims.UserInfo.Username, "FullName": claims.UserInfo.FullName, @@ -430,6 +460,7 @@ func main() { "IsOpen": poll.Open, "IsHidden": poll.Hidden, "CanModify": canModify, + "CanVote": canVote(claims.UserInfo, *poll, poll.AllowedUsers), "Username": claims.UserInfo.Username, "FullName": claims.UserInfo.FullName, "Gatekeep": poll.Gatekeep, diff --git a/templates/closed.tmpl b/templates/closed.tmpl new file mode 100644 index 0000000..c0a02f9 --- /dev/null +++ b/templates/closed.tmpl @@ -0,0 +1,51 @@ + + +
+