From 5da197edc6b338c766191e1fc1ccd03b2149a997 Mon Sep 17 00:00:00 2001 From: Jan Koester Date: Fri, 31 Jan 2025 16:03:27 +0100 Subject: [PATCH] remove user now working --- src/authdb.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++- src/authdb.h | 3 ++- src/user.cpp | 10 +++++---- src/user.h | 6 ++--- 4 files changed, 69 insertions(+), 9 deletions(-) diff --git a/src/authdb.cpp b/src/authdb.cpp index 6442435..9d8f0fc 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