Browse Source

Auth module

Alex Myasoedov 6 years ago
parent
commit
2be7f11e57
2 changed files with 58 additions and 48 deletions
  1. 56 0
      auth/auth.go
  2. 2 48
      main.go

+ 56 - 0
auth/auth.go

@@ -0,0 +1,56 @@
+package auth
+
+import (
+	"encoding/base64"
+	"fmt"
+	"os"
+	"strconv"
+
+	log "github.com/Sirupsen/logrus"
+	"github.com/gin-gonic/gin"
+)
+
+func Header(c *gin.Context, key string) string {
+	if values, _ := c.Request.Header[key]; len(values) > 0 {
+		return values[0]
+	}
+	return ""
+}
+
+func BasicAuth() gin.HandlerFunc {
+	realm := "Authorization Required"
+	realm = "Basic realm=" + strconv.Quote(realm)
+	user := os.Getenv("USER")
+	password := os.Getenv("PASSWORD")
+	enabled := isEnabled(user, password)
+	if enabled {
+		log.Warn("Auth mode enabled")
+		log.Warn(fmt.Sprintf("Visit http://%s:%s@0.0.0.0:8080", user, password))
+	}
+	return func(c *gin.Context) {
+		header := Header(c, "Authorization")
+		if enabled && header != authorizationHeader(user, password) {
+			// Credentials doesn't match, we return 401 and abort handlers chain.
+			c.Header("WWW-Authenticate", realm)
+			c.AbortWithStatus(401)
+			return
+		}
+		c.Next()
+	}
+}
+
+func isEnabled(user, password string) bool {
+	switch {
+	case user == "":
+		return false
+	case password == "":
+		return false
+	default:
+		return true
+	}
+}
+
+func authorizationHeader(user, password string) string {
+	base := user + ":" + password
+	return "Basic " + base64.StdEncoding.EncodeToString([]byte(base))
+}

+ 2 - 48
main.go

@@ -1,68 +1,22 @@
 package main
 
 import (
-	"encoding/base64"
 	"errors"
 	"fmt"
 	"io/ioutil"
 	"os"
-	"strconv"
 	"strings"
 
 	log "github.com/Sirupsen/logrus"
 	haikunator "github.com/atrox/haikunatorgo"
 	"github.com/gin-contrib/sessions"
 	"github.com/gin-gonic/gin"
+	"github.com/msoedov/hacker-slides/auth"
 	"github.com/msoedov/hacker-slides/files"
 )
 
 const sessionHeader = "slide-session"
 
-func Header(c *gin.Context, key string) string {
-	if values, _ := c.Request.Header[key]; len(values) > 0 {
-		return values[0]
-	}
-	return ""
-}
-
-func BasicAuth() gin.HandlerFunc {
-	realm := "Authorization Required"
-	realm = "Basic realm=" + strconv.Quote(realm)
-	user := os.Getenv("USER")
-	password := os.Getenv("PASSWORD")
-	enabled := isEnabled(user, password)
-	if enabled {
-		log.Warn("Auth mode enabled")
-		log.Warn(fmt.Sprintf("Visit http://%s:%s@0.0.0.0:8080", user, password))
-	}
-	return func(c *gin.Context) {
-		header := Header(c, "Authorization")
-		if enabled && header != authorizationHeader(user, password) {
-			// Credentials doesn't match, we return 401 and abort handlers chain.
-			c.Header("WWW-Authenticate", realm)
-			c.AbortWithStatus(401)
-			return
-		}
-		c.Next()
-	}
-}
-
-func isEnabled(user, password string) bool {
-	switch {
-	case user == "":
-		return false
-	case password == "":
-		return false
-	default:
-		return true
-	}
-}
-
-func authorizationHeader(user, password string) string {
-	base := user + ":" + password
-	return "Basic " + base64.StdEncoding.EncodeToString([]byte(base))
-}
-
 func SlidePath(name string) string {
 	return fmt.Sprintf("slides/%s.md", name)
 }
@@ -73,7 +27,7 @@ func NewApp() *gin.Engine {
 
 	store := sessions.NewCookieStore([]byte("secret"))
 	r.Use(sessions.Sessions(sessionHeader, store))
-	r.Use(BasicAuth())
+	r.Use(auth.BasicAuth())
 
 	r.LoadHTMLGlob("templates/*.tmpl")
 	r.Static("/static", "./static")