add some trace points
[webgit] / src / login.c
1 /*
2     cehtehs git web frontend
3
4   Copyright (C)
5     2007, 2008,         Christian Thaeter <ct@pipapo.org>
6
7   This program is free software: you can redistribute it and/or modify
8   it under the terms of the GNU Affero General Public License as published by
9   the Free Software Foundation, either version 3 of the License, or
10   (at your option) any later version.
11
12   This program is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU Affero General Public License for more details.
16
17   You should have received a copy of the GNU Affero General Public License
18   along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "login.h"
22 #include "account.h"
23
24 #include <stdlib.h>
25 #include <stdint.h>
26
27 void
28 webgit_login_bakecookie (struct webgit_query* query)
29 {
30   TRACE (webgit);
31
32   if (query->user && query->name && query->email && query->ssign)
33     {
34       if (webgit_account_validate_signature (query))
35         {
36           query->account_validated = 1;
37           if (query->cookie_expire)
38             {
39               // if pending then activate
40               char * path = cwa_buffer_provide (strlen (query->accountdir) + sizeof ("/") + strlen (query->user));
41               char * path_pend = cwa_buffer_provide (strlen (query->accountdir) +
42                                                      sizeof ("/pending/") + strlen (query->user));
43
44               sprintf (path, "%s/%c/%s", query->accountdir, *query->user, query->user);
45               sprintf (path_pend, "%s/pending/%s", query->accountdir, query->user);
46
47               rename (path_pend, path);
48
49               //TODO: check path
50
51               size_t len = snprintf (NULL, 0, "user=%s; name=\"%s\"; email=%s; ssign=%s",
52                                      query->user, query->name, query->email, query->ssign);
53
54               free (query->login_cookie);
55               query->login_cookie = cwa_malloc (len+1);
56
57               snprintf (query->login_cookie, len+1, "user=%s; name=\"%s\"; email=%s; ssign=%s",
58                         query->user, query->name, query->email, query->ssign);
59
60             }
61           else
62             {
63               // logout
64               free (query->login_cookie);
65               query->login_cookie = cwa_strndup ("LOGOUT", SIZE_MAX);
66               free (query->ssign);
67               query->ssign = NULL;
68             }
69         }
70       else
71         {
72           die ("account spoofed");
73         }
74     }
75 }
76
77
78 /*
79 //      Local Variables:
80 //      mode: C
81 //      c-file-style: "gnu"
82 //      indent-tabs-mode: nil
83 //      End:
84 */