diff options
Diffstat (limited to 'charakterin.go')
-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 | } |