Cleanup and autobuild file

This commit is contained in:
spsobole 2021-01-18 20:23:52 -07:00
parent 2f0e142c92
commit f583b02d88
7 changed files with 48 additions and 28 deletions

View File

@ -4,7 +4,6 @@ import (
"net/http" "net/http"
) )
type AuthData struct { type AuthData struct {
User string User string
Group string Group string
@ -20,7 +19,6 @@ type Authenticator interface {
DoAuth(w http.ResponseWriter, r *http.Request) (*AuthData, bool) DoAuth(w http.ResponseWriter, r *http.Request) (*AuthData, bool)
} }
//---------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------
func NewAuth(kind string) AuthManager { func NewAuth(kind string) AuthManager {
switch kind { switch kind {
@ -33,4 +31,4 @@ func NewAuth(kind string) AuthManager {
default: default:
return NewNoAuth() return NewNoAuth()
} }
} }

View File

@ -1,9 +1,9 @@
package auth package auth
import ( import (
"encoding/base64"
"net/http" "net/http"
"strings" "strings"
"encoding/base64"
) )
type BasicAuthInfo struct { type BasicAuthInfo struct {

27
build.yaml Normal file
View File

@ -0,0 +1,27 @@
#
# Build config for ThirdMartini go-builder
#
gobuild.version.required: 1.0
gobuild.work.dir: build
properties:
version: git rev-parse --short=12 HEAD
jobs:
#
# Format source code
format:
- name: Format source code
type: golang
source: git.thirdmartini.com/pub/snap/...
options:
flags:
#
# Run some tests
test:
- name: Running unit tests
type: golang
source: git.thirdmartini.com/pub/snap/...
options:
flags:

View File

@ -124,4 +124,3 @@ func (c *Context) QueryValueWithDefault(key string, def string) string {
} }
return val return val
} }

View File

@ -13,18 +13,16 @@ func handlerAuthenticated(c *snap.Context) {
c.Reply("snap/example/simple 1.0 (authenticated)") c.Reply("snap/example/simple 1.0 (authenticated)")
} }
func mustRunServer(auth auth.Authenticator) { func mustRunServer(auth auth.Authenticator) {
srv := snap.New("127.0.0.1:9000", "./", nil) srv := snap.New("127.0.0.1:9000", "./", nil)
srv.SetDebug(true) srv.SetDebug(true)
srv.HandleFunc("/", handler) srv.HandleFunc("/", handler)
srv.HandleFuncCustomAuth(auth,"/auth", "", handlerAuthenticated) srv.HandleFuncCustomAuth(auth, "/auth", "", handlerAuthenticated)
srv.Serve() srv.Serve()
} }
func main() { func main() {
auth := auth.NewAuth("basic") auth := auth.NewAuth("basic")
auth.AddUser("admin", "admin", "password") auth.AddUser("admin", "admin", "password")

View File

@ -55,7 +55,7 @@ func (s *Server) authenticated(auth auth.Authenticator, redirect string, handle
if redirect != "" { if redirect != "" {
http.Redirect(w, r, redirect, http.StatusSeeOther) http.Redirect(w, r, redirect, http.StatusSeeOther)
} else { } else {
http.Error(w, "Not authorized", http.StatusForbidden) http.Error(w, "Not authorized", http.StatusUnauthorized)
} }
} else { } else {
c := s.makeContext(rec, w, r) c := s.makeContext(rec, w, r)
@ -167,12 +167,12 @@ func (s *Server) renderError(w http.ResponseWriter, code int, msg string) {
w.Write([]byte(msg)) w.Write([]byte(msg))
} }
func (s *Server) HandleFuncAuthenticated(path,redirect string, f func(c *Context)) *mux.Route { func (s *Server) HandleFuncAuthenticated(path, redirect string, f func(c *Context)) *mux.Route {
if s.auth == nil { if s.auth == nil {
return nil return nil
} }
return s.router.HandleFunc(path, s.authenticated(s.auth,redirect, f)) return s.router.HandleFunc(path, s.authenticated(s.auth, redirect, f))
} }
func (s *Server) HandleFuncCustomAuth(auth auth.Authenticator, path, redirect string, f func(c *Context)) *mux.Route { func (s *Server) HandleFuncCustomAuth(auth auth.Authenticator, path, redirect string, f func(c *Context)) *mux.Route {
@ -180,7 +180,7 @@ func (s *Server) HandleFuncCustomAuth(auth auth.Authenticator, path, redirect st
log.Warn("Nil auth on", path) log.Warn("Nil auth on", path)
return nil return nil
} }
return s.router.HandleFunc(path, s.authenticated(auth,redirect, f)) return s.router.HandleFunc(path, s.authenticated(auth, redirect, f))
} }
func (s *Server) HandleFunc(path string, f func(c *Context)) *mux.Route { func (s *Server) HandleFunc(path string, f func(c *Context)) *mux.Route {
@ -248,9 +248,9 @@ func (s *Server) WithDebug(debugURL string) *Server {
} }
func (s *Server) Dump() { func (s *Server) Dump() {
fmt.Printf( " Path: %s\n", s.path) fmt.Printf(" Path: %s\n", s.path)
fmt.Printf( " Theme: %s\n", s.theme) fmt.Printf(" Theme: %s\n", s.theme)
fmt.Printf( " Templates: %s\n", s.templates) fmt.Printf(" Templates: %s\n", s.templates)
} }

View File

@ -11,7 +11,6 @@ import (
"git.thirdmartini.com/pub/snap/auth" "git.thirdmartini.com/pub/snap/auth"
) )
var rootExpected = []byte(` var rootExpected = []byte(`
<html lang="en"> <html lang="en">
<head> <head>
@ -38,7 +37,6 @@ User: admin
</html> </html>
`) `)
func handlerRoot(c *Context) { func handlerRoot(c *Context) {
c.RenderEx("index.html", nil) c.RenderEx("index.html", nil)
} }
@ -51,7 +49,7 @@ func handlerTest(c *Context) {
c.RenderEx("test.html", nil) c.RenderEx("test.html", nil)
} }
func doTestRequest(t *testing.T, req *http.Request) ([]byte, int, error){ func doTestRequest(t *testing.T, req *http.Request) ([]byte, int, error) {
resp, err := http.DefaultClient.Do(req) resp, err := http.DefaultClient.Do(req)
assert.Nil(t, err) assert.Nil(t, err)
assert.NotNil(t, resp) assert.NotNil(t, resp)
@ -70,7 +68,7 @@ func TestServer_BasicAuth(t *testing.T) {
s := New("", "/test", auth) s := New("", "/test", auth)
s.SetDebug(true) s.SetDebug(true)
s.SetTemplatePath("test/templates") s.SetTemplatePath("test/templates")
s.WithStaticFiles("/static", "test/static" ) s.WithStaticFiles("/static", "test/static")
s.WithTheme("skin/") s.WithTheme("skin/")
s.HandleFunc("/", handlerRoot) s.HandleFunc("/", handlerRoot)
s.HandleFuncAuthenticated("/login", "", handlerLogin) s.HandleFuncAuthenticated("/login", "", handlerLogin)
@ -89,26 +87,26 @@ func TestServer_BasicAuth(t *testing.T) {
assert.Equal(t, rootExpected, data) assert.Equal(t, rootExpected, data)
// Check GOOD password // Check GOOD password
req, err = http.NewRequest(http.MethodGet, ts.URL +"/login", nil) req, err = http.NewRequest(http.MethodGet, ts.URL+"/login", nil)
assert.Nil(t, err) assert.Nil(t, err)
req.SetBasicAuth("admin","test") req.SetBasicAuth("admin", "test")
data, code, err = doTestRequest(t, req) data, code, err = doTestRequest(t, req)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, http.StatusOK, code) assert.Equal(t, http.StatusOK, code)
assert.Equal(t, rootExpected, data) assert.Equal(t, rootExpected, data)
// Check BAD password // Check BAD password
req, err = http.NewRequest(http.MethodGet, ts.URL +"/login", nil) req, err = http.NewRequest(http.MethodGet, ts.URL+"/login", nil)
assert.Nil(t, err) assert.Nil(t, err)
req.SetBasicAuth("admin","badpass") req.SetBasicAuth("admin", "badpass")
data, code, err = doTestRequest(t, req) data, code, err = doTestRequest(t, req)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, http.StatusForbidden, code) assert.Equal(t, http.StatusUnauthorized, code)
// Check GOOD password and context in templates // Check GOOD password and context in templates
req, err = http.NewRequest(http.MethodGet, ts.URL +"/test", nil) req, err = http.NewRequest(http.MethodGet, ts.URL+"/test", nil)
assert.Nil(t, err) assert.Nil(t, err)
req.SetBasicAuth("admin","test") req.SetBasicAuth("admin", "test")
data, code, err = doTestRequest(t, req) data, code, err = doTestRequest(t, req)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, http.StatusOK, code) assert.Equal(t, http.StatusOK, code)
@ -116,7 +114,7 @@ func TestServer_BasicAuth(t *testing.T) {
// Test Static Content // Test Static Content
// Check GOOD password and context in templates // Check GOOD password and context in templates
req, err = http.NewRequest(http.MethodGet, ts.URL +"/static/skin/skin.html", nil) req, err = http.NewRequest(http.MethodGet, ts.URL+"/static/skin/skin.html", nil)
assert.Nil(t, err) assert.Nil(t, err)
data, code, err = doTestRequest(t, req) data, code, err = doTestRequest(t, req)
assert.Nil(t, err) assert.Nil(t, err)
@ -149,4 +147,4 @@ func TestServer_TokenAuth(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, http.StatusOK, code) assert.Equal(t, http.StatusOK, code)
assert.Equal(t, rootExpected, data) assert.Equal(t, rootExpected, data)
} }