diff --git a/main.go b/main.go index 7905807..a1e9f35 100644 --- a/main.go +++ b/main.go @@ -1,5 +1,50 @@ package main -func main() { +import ( + "log" + "net/http" + "time" +) +type SessionProvider interface { + Create(user User, expr time.Duration) (string, error) + Get(key string) (User, error) + Refresh(key string, user User, expr time.Duration) error +} + +type PageProvider interface { + Page(key string) (*Page, error) + Save(key string, page *Page) error +} + +type RootHandler struct { + Sessions SessionProvider + Pages PageProvider +} + +func (h *RootHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if r.URL.Path == "/admin" { + w.Write([]byte("admin route")) + return + } + page, err := h.Pages.Page(r.URL.Path) + if err == ErrPageNotFound { + w.WriteHeader(http.StatusNotFound) + w.Write([]byte("not found")) + return + } + w.Write(page.Contents) +} + +func main() { + handler := &RootHandler{ + Sessions: &Sessions{}, + Pages: &Index{}, + } + handler.Pages.Save("foo", &Page{ + Contents: []byte("foobar"), + }) + + err := http.ListenAndServe(":8080", handler) + log.Fatalf("server error: %v", err) } diff --git a/session.go b/session.go index 34073c1..afd0d6f 100644 --- a/session.go +++ b/session.go @@ -10,11 +10,6 @@ import ( var ErrInvalidSession = fmt.Errorf("session not found") -type User struct { - Name string - Roles []string -} - type Sess struct { User User expr time.Time diff --git a/users.go b/users.go index bb67bbc..6c24bdd 100644 --- a/users.go +++ b/users.go @@ -8,6 +8,11 @@ import ( var ErrUserNotFound = fmt.Errorf("user not found") +type User struct { + Name string + Roles []string +} + type storeUser struct { name string roles []string