GDBMS 1.0
|
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 }