GDBMS 1.0
GDBMS_for_documentation/session_mode_commands.cpp
Go to the documentation of this file.
00001 #include "maininclude.h"
00002 #include "listi.h"
00003 #include "settings.h"
00004 #include "hash_table.h"
00005 #include "tr_twin_ht.h"
00006 #include "file_semaphore.h"
00007 #include "some_functions.h"
00008 #include "initial_mode_commands.h"
00009 #include "session_mode_commands.h"
00010 #include "transaction_mode_commands.h"
00011 #include "transaction_mode_commands_types.h"
00012 #include "transaction_mode_commands_nodes.h"
00013 #include "transaction_mode_commands_edges.h"
00014 #include "transaction_mode_commands_find.h"
00015 using namespace std;
00016 int session_mode_commands::CloseSession(int session_USCOREid, ns1__CloseSessionResponse& _param_11)
00017 {
00018     hash_table ses("sessions", "admin/sessions", "id;user_id;time_started", "id;user_id", "id");
00019   
00020   char *buf=ses.FindRecord("id", inttostr(session_USCOREid), "id");
00021   if(!buf){
00022     //nyama takava sesiya
00023     _param_11.retvalue=1;
00024     
00025     return 0;
00026   
00027   }
00028   
00029   file_semaphore ssem("admin/sessions/ssem");
00030   ssem.getResource();
00031   ses.DeleteRecord("id", buf);  
00032   ssem.freeResource();
00033   delete buf;
00034   _param_11.retvalue=0;
00035   return 0;
00036   
00037 }
00038 int session_mode_commands::CreateGraph(int session_USCOREid, std::string gr_USCOREname, std::string description, std::string uname, ns1__CreateGraphResponse& _param_8)
00039 {
00040     hash_table ses("sessions", "admin/sessions", "id;user_id;time_started", "id;user_id", "id");
00041   hash_table conn("users", "admin/users", 4, "id;name;pass;gr_id", "id;name;gr_id", "id");
00042   char *buf=ses.FindRecord("id", inttostr(session_USCOREid), "user_id");
00043   if(!buf){
00044     //nyama takava sesiya
00045     _param_8.retvalue=3;
00046     
00047     return 0;
00048   
00049   }
00050   
00051   std::string usid=buf;
00052   if(!settings::is_admin(strtoint(buf))){
00053     //ne e administrator i nqma pravo da pravi tova
00054     _param_8.retvalue=1;
00055     delete buf;
00056     return 0;
00057   
00058   }
00059   delete buf;
00060   
00061   hash_table grp("graphs", "admin/graphs", "id;name;description;creator_id;t_created", "id;name", "id");
00062   buf=grp.FindRecord("name", gr_USCOREname.c_str(), "id");
00063   if(buf){
00064     //ve4e ima graf s tova ime
00065       _param_8.retvalue=3;
00066       delete buf;
00067       return 0;
00068       
00069   }
00070   file_semaphore sem("admin/graphs/ssem");
00071   char *buf2=conn.FindRecord("name", uname.c_str(), "id");
00072   if(!buf2){
00073       //nqma takyv potrebitel, za kojto da se syzdade grafa
00074       _param_8.retvalue=3;
00075       delete buf2;
00076       return 0;
00077   }
00078   sem.getResource();
00079   int br=grp.getMAXID()+1;
00080   buf=inttostr(br);
00081   std::string aaa;
00082   aaa=buf;
00083   aaa+=";";
00084   aaa+=gr_USCOREname;
00085   aaa+=";";
00086   aaa+=description;
00087   aaa+=";";
00088   aaa+=buf2; 
00089   aaa+=";";
00090   aaa+=current_moment();
00091   grp.AddRecord("id;name;description;creator_id;t_created", aaa.c_str());  
00092   sem.freeResource();
00093   std::string foname;
00094   foname=strcat("admin/", buf);
00095   foname+="/gr_main";
00096   //mkdir(foname.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
00097   hash_table grp1("gr_main", foname.c_str(), "id;node_maxid;edge_maxid;rights_word", "id;node_maxid", "id");
00098   string gr_types_dir;
00099   gr_types_dir=strcat("admin/", buf);
00100   gr_types_dir+="/gr_types";
00101   hash_table grt("gr_types", gr_types_dir.c_str(), "id;name;parsestr;composite;array;asize;aid;internal", "id;name", "id");
00102   string edgesdir;
00103   edgesdir=strcat("admin/", buf);
00104   edgesdir+="/edges";
00105   hash_table edg("edges", edgesdir.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id");
00106   string nodesdir;
00107   nodesdir==strcat("admin/", buf);
00108   nodesdir+="/nodes";
00109   hash_table nod("nodes", nodesdir.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id");
00110   _param_8.retvalue=0;
00111   delete buf2;
00112   return 0;
00113 }
00114 int session_mode_commands::CreateUser(int session_USCOREid, std::string uname, std::string gr_USCOREname, std::string passwd, ns1__CreateUserResponse& _param_6)
00115 {
00116   hash_table ses("sessions", "admin/sessions", "id;user_id;time_started", "id;user_id", "id");
00117   hash_table conn("users", "admin/users", 4, "id;name;pass;gr_id", "id;name;gr_id", "id");
00118   char *buf=ses.FindRecord("id", inttostr(session_USCOREid), "user_id");
00119   if(!buf){
00120     //nyama takava sesiya
00121     _param_6.retvalue=3;
00122     
00123     return 0;
00124   
00125   }
00126   if(!settings::is_admin(strtoint(buf))){
00127     //ne e administrator i nqma pravo da pravi tova
00128     _param_6.retvalue=1;
00129     delete buf;
00130     return 0;
00131   
00132   }
00133   delete buf;
00134   //proverka, dali izob6to ima takava grupa
00135   
00136   hash_table gr("usergroups", "admin/usergroups" "id;name;admin", "id;name", "id");
00137   if(!(buf=gr.FindRecord("name", gr_USCOREname.c_str(), "id"))){
00138     //nqma takava grupa i ne moje da se syzdade user kym tazi grupa
00139     _param_6.retvalue=3;
00140    
00141     
00142     return 0;
00143   
00144   
00145   }
00146   std::string gr_id;
00147   
00148   gr_id=buf;
00149   delete buf;
00150   //proverka dali ima takyv user
00151   if(buf=conn.FindRecord("name", uname.c_str(), "id")){
00152     //ima takyv user i ne moje da syzdade drug takyv
00153     _param_6.retvalue=3;
00154     delete buf;
00155     return 0;
00156   }
00157   //nqma takyv user i moje da se syzdade
00158   std::string buf1;
00159   file_semaphore sem("admin/users/ssem");
00160   sem.getResource();
00161   int br=conn.getMAXID()+1;
00162   buf1=inttostr(br);
00163   buf1+=";";
00164   buf1+=uname;
00165   buf1+=";";
00166   buf1+=passwd;
00167   buf1+=";";
00168   buf1+=gr_id;
00169   conn.AddRecord("id;name;pass;gr_id", buf1.c_str());  
00170   sem.freeResource();
00171   _param_6.retvalue=0;
00172   return 0;
00173 }
00174 int session_mode_commands::CreateUserGroup(int session_USCOREid, std::string group_USCOREname, ns1__CreateUserGroupResponse& _param_3)
00175 {
00176   hash_table ses("sessions", "admin/sessions", "id;user_id;time_started", "id;user_id", "id");
00177 hash_table conn("users", "admin/users", 4, "id;name;pass;gr_id", "id;name;gr_id", "id");
00178 char *buf=ses.FindRecord("id", inttostr(session_USCOREid), "user_id");
00179 if(!buf){
00180   //nyama takava sesiya
00181   _param_3.retvalue=3;
00182   _param_3.u_USCOREgroup_USCOREid=0;
00183   return 0;
00184   
00185 }
00186 if(!settings::is_admin(strtoint(buf))){
00187   //ne e administrator i nqma pravo da pravi tova
00188   _param_3.retvalue=2;
00189   _param_3.u_USCOREgroup_USCOREid=0;
00190   delete buf;
00191   return 0;
00192   
00193 }
00194 delete buf;
00195 //administrator e i moje da napravi grupa
00196 hash_table gr("usergroups", "admin/usergroups" "id;name;admin", "id;name", "id");
00197 if(buf=gr.FindRecord("name", group_USCOREname.c_str(), "id")){
00198   //ve4e ima takava grupa i ne moje da se syzdade nova
00199   _param_3.retvalue=1;
00200   _param_3.u_USCOREgroup_USCOREid=0;
00201   delete buf;
00202   return 0;
00203   
00204   
00205 }
00206 //moje da se dobavi grupa
00207 file_semaphore sem("admin/usergroups/ssem");
00208 sem.getResource();
00209 
00210 int br=gr.getMAXID()+1;
00211 char buf1[50];
00212 std::string b;
00213 b+=inttostr(br);
00214 b+=";";
00215 b+=group_USCOREname;
00216 b+=";";
00217 b+="false";
00218 gr.AddRecord("id;name;admin", b.c_str());
00219 sem.freeResource();
00220 _param_3.retvalue=0;
00221 _param_3.u_USCOREgroup_USCOREid=br;
00222 return 0;
00223 
00224 }
00225 int session_mode_commands::DeleteGraph(int session_USCOREid, std::string gr_USCOREname, ns1__DeleteGraphResponse& _param_9)
00226 {
00227     hash_table ses("sessions", "admin/sessions", "id;user_id;time_started", "id;user_id", "id");
00228   hash_table conn("users", "admin/users", 4, "id;name;pass;gr_id", "id;name;gr_id", "id");
00229   char *buf=ses.FindRecord("id", inttostr(session_USCOREid), "user_id");
00230   if(!buf){
00231     //nyama takava sesiya
00232     _param_9.retvalue=3;
00233     
00234     return 0;
00235   
00236   }
00237   
00238   std::string usid=buf;
00239   if(!settings::is_admin(strtoint(buf))){
00240     //ne e administrator i nqma pravo da pravi tova
00241     _param_9.retvalue=1;
00242     delete buf;
00243     return 0;
00244   
00245   }
00246   delete buf;
00247   
00248   hash_table grp("graphs", "admin/graphs", "id;name;description;creator_id;t_created", "id;name", "id");
00249   buf=grp.FindRecord("name", gr_USCOREname.c_str(), "id");
00250   if(!buf){
00251     //nyama takyv graf
00252     _param_9.retvalue=3;
00253     
00254     return 0;
00255     
00256   }
00257   char *buf1;
00258   hash_table trn("transactions", "admin/transactions", "id;user_id;graph_id;time_started", "id;user_id;graph_id", "id");
00259   buf1=trn.FindRecord("graph_id", buf, "id");
00260   if(buf1){
00261     //ima aktivna tranzakciya na grafa i ne moje da se iztrie, dokato ne se priklu4i
00262     _param_9.retvalue=3;
00263     delete buf1;
00264     delete buf;
00265     return 0;
00266     
00267   }
00268   //moje da se iztrie grafa
00269   
00270   //iztrivane na grafa ot glavnata tablica
00271   
00272   file_semaphore ssem("admin/graphs/ssem");
00273   ssem.getResource();
00274   grp.DeleteRecord("id", buf);  
00275   ssem.freeResource();
00276   //iztrivane na papkata na grafa
00277   std::string fullfoldername;
00278   fullfoldername=MAINFOLDER;
00279   fullfoldername+="/admin/";
00280   fullfoldername+=buf;
00281   string command;
00282   command="rm -r ";
00283   command += fullfoldername;
00284   
00285   system(command.c_str());
00286   _param_9.retvalue=0;
00287   
00288   delete buf;
00289   return 0;
00290   
00291   
00292 }
00293 int session_mode_commands::DeleteUser(int session_USCOREid, std::string uname, ns1__DeleteUserResponse& _param_7)
00294 {
00295   hash_table ses("sessions", "admin/sessions", "id;user_id;time_started", "id;user_id", "id");
00296   hash_table conn("users", "admin/users", 4, "id;name;pass;gr_id", "id;name;gr_id", "id");
00297   char *buf=ses.FindRecord("id", inttostr(session_USCOREid), "user_id");
00298   if(!buf){
00299     //nyama takava sesiya
00300     _param_7.retvalue=3;
00301     
00302     return 0;
00303   
00304   }
00305   if(!settings::is_admin(strtoint(buf))){
00306     //ne e administrator i nqma pravo da pravi tova
00307     _param_7.retvalue=1;
00308     delete buf;
00309     return 0;
00310   
00311   }
00312   delete buf;
00313   //proverka dali ima takyv user
00314   if(!(buf=conn.FindRecord("name", uname.c_str(), "id"))){
00315     //nqma takyv user i ne moje da se iztrie
00316     _param_7.retvalue=3;
00317    
00318     return 0;
00319   }
00320   std::string uid_tobedeleted;
00321   uid_tobedeleted=buf;
00322   delete buf;
00323   file_semaphore sem("admin/sessions/ssem");
00324   file_semaphore sem1("admin/users/ssem");
00325   sem1.getResource();
00326   sem.getResource();
00327   if(buf=ses.FindRecord("user_id", uid_tobedeleted.c_str(), "id")){
00328     //ima nepriklu4ila sesiya
00329     sem.freeResource();
00330     sem1.freeResource();
00331     _param_7.retvalue=2;
00332     delete buf;
00333     
00334     return 0;
00335     
00336     
00337   }
00338   //moje da se iztrie
00339   
00340   
00341   conn.DeleteRecord("id", uid_tobedeleted.c_str());
00342   
00343   sem.freeResource();
00344   sem1.freeResource();
00345   _param_7.retvalue=0;
00346   return 0;
00347   
00348   
00349 }
00350 int session_mode_commands::DeleteUserGroup(int session_USCOREid, std::string group_USCOREname, ns1__DeleteUserGroupResponse& _param_4)
00351 {
00352    hash_table ses("sessions", "admin/sessions", "id;user_id;time_started", "id;user_id", "id");
00353   hash_table conn("users", "admin/users", 4, "id;name;pass;gr_id", "id;name;gr_id", "id");
00354   char *buf=ses.FindRecord("id", inttostr(session_USCOREid), "user_id");
00355   if(!buf){
00356     //nyama takava sesiya
00357     _param_4.retvalue=3;
00358     
00359     return 0;
00360   
00361   }
00362   if(!settings::is_admin(strtoint(buf))){
00363     //ne e administrator i nqma pravo da pravi tova
00364     _param_4.retvalue=1;
00365     delete buf;
00366     return 0;
00367   
00368   }
00369   delete buf;
00370   //moje da se iztrie grupa
00371   hash_table gr("usergroups", "admin/usergroups" "id;name;admin", "id;name", "id");
00372   if(!(buf=gr.FindRecord("name", group_USCOREname.c_str(), "id"))){
00373     //nqma takava grupa i ne moje da se iztrie
00374     _param_4.retvalue=3;
00375    
00376     
00377     return 0;
00378   
00379   
00380   }
00381   //ima takava grupa
00382   std::string buf1;
00383   buf1=buf;
00384   delete buf;
00385   buf=conn.FindRecord("gr_id", buf1.c_str(), "id");
00386   
00387   if(buf){
00388     //ima pone 1 takyf potrebitel, kojto e ot grupata i ne moje da se iztrie
00389     _param_4.retvalue=2;
00390     delete buf;
00391     return 0;
00392   }
00393   //moje da se iztrie
00394   file_semaphore sem("admin/usergroups/ssem");
00395   
00396   sem.getResource();
00397   
00398   gr.DeleteRecord("id", buf1.c_str());
00399   
00400   sem.freeResource();
00401   _param_4.retvalue=0;
00402   return 0;
00403   
00404   
00405   
00406 }
00407 int session_mode_commands::GetTransactionId(int session_USCOREid, std::string graph_USCOREname, ns1__GetTransactionIdResponse& _param_12)
00408 {
00409   hash_table ses("sessions", "admin/sessions", "id;user_id;time_started", "id;user_id", "id");
00410   hash_table conn("users", "admin/users", 4, "id;name;pass;gr_id", "id;name;gr_id", "id");
00411   char *buf=ses.FindRecord("id", inttostr(session_USCOREid), "user_id");
00412   if(!buf){
00413     //nyama takava sesiya
00414     _param_12.retvalue=3;
00415     _param_12.transaction_USCOREid=0;
00416     
00417     return 0;
00418   
00419   }
00420   hash_table trn("transactions", "admin/transactions", "id;user_id;graph_id;time_started", "id;user_id;graph_id", "id");
00421   char *buf2=0;
00422   buf2=trn.FindRecord("user_id", buf, "id");
00423   if(buf2){
00424     //ve4e ima tranzakciya na tozi user
00425     _param_12.retvalue=3;
00426     _param_12.transaction_USCOREid=strtoint(buf2);
00427     delete buf2;
00428     delete buf;
00429     return 0;
00430   }
00431   hash_table grp("graphs", "admin/graphs", "id;name;description;creator_id;t_created", "id;name", "id");
00432   char *buf4=grp.FindRecord("name", graph_USCOREname.c_str(), "id");
00433   if(!buf4)
00434   {
00435     //nqma takyv graf s tova ime
00436      _param_12.retvalue=3;
00437      _param_12.transaction_USCOREid=0;
00438      delete buf;
00439      return 0;
00440     
00441   }
00442   
00443   file_semaphore trsem("admin/transactions/ssem");
00444   trsem.getResource();
00445   string vals;
00446   int trid;
00447   trid=trn.getMAXID();
00448   char *buf3=0;
00449   buf3=inttostr(trid);
00450   vals+=buf3;
00451   vals+=";";
00452   vals+=buf;
00453   vals+=";";
00454   vals+=buf4;
00455   vals+=";";
00456   vals+=current_moment();
00457   trn.AddRecord("id;user_id;graph_id;time_started", vals.c_str());
00458   
00459   
00460   
00461   
00462   
00463   trsem.freeResource();
00464   string trfolder;
00465   
00466   trfolder+="admin/";
00467   trfolder+=buf4;
00468   trfolder+="/";
00469   trfolder+=buf3;
00470   string cmd;
00471   cmd="mkdir ";
00472   cmd+=MAINFOLDER;
00473   cmd+=trfolder;
00474   //system(cmd.c_str());
00475   string edgfolder;
00476   edgfolder+=trfolder;
00477   edgfolder+="/edges";
00478   cmd="mkdir ";
00479   cmd+=MAINFOLDER;
00480   cmd+=edgfolder;
00481   //system(cmd.c_str());
00482   string nodefolder;
00483   nodefolder=trfolder;
00484   nodefolder+="/nodes";
00485   cmd="mkdir ";
00486   cmd+=MAINFOLDER;
00487   cmd+=nodefolder;
00488   //system(cmd.c_str());
00489   
00490   string grfolder;
00491   grfolder+="admin/";
00492   grfolder+=buf4;
00493   string realedges_folder;
00494   realedges_folder+=grfolder;
00495   realedges_folder+="/edges";
00496   
00497   string realnodes_folder;
00498   realnodes_folder+=grfolder;
00499   realnodes_folder+="/nodes";
00500   
00501   
00502   hash_table real_edges("edges", realedges_folder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id");
00503   hash_table real_nodes("nodes", realnodes_folder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id");
00504   
00505   tr_twin_ht edgtwin("edges", edgfolder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id", strtoint(buf3), edgfolder.c_str(), &real_edges);
00506   tr_twin_ht nodtwin("nodes", nodefolder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id", strtoint(buf3), nodefolder.c_str(), &real_nodes);
00507   
00508   edgtwin.begin_transaction();
00509   nodtwin.begin_transaction();
00510   
00511   _param_12.retvalue=0;
00512   _param_12.transaction_USCOREid=strtoint(buf3);
00513   
00514   if(buf3)
00515     delete buf3;
00516   if(buf)
00517     delete buf;
00518   return 0;
00519   
00520 }
00521 int session_mode_commands::GrantRightsToGraph(int session_USCOREid, std::string gr_USCOREname, int rights_USCOREword, ns1__GrantRightsToGraphResponse& _param_10)
00522 {
00523     hash_table ses("sessions", "admin/sessions", "id;user_id;time_started", "id;user_id", "id");
00524   hash_table conn("users", "admin/users", 4, "id;name;pass;gr_id", "id;name;gr_id", "id");
00525   char *buf=ses.FindRecord("id", inttostr(session_USCOREid), "user_id");
00526   if(!buf){
00527     //nyama takava sesiya
00528     _param_10.retvalue=3;
00529     
00530     return 0;
00531   
00532   }
00533   
00534   std::string usid=buf;
00535   if(!settings::is_admin(strtoint(buf))){
00536     //ne e administrator i nqma pravo da pravi tova
00537     _param_10.retvalue=1;
00538     
00539     delete buf;
00540     return 0;
00541   
00542   }
00543   delete buf;
00544   
00545   hash_table grp("graphs", "admin/graphs", "id;name;description;creator_id;t_created", "id;name", "id");
00546   buf=grp.FindRecord("name", gr_USCOREname.c_str(), "id");
00547   if(!buf){
00548     //nyama takyv graf
00549     _param_10.retvalue=3;
00550     
00551     return 0;
00552     
00553   }
00554   //moje da se dadat prava
00555   file_semaphore ssem("admin/graphs/ssem");
00556   ssem.getResource();
00557   string folname2;
00558   folname2+="admin/";
00559   folname2+=buf;
00560   hash_table grp1("gr_main", folname2.c_str(), "id;node_maxid;edge_maxid;rights_word", "id;node_maxid", "id");
00561   string updv;
00562   updv=inttostr(rights_USCOREword);
00563   
00564   grp1.UpdateRecord("id", "1", "rights_word", updv.c_str());
00565   
00566   
00567   ssem.freeResource();
00568   _param_10.retvalue=0;
00569   
00570   delete buf;
00571   return 0;
00572   
00573   
00574   
00575 }
00576 int session_mode_commands::GrantRightsToGroup(int session_USCOREid, std::string group_USCOREname, int rights, ns1__GrantRightsToGroupResponse& _param_5)
00577 {
00578     hash_table ses("sessions", "admin/sessions", "id;user_id;time_started", "id;user_id", "id");
00579   hash_table conn("users", "admin/users", 4, "id;name;pass;gr_id", "id;name;gr_id", "id");
00580   char *buf=ses.FindRecord("id", inttostr(session_USCOREid), "user_id");
00581   if(!buf){
00582     //nyama takava sesiya
00583     _param_5.retvalue=3;
00584     
00585     return 0;
00586   
00587   }
00588   if(!settings::is_admin(strtoint(buf))){
00589     //ne e administrator i nqma pravo da pravi tova
00590     _param_5.retvalue=1;
00591     delete buf;
00592     return 0;
00593   
00594   }
00595   delete buf;
00596   //proverka, dali izob6to ima takava grupa
00597   hash_table gr("usergroups", "admin/usergroups" "id;name;admin", "id;name", "id");
00598   if(!(buf=gr.FindRecord("name", group_USCOREname.c_str(), "id"))){
00599     //nqma takava grupa i ne moje da se napravi administratorska
00600     _param_5.retvalue=3;
00601    
00602     
00603     return 0;
00604   
00605   
00606   }
00607   //ima takava grupa
00608   file_semaphore sem("admin/usergroups/ssem");
00609   std::string buf1;
00610   if(rights){
00611     buf1=inttostr(1);
00612   }else{
00613     buf1=inttostr(0);
00614     
00615   }
00616   sem.getResource();
00617   gr.UpdateRecord("id", buf, "admin", buf1.c_str());
00618   
00619   sem.freeResource();
00620   _param_5.retvalue=0;
00621   return 0;
00622   
00623 }
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines