Require directory membership to view the directory
This commit is contained in:
@@ -28,6 +28,20 @@ type app struct {
|
||||
mapsKey string
|
||||
}
|
||||
|
||||
func MemberGate(cache *Cache, next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Path == "/auth/login" || r.URL.Path == "/auth/logout" || strings.HasPrefix(r.URL.Path, "/static/") {
|
||||
next.ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
if !cache.Model().Member(strings.ToLower(auth.Email(r))) {
|
||||
http.Error(w, "account is not in the directory", http.StatusForbidden)
|
||||
return
|
||||
}
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
|
||||
func Register(mux *http.ServeMux, cache *Cache, mapsKey string) {
|
||||
a := app{cache: cache, mapsKey: mapsKey}
|
||||
for _, section := range sections {
|
||||
|
||||
@@ -58,6 +58,15 @@ type Grade struct {
|
||||
NextBand string `json:"nextBand,omitempty"`
|
||||
}
|
||||
|
||||
func (m *Model) Member(email string) bool {
|
||||
for _, p := range m.People {
|
||||
if p.Email == email {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (m *Model) DisplayName(email string) string {
|
||||
for _, p := range m.People {
|
||||
if p.Email == email {
|
||||
|
||||
@@ -118,5 +118,5 @@ func main() {
|
||||
port = "8080"
|
||||
}
|
||||
log.Printf("listening on http://localhost:%s", port)
|
||||
log.Fatal(http.ListenAndServe(":"+port, noCache(authn.Wrap(mux))))
|
||||
log.Fatal(http.ListenAndServe(":"+port, noCache(authn.Wrap(directory.MemberGate(cache, mux)))))
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import (
|
||||
)
|
||||
|
||||
func main() {
|
||||
email := flag.String("email", "dev@heliosschool.org", "session email for the minted cookie")
|
||||
email := flag.String("email", "ian.gulliver@heliosschool.org", "session email for the minted cookie")
|
||||
flag.Parse()
|
||||
key := os.Getenv("SESSION_KEY")
|
||||
if key == "" {
|
||||
|
||||
Reference in New Issue
Block a user