Newer
Older
/*******************************************************************************
* Copyright (c) 2025, Jan Koester jan.koester@gmx.net
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the <organization> nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
#include "user.h"
username=nullptr;
firstname=nullptr;
lastname=nullptr;
mail=nullptr;
pwhash=nullptr;
avatar=nullptr;
}
authdb::UserData::~UserData(){
delete Data;
}
void authdb::UserData::setFirstName(const char* src){
AuthDataRecord *target=firstname;
if(!target){
for(AuthDataRecord *curec=Data; curec; curec=curec->next()){
if(strcmp(curec->Data->uuid,uid)==0 &&
strcmp(curec->Data->fieldname,"firstname")==0){
while(target){
if(!target->_next){
target->_next=new AuthDataRecord;
target=target->next();
break;
}
memcpy(target->Data->uuid,uid,strlen(uid)+1);
snprintf(target->Data->fieldname,255,"%s","firstname");
target->Data->datasize=strlen(src);
target->Data->data= new char[target->Data->datasize];
memcpy(target->Data->data,src,target->Data->datasize);
firstname=target;
}
void authdb::UserData::setLastName(const char* src){
AuthDataRecord *target=lastname;
if(!target){
for(AuthDataRecord *curec=Data; curec; curec=curec->next()){
if(strcmp(curec->Data->uuid,uid)==0 &&
strcmp(curec->Data->fieldname,"lastname")==0){
while(target){
if(!target->_next){
target->_next=new AuthDataRecord;
target=target->next();
break;
}
memcpy(target->Data->uuid,uid,strlen(uid)+1);
snprintf(target->Data->fieldname,255,"%s","lastname");
target->Data->datasize=strlen(src);
target->Data->data= new char[target->Data->datasize];
memcpy(target->Data->data,src,target->Data->datasize);
lastname=target;
}
void authdb::UserData::setMail(const char* src){
AuthDataRecord *target=mail;
if(!target){
for(AuthDataRecord *curec=Data; curec; curec=curec->next()){
if(strcmp(curec->Data->uuid,uid)==0 &&
strcmp(curec->Data->fieldname,"mail")==0){
target=curec;
break;
}
}
if(!target){
while(target){
if(!target->_next){
target->_next=new AuthDataRecord;
target=target->next();
break;
}
memcpy(target->Data->uuid,uid,strlen(uid)+1);
snprintf(target->Data->fieldname,255,"%s","mail");
target->Data->datasize=strlen(src);
target->Data->data= new char[target->Data->datasize];
memcpy(target->Data->data,src,target->Data->datasize);
mail=target;
}
void authdb::UserData::setPwHash(const char* src){
AuthDataRecord *target=pwhash;
if(!target){
for(AuthDataRecord *curec=Data; curec; curec=curec->next()){
if(strcmp(curec->Data->uuid,uid)==0 &&
strcmp(curec->Data->fieldname,"password")==0){
target=curec;
break;
}
}
if(!target){
while(target){
if(!target->_next){
target->_next=new AuthDataRecord;
target=target->next();
break;
}
memcpy(target->Data->uuid,uid,strlen(uid)+1);
snprintf(target->Data->fieldname,255,"%s","password");
target->Data->datasize=strlen(src);
target->Data->data= new char[target->Data->datasize];
memcpy(target->Data->data,src,target->Data->datasize);
pwhash=target;
}
void authdb::UserData::setUserName(const char* src){
AuthDataRecord *target=username;
if(!target){
for(AuthDataRecord *curec=Data; curec; curec=curec->next()){
if(strcmp(curec->Data->uuid,uid)==0 &&
strcmp(curec->Data->fieldname,"username")==0){
target=curec;
break;
}
}
if(!target){
while(target){
if(!target->_next){
target->_next=new AuthDataRecord;
target=target->next();
break;
}
target->Data->type=1;
memcpy(target->Data->uuid,uid,strlen(uid)+1);
snprintf(target->Data->fieldname,255,"%s","username");
target->Data->datasize=strlen(src);
target->Data->data= new char[target->Data->datasize];
memcpy(target->Data->data,src,target->Data->datasize);
username=target;
}
void authdb::UserData::setAvatar(const std::vector<char>& src){
AuthDataRecord *target=avatar;
if(!target){
for(AuthDataRecord *curec=Data; curec; curec=curec->next()){
if(strcmp(curec->Data->uuid,uid)==0 &&
strcmp(curec->Data->fieldname,"lastname")==0){
target=curec;
break;
}
}
if(!target){
while(target){
if(!target->_next){
target->_next=new AuthDataRecord;
target=target->next();
break;
}
memcpy(target->Data->uuid,uid,strlen(uid)+1);
snprintf(target->Data->fieldname,255,"%s","lastname");
target->Data->datasize=src.size();
target->Data->data= new char[target->Data->datasize];
memcpy(target->Data->data,src.data(),target->Data->datasize);
size_t rd=sizeof(authdb::AuthHeader),end=backend.end();
backend.setPos(rd);
std::string userlist="UserList:\r\n";
while(rd<end){
backend.ReadAuthData(cur,rd);
rd=backend.getPos();
if(strcmp(cur->fieldname,"username")==0 &&
strncmp(cur->data,dat->username->Data->data,dat->username->Data->datasize) == 0){
delete[] cur->data;
delete cur;
throw authdb::AuthBackendError("Create User: Username Exists aborting!");
}else if(strcmp(cur->uuid,dat->username->Data->uuid)==0){
delete[] cur->data;
delete cur;
throw authdb::AuthBackendError("Create User: UUID already Exists aborting!");
}
}
for(AuthDataRecord *curec=dat->Data; curec; curec=curec->next()){
backend.WriteAuthData(curec->Data,backend.end());
}
void authdb::User::edit(AuthBackend &backend, uuid_t uid,UserData& dat, size_t pos){
void authdb::User::remove(AuthBackend &backend, uuid_t uid){
void authdb::User::info(AuthBackend &backend, uuid_t uid,UserData& dat, size_t pos)
void authdb::User::getAdditional(AuthBackend &backend, uuid_t uid, struct AuthData& data, size_t pos){
void authdb::User::editAdditional(AuthBackend &backend, uuid_t uid, struct AuthData& data, const char* fieldname){
void authdb::User::remAdditional(AuthBackend &backend, uuid_t uid, const char* fieldname){