diff --git a/src/authdb.cpp b/src/authdb.cpp index 6442435b5337b8415a3460609fc12bac9c02b727..9d8f0fc937534e44cbcbe324b46226ab5aff16bc 100644 --- a/src/authdb.cpp +++ b/src/authdb.cpp @@ -85,7 +85,7 @@ namespace authdb { if(strcmp(cur->fieldname,"username")==0){ try { size_t upos=sizeof(authdb::AuthHeader); - user.info(_Backend,&uid,udat,upos); + user.info(_Backend,uid,udat,upos); userlist << ""; std::copy(cur->data,cur->data+cur->datasize,std::back_inserter(userlist)); userlist << "" @@ -200,6 +200,29 @@ namespace authdb { rep.setContentType("text/html"); rep.setContentLength(out.size()); rep.send(curreq,out.c_str(),out.size()); + + } + + void removeuser(libhttppp::HttpRequest *curreq, const int tid, ULONG_PTR args){ + char uid[255]; + sscanf(curreq->getRequestURL(),"/admin/removeuser/%s",uid); + + User user; + + uuid_t uuid; + + uuid_parse(uid,uuid); + + _Backend.lock(); + user.remove(_Backend,uuid); + _Backend.unlock(); + + libhttppp::HttpResponse rep; + rep.setState(HTTP307); + rep.setVersion(HTTPVERSION(1.1)); + rep.setHeaderData("Location")->push_back("/admin/listusers"); + rep.setContentType("text/html"); + rep.send(curreq,nullptr,0); } void getAvatar(libhttppp::HttpRequest *curreq, const int tid, ULONG_PTR args){ @@ -245,6 +268,8 @@ namespace authdb { listUsers(curreq,tid,args); }else if(strncmp(curreq->getRequestURL(),"/admin/createuser",17)==0){ createUser(curreq,tid,args); + }else if(strncmp(curreq->getRequestURL(),"/admin/removeuser",17)==0){ + removeuser(curreq,tid,args); }else if(strncmp(curreq->getRequestURL(),"/admin/getavatar/",17)==0){ getAvatar(curreq,tid,args); }else{ @@ -355,6 +380,38 @@ VALUEFOUND: return found; } + + void delRecord(AuthBackend &backend,const uuid_t uid){ + size_t end=backend.end(),rd=sizeof(AuthHeader); + + char cuid[255]; + + if(!uid) + throw AuthBackendError("user info uid required!"); + + uuid_unparse(uid,cuid); + + while(rddatasize; + if(strlen(cur->uuid) >0 && + strncmp(cuid,cur->uuid,strlen(cur->uuid)) == 0){ + // std::cout << cur->uuid << std::endl; + size_t dsize=cur->datasize; + memset(cur,0,sizeof(AuthData)); + cur->datasize=dsize; + backend.WriteAuthData(cur,wr); + const unsigned char zero=0; + for(size_t i=0; iData; curec; curec=curec->next()){ backend.WriteAuthData(curec->Data,wd); + backend.write((unsigned char*)curec->Data->data,curec->Data->datasize); wd=backend.end(); } } -void authdb::User::edit(AuthBackend &backend, uuid_t *uid,class UserData& dat, size_t &pos){ +void authdb::User::edit(AuthBackend &backend, uuid_t uid,class UserData& dat, size_t &pos){ } -void authdb::User::remove(AuthBackend &backend, uuid_t *uid){ +void authdb::User::remove(AuthBackend &backend,const uuid_t uid){ + delRecord(backend,uid); } -void authdb::User::info(AuthBackend &backend, uuid_t *uid,class UserData& dat, size_t &pos){ +void authdb::User::info(AuthBackend &backend, uuid_t uid,class UserData& dat, size_t &pos){ size_t end=backend.end(); char cuid[255]; @@ -392,7 +394,7 @@ void authdb::User::info(AuthBackend &backend, uuid_t *uid,class UserData& dat, s if(!uid) throw AuthBackendError("user info uid required!"); - uuid_unparse(*uid,cuid); + uuid_unparse(uid,cuid); while(pos