Newer
Older
/*******************************************************************************
* 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 <iostream>
int main(int argc, char *argv[]){
cmdplus::CmdController &cmd=cmdplus::CmdController::getInstance();
if(!cmd.checkRequired()){
std::cerr << "Config Path required !" << std::endl;
cmd.printHelp();
return -1;
}
confplus::Config config(cmd.getCmdbyKey("config")->getValue());
authdb::AuthBackend backend(authdb::AuthBackendType::File,
config.getValue(config.getKey("/AUTHDB/ADMINDB/PATH"),0),
"admin.local"
);
if(backend.end()<=sizeof(authdb::AuthHeader)){
std::string username,password;
std::cerr << "Initial User not found !" << std::endl;
std::cout << "Please Enter Username: ";
std::cin >> username;
std::cout << "Please Enter Password: ";
std::cin >> password;
std::cout << "Creating User !";
authdb::AuthData user,pw;
uuid_t id;
uuid_generate(id);
uuid_unparse(id,user.uuid);
snprintf(user.fieldname,255,"%s","username");
pw.type=1;
snprintf(pw.fieldname,255,"%s","password");
user.datasize=username.length()+1;
user.data = new char[user.datasize];
snprintf(user.data,user.datasize,"%s",username.c_str());
pw.datasize=password.length()+1;
pw.data = new char[pw.datasize];
snprintf(pw.data,pw.datasize,"%s",password.c_str());
authdb::AuthData euser;
int rd=sizeof(authdb::AuthHeader);
while(rd<backend.end()){
rd=backend.getPos();
if(strcmp(euser.fieldname,"username") == 0 && strcmp(euser.data,user.data)==0 ){
delete[] euser.data;
throw authdb::AuthBackendError("Username already exits");
}
delete[] euser.data;
}
backend.WriteAuthData(user,backend.end());
backend.WriteAuthData(pw,backend.end());
}
/*
if(strcmp(argv[1],"user")==0 ){
if(strcmp(argv[2],"create")==0 ){
}else if(strcmp(argv[2],"edit")==0 ){
int rd=sizeof(authdb::AuthHeader);
if(strcmp(argv[4],"username")==0){
throw authdb::AuthBackendError("Username not editable");
}
authdb::AuthData euser;
char uid[255];
while(rd<backend.end()){
rd=backend.getPos();
if(strcmp(euser.fieldname,"username") == 0 && strcmp(euser.data,argv[3])==0 ){
memcpy(uid,euser.uuid,strlen(euser.uuid)+1);
authdb::AuthData newattr;
newattr.type=1;
memcpy(newattr.uuid,uid,strlen(uid)+1);
memcpy(newattr.fieldname,argv[4],strlen(argv[4])+1);
newattr.datasize=strlen(argv[4])+1;
newattr.data = new char[strlen(argv[5])+1];
snprintf(newattr.data,strlen(argv[5])+1,"%s",argv[5]);
authdb::AuthData user,attr;
int rd=sizeof(authdb::AuthHeader),rd2=rd;
std::cout << "Revesion :" << backend.getRevesion() << std::endl;
while(rd<backend.end()){
rd=backend.getPos();
if(strcmp(user.fieldname,"username") == 0){
std::cout << user.fieldname << ": " << user.data << std::endl;
std::cout << " id: " << user.uuid << std::endl;
while(rd2<backend.end()){
if(strcmp(attr.fieldname,"username") != 0 &&
strcmp(attr.uuid,user.uuid)==0){
std::cout << " " << attr.fieldname << ": " << attr.data << std::endl;
}
rd2=backend.getPos();
}
rd2=sizeof(authdb::AuthHeader);
}
delete[] user.data;
}
}catch(authdb::AuthBackendError &e){
std::cerr << e.what() << std::endl;
}