diff options
| author | jan <jan@ruken.pw> | 2015-12-19 14:43:29 (UTC) |
|---|---|---|
| committer | jan <jan@ruken.pw> | 2015-12-19 14:43:29 (UTC) |
| commit | 40773e67732187d5a4dad973cf517fffaaf98073 (patch) | |
| tree | 224d190b124fa23bd1d4c0dca47eb2843ba21aa9 | |
| parent | cf87102d4e2961cef8708d82ea641d105fbe77a5 (diff) | |
datenbankverbindung, überprüfung des kekses
| -rw-r--r-- | charakterin.go | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/charakterin.go b/charakterin.go index 15f2a6c..bb7323d 100644 --- a/charakterin.go +++ b/charakterin.go | |||
| @@ -1,8 +1,11 @@ | |||
| 1 | package charakterin | 1 | package charakterin |
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "database/sql" | ||
| 4 | "log" | 5 | "log" |
| 5 | "net/http" | 6 | "net/http" |
| 7 | |||
| 8 | _ "github.com/lib/pq" | ||
| 6 | ) | 9 | ) |
| 7 | 10 | ||
| 8 | // Renderer wird verwendet, um die Routen (bspw. Login-Route) zu rendern. Damit bleibt Charakterin selbst ohne Template. | 11 | // Renderer wird verwendet, um die Routen (bspw. Login-Route) zu rendern. Damit bleibt Charakterin selbst ohne Template. |
| @@ -15,13 +18,19 @@ type Renderer interface { | |||
| 15 | type Charakterin struct { | 18 | type Charakterin struct { |
| 16 | renderer Renderer | 19 | renderer Renderer |
| 17 | FallbackRoute string | 20 | FallbackRoute string |
| 21 | Database *sql.DB | ||
| 18 | } | 22 | } |
| 19 | 23 | ||
| 20 | // New erstellt eine neue Instanz von Charakterin. | 24 | // New erstellt eine neue Instanz von Charakterin. |
| 21 | func New() *Charakterin { | 25 | func New(db *sql.DB) *Charakterin { |
| 26 | if err := db.Ping(); err != nil { | ||
| 27 | log.Fatalln("no valid database connection supplied:", err) | ||
| 28 | return nil | ||
| 29 | } | ||
| 22 | return &Charakterin{ | 30 | return &Charakterin{ |
| 23 | nil, | 31 | nil, |
| 24 | "/", | 32 | "/", |
| 33 | db, | ||
| 25 | } | 34 | } |
| 26 | } | 35 | } |
| 27 | 36 | ||
| @@ -42,15 +51,35 @@ func (c *Charakterin) DisplayLogin(w http.ResponseWriter, r *http.Request) { | |||
| 42 | return | 51 | return |
| 43 | } | 52 | } |
| 44 | 53 | ||
| 54 | http.SetCookie(w, &http.Cookie{ | ||
| 55 | Name: "session", | ||
| 56 | Value: "benis", | ||
| 57 | }) | ||
| 58 | |||
| 45 | c.renderer.RenderLoginPage(w, make(map[string]interface{})) | 59 | c.renderer.RenderLoginPage(w, make(map[string]interface{})) |
| 46 | } | 60 | } |
| 47 | 61 | ||
| 48 | // Login versucht einen Charakter einzuloggen. | 62 | // Login versucht einen User einzuloggen. |
| 49 | func (c *Charakterin) Login(w http.ResponseWriter, r *http.Request) { | 63 | func (c *Charakterin) Login(w http.ResponseWriter, r *http.Request) { |
| 50 | 64 | ||
| 51 | } | 65 | } |
| 52 | 66 | ||
| 53 | // IsLoggedIn überprüft anhand eines Request, ob der Charakter eingeloggt ist. | 67 | // IsLoggedIn überprüft anhand eines Request, ob der User eingeloggt ist. |
| 54 | func (c *Charakterin) IsLoggedIn(r *http.Request) bool { | 68 | func (c *Charakterin) IsLoggedIn(r *http.Request) bool { |
| 69 | cookie, err := r.Cookie("session") | ||
| 70 | if err != nil { | ||
| 71 | log.Println("no session") | ||
| 72 | return false | ||
| 73 | } | ||
| 74 | |||
| 75 | rows, err := c.Database.Query(`SELECT * FROM login.sessions WHERE id = $1`, cookie.Value) | ||
| 76 | if err != nil { | ||
| 77 | log.Println(err) | ||
| 78 | return false | ||
| 79 | } | ||
| 80 | |||
| 81 | if rows.Next() { | ||
| 82 | return true | ||
| 83 | } | ||
| 55 | return false | 84 | return false |
| 56 | } | 85 | } |
