// // additional user modules putted into net/user/ (initial revision): // configure.c, a web based user settings/profile changer, called by net/http // // i'm unhappy with the way of authing.. first i thought this could be inheriated somehow to be a part of the user object, but thats schmarn. // but i think psyc auth would be a nice way here.. // #include #include #include #include create() { sTextPath(0, 0, "html"); } htget(prot, query, headers, qs) { htok3(prot, "text/html", "Cache-Control: no-cache\n"); w("_PAGES_user_header"); unless(auth(prot, query, headers, qs)) { w("_PAGES_user_footer"); write("PROB"); } } checkAuth(val, prot, query, headers, qs, user) { unless(val) { w("_PAGES_user_login_failed"); w("_PAGES_user_footer"); return; } switch(query["action"]) { case "settings": if(query["set"] == "1") settings(prot, query, headers, qs, user); else w("_PAGES_user_settings_body", ([ "_username" : query["username"], "_password" : query["password"], "_speakaction" : user->vQuery("speakaction") || "", "_commandcharacter" : user->vQuery("commandcharacter") || "" ]) ); break; case "profile": if(query["set"] == "1") profile(prot, query, headers, qs, user); else w("_PAGES_user_profile_body", ([ "_username" : query["username"], "_password" : query["password"], "_me" : user->vQuery("me") || "", "_publicpage" : user->vQuery("publicpage") || "", "_publictext" : user->vQuery("publictext") || "", "_publicname" : user->vQuery("publicname") || "", "_animalfave" : user->vQuery("animalfave") || "", "_popstarfave" : user->vQuery("popstarfave") || "", "_musicfave" : user->vQuery("musicfave") || "", "_privatetext" : user->vQuery("privatetext") || "", "_likestext" : user->vQuery("likestext") || "", "_dislikestext" : user->vQuery("dislikestext") || "", "_privatepage" : user->vQuery("privatepage") || "", "_email" : user->vQuery("email") || "", "_color" : user->vQuery("color") || "", "_language" : user->vQuery("language") || "", "_telephone" : user->vQuery("telephone") || "" ]) ); break; default: w("_PAGES_user_index", ([ "_username" : query["username"], "_password" : query["password"] ])); break; } w("_PAGES_user_footer"); } auth(prot, query, headers, qs) { if(! stringp(query["username"]) || ! stringp(query["password"])) { w("_PAGES_user_login_body"); return 0; } if(query["username"] == "" || query["password"] == "") { w("_PAGES_user_login_empty"); return 0; } object user = summon_person(query["username"]); if(! user || user->isNewbie()) { w("_PAGES_user_login_notregistered"); return 0; } user->checkPassword(query["password"], "plain", "", "", #'checkAuth, prot, query, headers, qs, user); return 1; } settings(prot, query, headers, qs, user) { foreach(string k, string v : query) { int ok = 0; switch(k) { case "password": case "speakaction": case "commandcharacter": ok = 1; break; } if(! ok) continue; if(v == "") { if(k == "speakaction") user->vDel(k); } else user->vSet(k, v); // password won't be set? humm. } w("_PAGES_user_settings_changed", ([ "_username" : query["username"], "_password" : query["password"] ]) ); } profile(prot, query, headers, qs, user) { foreach(string k, string v : query) { int ok = 0; switch(k) { case "me": case "publicpage": case "publictext": case "publicname": case "animalfave": case "popstarfave": case "musicfave": case "privatetext": case "likestext": case "dislikestext": case "privatepage": case "email": case "telephone": ok = 1; break; } if(! ok) continue; if(v == "") user->vDel(k); else user->vSet(k, v); } w("_PAGES_user_profile_changed", ([ "_username" : query["username"], "_password" : query["password"] ]) ); } w(mc, vars) { write(psyctext(T(mc, ""), vars)); }