Format code with go fmt

This commit is contained in:
Ivan R. 2023-04-06 10:37:48 +05:00
parent 16cd7aa635
commit c92fa6e9e0
No known key found for this signature in database
GPG key ID: 56C7BAAE859B302C
5 changed files with 134 additions and 134 deletions

View file

@ -11,16 +11,16 @@ import (
) )
type Admin struct { type Admin struct {
ID uint64 `gorm:"primaryKey"` ID uint64 `gorm:"primaryKey"`
Username string `gorm:"unique;notNull"` Username string `gorm:"unique;notNull"`
Bcrypt string `gorm:"notNull"` Bcrypt string `gorm:"notNull"`
AccessTokens []AccessToken AccessTokens []AccessToken
} }
type AccessToken struct { type AccessToken struct {
ID uint64 `gorm:"primaryKey"` ID uint64 `gorm:"primaryKey"`
Value string `gorm:"notNull"` Value string `gorm:"notNull"`
AdminID uint64 `gorm:"notNull"` AdminID uint64 `gorm:"notNull"`
ValidUntil time.Time `gorm:"NotNull"` ValidUntil time.Time `gorm:"NotNull"`
} }

View file

@ -1,32 +1,32 @@
package backend package backend
import ( import (
"gorm.io/gorm" "gorm.io/gorm"
) )
type Group struct { type Group struct {
ID uint64 `gorm:"primaryKey"` ID uint64 `gorm:"primaryKey"`
Name string `gorm:"unique,notNull"` Name string `gorm:"unique,notNull"`
Links []Link Links []Link
} }
func GetGroups(db *gorm.DB) ([]Group, error) { func GetGroups(db *gorm.DB) ([]Group, error) {
var groups []Group var groups []Group
result := db.Model(&Group{}).Preload("Links").Find(&groups) result := db.Model(&Group{}).Preload("Links").Find(&groups)
if result.Error != nil { if result.Error != nil {
return nil, result.Error return nil, result.Error
} }
return groups, nil return groups, nil
} }
func CreateGroup(db *gorm.DB, groupName string) (Group, error) { func CreateGroup(db *gorm.DB, groupName string) (Group, error) {
group := Group{ group := Group{
Name: groupName, Name: groupName,
} }
result := db.Create(&group) result := db.Create(&group)
if result.Error != nil { if result.Error != nil {
return Group{}, result.Error return Group{}, result.Error
} }
return group, nil return group, nil
} }

View file

@ -1,48 +1,48 @@
package backend package backend
import ( import (
"gorm.io/gorm" "gorm.io/gorm"
) )
type Link struct { type Link struct {
ID uint64 `gorm:"primaryKey"` ID uint64 `gorm:"primaryKey"`
Name string `gorm:"notNull"` Name string `gorm:"notNull"`
Href string `gorm:"notNull"` Href string `gorm:"notNull"`
GroupID uint64 `gorm:"notNull"` GroupID uint64 `gorm:"notNull"`
} }
func CreateLink(db *gorm.DB, linkName string, href string, groupID uint64) (Link, error) { func CreateLink(db *gorm.DB, linkName string, href string, groupID uint64) (Link, error) {
link := Link{ link := Link{
Name: linkName, Name: linkName,
Href: href, Href: href,
GroupID: groupID, GroupID: groupID,
} }
result := db.Create(&link) result := db.Create(&link)
if result.Error != nil { if result.Error != nil {
return Link{}, result.Error return Link{}, result.Error
} }
return link, nil return link, nil
} }
func UpdateLink(db *gorm.DB, id uint64, linkName string, href string) (Link, error) { func UpdateLink(db *gorm.DB, id uint64, linkName string, href string) (Link, error) {
var link Link var link Link
db.First(&link, id) db.First(&link, id)
link.Name = linkName link.Name = linkName
link.Href = href link.Href = href
result := db.Save(&link) result := db.Save(&link)
if result.Error != nil { if result.Error != nil {
return Link{}, result.Error return Link{}, result.Error
} }
return link, nil return link, nil
} }
func DeleteLink(db *gorm.DB, id uint64) error { func DeleteLink(db *gorm.DB, id uint64) error {
result := db.Delete(&Link{}, id) result := db.Delete(&Link{}, id)
if result.Error != nil { if result.Error != nil {
return result.Error return result.Error
} }
return nil return nil
} }

172
main.go
View file

