summaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
Diffstat (limited to 'data.c')
-rw-r--r--data.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/data.c b/data.c
index 02e5234..f06e99c 100644
--- a/data.c
+++ b/data.c
@@ -154,12 +154,34 @@ int user_open(snac *snac, const char *uid)
154 memset(snac, '\0', sizeof(struct _snac)); 154 memset(snac, '\0', sizeof(struct _snac));
155 155
156 if (validate_uid(uid)) { 156 if (validate_uid(uid)) {
157 xs *cfg_file; 157 xs *cfg_file = NULL;
158 FILE *f; 158 FILE *f;
159 159
160 snac->uid = xs_str_new(uid); 160 xs *t = xs_fmt("%s/user/%s", srv_basedir, uid);
161 161
162 snac->basedir = xs_fmt("%s/user/%s", srv_basedir, uid); 162 if (mtime(t) == 0.0) {
163 /* user folder does not exist; try with a different case */
164 xs *lcuid = xs_tolower_i(xs_dup(uid));
165 xs *ulist = user_list();
166 xs_list *p = ulist;
167 xs_str *v;
168
169 while (xs_list_iter(&p, &v)) {
170 xs *v2 = xs_tolower_i(xs_dup(v));
171
172 if (strcmp(lcuid, v2) == 0) {
173 snac->uid = xs_dup(v);
174 break;
175 }
176 }
177 }
178 else
179 snac->uid = xs_str_new(uid);
180
181 if (snac->uid == NULL)
182 return ret;
183
184 snac->basedir = xs_fmt("%s/user/%s", srv_basedir, snac->uid);
163 185
164 cfg_file = xs_fmt("%s/user.json", snac->basedir); 186 cfg_file = xs_fmt("%s/user.json", snac->basedir);
165 187
@@ -176,7 +198,7 @@ int user_open(snac *snac, const char *uid)
176 fclose(f); 198 fclose(f);
177 199
178 if (snac->key != NULL) { 200 if (snac->key != NULL) {
179 snac->actor = xs_fmt("%s/%s", srv_baseurl, uid); 201 snac->actor = xs_fmt("%s/%s", srv_baseurl, snac->uid);
180 snac->md5 = xs_md5_hex(snac->actor, strlen(snac->actor)); 202 snac->md5 = xs_md5_hex(snac->actor, strlen(snac->actor));
181 203
182 /* everything is ok right now */ 204 /* everything is ok right now */