Controller::Controller(string ConfFile) { auto start = chrono::steady_clock::now(); try { OnStart(ConfFile); DispatchWs(); } catch (int e) { XaLibError Error; string ErrorDesc=Error.GetError(e); SendHtmlHeaders(); cout<<"<WsData><error><number>"+FromIntToString(e)+"</number><description>"+ErrorDesc+"</description></error></WsData>"<<endl; } catch (...) { SendHtmlHeaders(); cout<<"Generic not handled Error"<<endl; } auto diff = chrono::steady_clock::now() - start; string duration=to_string(chrono::duration <double, std::milli> (diff).count()); LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Action Execution Time In Ms -> "+duration); //////VERIFICARE QUESTO CLOSE LOG.Close(); };
int XaLibModel::CreateExecute(const string& DbTable,vector <string>& FieldName,vector <string>& FieldValue) { FieldName.push_back("status"); FieldName.push_back("updated_by"); FieldValue.push_back("1"); FieldValue.push_back(FromIntToString(SESSION.XaUser_ID)); //CHECK FIELDS //vector <string> Fields={"status","old_id"}; //vector <string> Values={"1","0"}; /* for (auto i=0;i<LoadedFields.size();i++) { Fields.push_back(LoadedFields[i]["name"]); Values.push_back(LoadedFields[i]["value"]); }; */ int NextId=XaLibSql::Insert(DB_WRITE,DbTable,FieldName,FieldValue); if (NextId==0) { LOG.Write("ERR", __FILE__, __FUNCTION__,__LINE__,"ERROR-301 Inserted a new record into table -> "+DbTable+" with id ->"+to_string(NextId)); throw 301; } int UpdatedOrig=XaLibSql::Update(DB_WRITE,DbTable, {"orig_id"}, {FromIntToString(NextId)}, {"id"}, {FromIntToString(NextId)}); if (UpdatedOrig==0) { LOG.Write("ERR", __FILE__, __FUNCTION__,__LINE__,"ERROR-3011 Failed to initialize orig_id for a new record into table -> "+DbTable+" with id ->"+to_string(NextId)); throw 3011; } LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Inserted a new record into table -> "+DbTable+" with id ->"+to_string(NextId)); return NextId; };
int XaLibModel::UpdateExecute(const string& DbTable,vector <string>& FieldName,vector <string>& FieldValue, const int& Id) { FieldName.push_back("updated_by"); FieldValue.push_back(FromIntToString(SESSION.XaUser_ID)); BackupRecord(DbTable,Id); int Updated=XaLibSql::Update(DB_WRITE,DbTable, {FieldName}, {FieldValue}, {"id"}, {XaLibBase::FromIntToString(Id)}); if (Updated==1) { LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Updated a record into table -> "+DbTable+" with id ->"+to_string(Id)); return Id; } else { return 0; } };
void XaUserLogin::ReadByToken() { int XaUser_ID=XaLibToken::ValidateToken(SESSION.Token); string SqlQry="SELECT name,surname FROM XaUser WHERE status=1 AND id=\""+FromIntToString(XaUser_ID)+"\""; DbResMap DbRes=XaLibSql::FreeQuerySelect(DB_SESSION,SqlQry); if (DbRes.size()==1 ){ vector<string> ReturnedFields={"name","surname"}; RESPONSE.Content=ReadResponse(DbRes,ReturnedFields); } else { LOG.Write("ERR", __FILE__, __FUNCTION__,__LINE__,"ERROR-56: User ID Does Not Exist Or Is not Unique"); throw 56; } };
void XaLanguage::Create() { vector<string> FieldName; vector<string> FieldValue; CreatePrepare({"XaLanguage"},"/XaLanguage/fieldset/field",FieldName,FieldValue); int NextId=CreateExecute("XaLanguage",FieldName,FieldValue); if (NextId!=0) { unique_ptr<XaLibSql> LibSql (new XaLibSql()); string qry="SELECT XaLabel_ID FROM XaLabelTranslation, XaLabel WHERE XaLanguage_ID NOT IN ("+FromIntToString(NextId)+") AND XaLabel_id=XaLabel.id GROUP BY XaLabel_ID"; DbResMap DbRes=LibSql->FreeQuerySelect(DB_READ,qry); for(unsigned n=0; n<DbRes.size(); ++n){ vector<string> VectorFields; VectorFields.push_back("XaLabel_ID"); VectorFields.push_back("XaLanguage_ID"); vector<string> VectorValues; VectorValues.push_back(DbRes[n]["XaLabel_ID"]); VectorValues.push_back(FromIntToString(NextId)); LibSql->Insert(DB_WRITE,"XaLabelTranslation",VectorFields,VectorValues); VectorFields.clear(); VectorValues.clear(); } XaLanguageGen(); } RESPONSE.Content=CreateResponse(NextId); };
void XaUserLogin::ChangePassword() { string Password=HTTP.GetHttpParam("password"); string Password1=HTTP.GetHttpParam("password1"); string Password2=HTTP.GetHttpParam("password2"); CheckHttpField({Password,Password1,Password2},"required"); if (Password1==Password2) { string QryUser="******""+FromIntToString(SESSION.XaUser_ID)+"\" AND password=\""+XaLibCrypto::GetSha1(Password)+"\" AND status=1"; DbResMap DbRes=XaLibSql::FreeQuerySelect(DB_SESSION,QryUser); int n=DbRes.size(); if (n==1) { LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Old password is correct"); XaLibSql::Update(DB_SESSION,"XaUser",{"password"},{XaLibCrypto::GetSha1(Password1)},{"id"},{FromIntToString(SESSION.XaUser_ID)}); LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Password Changed"); RESPONSE.Content="OK"; } else { LOG.Write("ERR", __FILE__, __FUNCTION__,__LINE__,"ERROR-58: Old password is not correct"); throw 58; } } else { LOG.Write("ERR", __FILE__, __FUNCTION__,__LINE__,"ERROR-57: New Password and New Password Confirmation are not identical"); throw 57; } };
void XaLibLog::WriteDb (const string& LogMessageLevel,const char* ClassName,const char* MethodName,const string& LineNumber,const string& LogMessage){ vector<string> VectorFields ={"app_name","log_level","server_ip_address","ip_address","XaUser_ID","class_name","method_name","line_number","message"}; vector<string> VectorValues ={SETTINGS["AppName"],LogMessageLevel,SESSION.FrontEndIp,SESSION.ClientIp,FromIntToString(SESSION.XaUser_ID),ClassName,MethodName,LineNumber,LogMessage}; if (SETTINGS["LogLevel"]=="1"){ XaLibSql::Insert(DB_LOG,"XaSystemLog",VectorFields,VectorValues); } else if (SETTINGS["LogLevel"]=="2" && LogMessageLevel=="ERR"){ XaLibSql::Insert(DB_LOG,"XaSystemLog",VectorFields,VectorValues); } };
//LIVELLI DI LOG: 0=NIENTE 1=TUTTO 2=SOLO ERR void XaLibLog::Write(const string& LogMessageLevel,const char* ClassName,const char* MethodName,const int& LineNumber,const string& LogMessage){ stringstream LineNumberStringStream; LineNumberStringStream << LineNumber; string LineNumberString= LineNumberStringStream.str(); if (SETTINGS["LogLevel"]=="0"){ } else { if (SETTINGS["LogUseDb"]=="yes" && SETTINGS["DatabaseEnable"]=="yes") { WriteDb(LogMessageLevel,ClassName,MethodName,LineNumberString,LogMessage); } else { unique_ptr<XaLibTime> LibTimeLocal(new XaLibTime()); string LogTime=LibTimeLocal->GetDateTimeIsoComplete(); string MyLogString="["+SETTINGS["AppName"]+"]["+LogMessageLevel+"]["+SESSION.FrontEndIp+"]["+LogTime+"]["+SESSION.ClientIp+ "]["+FromIntToString(SESSION.XaUser_ID)+"]["+ClassName +"]["+LineNumberString+"]["+MethodName+"]["+LogMessage+"]"; WriteFile(MyLogString,LogMessageLevel); } } };
void XaUserLogin::ReadPhoto() { DbResMap DbRes=XaLibSql::Select(DB_SESSION,"XaUser",{"photo"},{"id"},{FromIntToString(SESSION.XaUser_ID)}); RESPONSE.Content="<photo>"+DbRes[0]["photo"]+"</photo>"; };
void XaUserLogin::AddPhoto() { string Photo=HTTP.GetHttpParam("photo"); XaLibSql::Update(DB_SESSION,"XaUser",{"photo"},{Photo},{"id"},{FromIntToString(SESSION.XaUser_ID)}); RESPONSE.Content="OK"; };
void XaMedia::CreateComplete(){ string Type=HTTP.GetHttpParam("type"); string Name=HTTP.GetHttpParam("name"); string XaDomainMediaCategoryId=""; if (Type.substr(0,5)=="image") { XaDomainMediaCategoryId="854"; } else { XaDomainMediaCategoryId="857"; } vector<string> FieldName; vector<string> FieldValue; vector<string> FieldNameMedia; vector<string> FieldValueMedia; vector<string> FieldNameData; vector<string> FieldValueData; // standard method CreatePrepare is run only to check field format and requirement CreatePrepare({"XaMediaComplete"},"/XaMediaComplete/fieldset/field",FieldName,FieldValue); //CreateExecute("XaMedia",FieldName,FieldValue); FieldNameMedia.push_back("XaTable"); FieldValueMedia.push_back(HTTP.GetHttpParam("XaTable")); FieldNameMedia.push_back("XaField_ID"); FieldValueMedia.push_back(HTTP.GetHttpParam("XaField_ID")); FieldNameMedia.push_back("XaDomainMediaCategory_ID"); //FieldValueMedia.push_back(HTTP.GetHttpParam("XaDomainMediaCategory_ID")); FieldValueMedia.push_back(XaDomainMediaCategoryId); FieldNameMedia.push_back("preferred"); FieldValueMedia.push_back("2"); FieldNameMedia.push_back("marked"); FieldValueMedia.push_back("2"); int MediaId=CreateExecute("XaMedia",FieldNameMedia,FieldValueMedia); //unique_ptr<XaLibChar> LibChar (new XaLibChar()); string XaMediaId=FromIntToString(MediaId); //string File=LibChar->B64Decode(HTTP.GetHttpParam("data","B64")); string File=HTTP.GetHttpParam("data","B64"); File=AddPlus(File); string Thumbnail=HTTP.GetHttpParam("thumbnail","B64"); if (Thumbnail=="NoHttpParam") { Thumbnail=""; } else { Thumbnail=AddPlus(Thumbnail); } int FileSize=File.size(); double KFileSize = round(FileSize/1024); string KSize = FromDoubleToString(KFileSize); string FileName = ComposeFileName(XaMediaId); FieldNameData.push_back("XaMedia_ID"); FieldValueData.push_back(XaMediaId); FieldNameData.push_back("file_name"); FieldValueData.push_back(FileName); FieldNameData.push_back("data"); FieldValueData.push_back(File); FieldNameData.push_back("thumbnail"); FieldValueData.push_back(Thumbnail); FieldNameData.push_back("ksize"); FieldValueData.push_back(KSize); FieldNameData.push_back("type"); FieldValueData.push_back(Type); FieldNameData.push_back("name"); FieldValueData.push_back(Name); int DataId=CreateExecute("XaMediaData",FieldNameData,FieldValueData); RESPONSE.Content="<create_media><id>"+FromIntToString(MediaId)+"</id></create_media><create_data><id>"+FromIntToString(DataId)+"</id></create_data>"; }
int XaLibModel::BackupRecord(const string& DbTable,const int& FieldId) { vector<string> Columns=XaLibSql::ColumnsList(DB_READ,DbTable); /* all other columns, included "updated", must be preserved */ vector<string> ExcludeToList= {"id","status"}; string List= {}; for(int i=0; i<Columns.size(); i++) { auto it = find (ExcludeToList.begin(), ExcludeToList.end(), Columns[i]); if (it != ExcludeToList.end()) { LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Field Found In The Exclusion List -> "+Columns[i]); } else { List.append(Columns[i]+","); LOG.Write("INF", __FILE__, __FUNCTION__,__LINE__,"Field List Appending -> "+Columns[i]); } }; //REMOVE LAST "," //string SqlCopiedColumns=List.substr(0, List.size()-1); //keep last comma since it is used to append SqlUpdatedColumns,SqlUpdatedValues later on string SqlCopiedColumns=List; string SqlUpdatedColumns="status"; string SqlUpdatedValues="'3'"; string SqlQry="INSERT INTO " + DbTable+" (" +SqlCopiedColumns + SqlUpdatedColumns +") SELECT "+SqlCopiedColumns + SqlUpdatedValues +" FROM "+DbTable+" WHERE id="+FromIntToString(FieldId); unsigned NextId=XaLibSql::FreeQueryInsert(DB_WRITE,SqlQry); /* NO UPDATES allowed on the record just inserted, since they would alter the "updated" column, which must keep its previous value */ };