@ -1,13 +1,13 @@
package main package main
import ( import (
"errors" "errors"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/ordinary-dev/phoenix/backend" "github.com/ordinary-dev/phoenix/backend"
"github.com/ordinary-dev/phoenix/views" "github.com/ordinary-dev/phoenix/views"
"log" "log"
"net/http" "net/http"
"strconv" "strconv"
) )
func main() { func main() {
@ -20,173 +20,173 @@ func main() {
r.LoadHTMLGlob("templates/*") r.LoadHTMLGlob("templates/*")
r.Static("/assets", "./assets") r.Static("/assets", "./assets")
// Main page // Main page
r.GET("/", func(c *gin.Context) { r.GET("/", func(c *gin.Context) {
views.RequireAuth(c, db) views.RequireAuth(c, db)
groups, err := backend.GetGroups(db) groups, err := backend.GetGroups(db)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
c.HTML(http.StatusOK, "index.html.tmpl", gin.H{ c.HTML(http.StatusOK, "index.html.tmpl", gin.H{
"groups": groups, "groups": groups,
}) })
}) })
// Settings // Settings
r.GET("/settings", func(c *gin.Context) { r.GET("/settings", func(c *gin.Context) {
views.RequireAuth(c, db) views.RequireAuth(c, db)
groups, err := backend.GetGroups(db) groups, err := backend.GetGroups(db)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
c.HTML(http.StatusOK, "settings.html.tmpl", gin.H{ c.HTML(http.StatusOK, "settings.html.tmpl", gin.H{
"groups": groups, "groups": groups,
}) })
}) })
// Create new user // Create new user
r.POST("/users", func(c *gin.Context) { r.POST("/users", func(c *gin.Context) {
// If at least 1 administator exists, require authorization // If at least 1 administator exists, require authorization
if backend.CountAdmins(db) > 0 { if backend.CountAdmins(db) > 0 {
tokenValue, err := c.Cookie("phoenix-token") tokenValue, err := c.Cookie("phoenix-token")
// Anonymous visitor // Anonymous visitor
if err != nil { if err != nil {
err = errors.New("At least 1 user exists, you have to sign in first") err = errors.New("At least 1 user exists, you have to sign in first")
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
err = backend.ValidateToken(db, tokenValue) err = backend.ValidateToken(db, tokenValue)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
} }
// User is authorized or no user exists. // User is authorized or no user exists.
// Try to create a user. // Try to create a user.
username := c.PostForm("username") username := c.PostForm("username")
password := c.PostForm("password") password := c.PostForm("password")
admin, err := backend.CreateAdmin(db, username, password) admin, err := backend.CreateAdmin(db, username, password)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
// Generate access token. // Generate access token.
token, err := backend.CreateAccessToken(db, admin.ID) token, err := backend.CreateAccessToken(db, admin.ID)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
backend.SetTokenCookie(c, token) backend.SetTokenCookie(c, token)
// Redirect to homepage. // Redirect to homepage.
c.Redirect(http.StatusFound, "/") c.Redirect(http.StatusFound, "/")
}) })
// Create new group // Create new group
r.POST("/groups", func(c *gin.Context) { r.POST("/groups", func(c *gin.Context) {
views.RequireAuth(c, db) views.RequireAuth(c, db)
groupName := c.PostForm("groupName") groupName := c.PostForm("groupName")
_, err := backend.CreateGroup(db, groupName) _, err := backend.CreateGroup(db, groupName)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
// Redirect to settings. // Redirect to settings.
c.Redirect(http.StatusFound, "/settings") c.Redirect(http.StatusFound, "/settings")
}) })
// Create new link // Create new link
r.POST("/links", func(c *gin.Context) { r.POST("/links", func(c *gin.Context) {
views.RequireAuth(c, db) views.RequireAuth(c, db)
linkName := c.PostForm("linkName") linkName := c.PostForm("linkName")
href := c.PostForm("href") href := c.PostForm("href")
groupID, err := strconv.ParseUint(c.PostForm("groupID"), 10, 32) groupID, err := strconv.ParseUint(c.PostForm("groupID"), 10, 32)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
_, err = backend.CreateLink(db, linkName, href, groupID) _, err = backend.CreateLink(db, linkName, href, groupID)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
// Redirect to settings. // Redirect to settings.
c.Redirect(http.StatusFound, "/settings") c.Redirect(http.StatusFound, "/settings")
}) })
// Update link // Update link
r.POST("/links/:id/put", func(c *gin.Context) { r.POST("/links/:id/put", func(c *gin.Context) {
views.RequireAuth(c, db) views.RequireAuth(c, db)
id, err := strconv.ParseUint(c.Param("id"), 10, 64) id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
linkName := c.PostForm("linkName") linkName := c.PostForm("linkName")
href := c.PostForm("href") href := c.PostForm("href")
_, err = backend.UpdateLink(db, id, linkName, href) _, err = backend.UpdateLink(db, id, linkName, href)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
// Redirect to settings. // Redirect to settings.
c.Redirect(http.StatusFound, "/settings") c.Redirect(http.StatusFound, "/settings")
}) })
// Delete link // Delete link
r.POST("/links/:id/delete", func(c *gin.Context) { r.POST("/links/:id/delete", func(c *gin.Context) {
views.RequireAuth(c, db) views.RequireAuth(c, db)
id, err := strconv.ParseUint(c.Param("id"), 10, 64) id, err := strconv.ParseUint(c.Param("id"), 10, 64)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
err = backend.DeleteLink(db, id) err = backend.DeleteLink(db, id)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
// Redirect to settings. // Redirect to settings.
c.Redirect(http.StatusFound, "/settings") c.Redirect(http.StatusFound, "/settings")
}) })
r.POST("/signin", func(c *gin.Context) { r.POST("/signin", func(c *gin.Context) {
// Check credentials. // Check credentials.
username := c.PostForm("username") username := c.PostForm("username")
password := c.PostForm("password") password := c.PostForm("password")
admin, err := backend.AuthorizeAdmin(db, username, password) admin, err := backend.AuthorizeAdmin(db, username, password)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
// Generate an access token. // Generate an access token.
token, err := backend.CreateAccessToken(db, admin.ID) token, err := backend.CreateAccessToken(db, admin.ID)
if err != nil { if err != nil {
views.ShowError(c, err) views.ShowError(c, err)
return return
} }
backend.SetTokenCookie(c, token) backend.SetTokenCookie(c, token)
// Redirect to homepage. // Redirect to homepage.
c.Redirect(http.StatusFound, "/") c.Redirect(http.StatusFound, "/")
}) })

View file

@ -41,12 +41,12 @@ func RequireAuth(c *gin.Context, db *gorm.DB) {
// Anonymous visitor // Anonymous visitor
if err != nil { if err != nil {
ShowLoginForm(c) ShowLoginForm(c)
return return
} }
err = backend.ValidateToken(db, tokenValue) err = backend.ValidateToken(db, tokenValue)
if err != nil { if err != nil {
ShowError(c, err) ShowError(c, err)
return return
} }
} }