Develop and Download Open Source Software

Browse CVS Repository

Contents of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.8 - (show annotations) (download) (as text)
Fri Nov 26 06:36:55 2004 UTC (19 years, 4 months ago) by aga
Branch: MAIN
Changes since 1.7: +96 -16 lines
File MIME type: text/x-c++src
・createSession, getSession を作成.

1 /*
2 *
3 * $Revision: 1.7 $
4 * $Log: commonal.cc,v $
5 * Revision 1.7 2004/11/26 04:51:47 youi
6 * dbprefix??絎?臂?????.
7 * insertAccount??絎?臂?????.
8 * isValidSessionID??絎?臂?????.
9 *
10 * Revision 1.6 2004/11/26 04:35:55 aga
11 * ??oginUser(), logoutUser()??篏???.
12 *
13 * Revision 1.5 2004/11/26 01:08:25 aga
14 * ??ddSlashes()篏???.
15 *
16 * Revision 1.4 2004/11/25 12:14:29 youi
17 * getUid????????絎?臂?????.
18 *
19 * Revision 1.3 2004/11/25 11:13:59 youi
20 * getLastErrorString/setLastErrorString??絎?臂?
21 *
22 * Revision 1.2 2004/11/25 08:55:19 youi
23 * 綣??違??????篆??.
24 * freeResult??菴遵??.
25 *
26 * Revision 1.1 2004/11/25 05:14:58 youi
27 * initial version
28 *
29 *
30 */
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <string.h>
34 #include <mysql.h>
35 #include <string>
36 using namespace std;
37
38 #include "common.h"
39 #include "account.h"
40 #include "group.h"
41 #include "session.h"
42 #include "criteria.h"
43 #include "commonal.h"
44
45
46 static MYSQL* mysql = NULL; //!< MySQL????潟????/span>
47 static string dbprefix; //!< XOOPS???若?帥???若?鴻???若??????REFIX
48
49 /**
50 *
51 * php??ddslashes????????
52 *
53 * @param addslashes???鴻????絖?????NULL??絎?筝?????
54 * @return addslashes????????絖???
55 */
56 string addSlashes( const char *str )
57 {
58 int len = strlen(str);
59 char *buf = new char[len*2+1];
60 int bufLen = mysql_real_escape_string( mysql, buf, str, len );
61 string s( buf, bufLen );
62 return s;
63 }
64
65
66 /**
67 *
68 * ???若?帥???若?鴻????????
69 *
70 * @param host ???若?帥???若?鴻?????鴻????
71 * @param user ???若?帥???若?鴻???≪???祉?鴻???????若?九??
72 * @param password 筝?荐????若?吟?????鴻???若??
73 * @param dbname ???若?帥???若?鴻??????
74 * @param prefix XOOPS???若?帥???若?鴻???若??????REFIX
75 * @return result_t
76 * @refer result_t
77 */
78 result_t initializeDB( const char* host, const char* user, const char* password, const char* dbname, const char* prefix )
79 {
80 // ?≪??・膓?筝???????筝???????/span>
81 if ( mysql != NULL )
82 mysql_close( mysql );
83
84 dbprefix = prefix;
85
86 // ????????・膓?
87 mysql = mysql_init(NULL);
88 if ( mysql == NULL ){
89 return RES_DB_INITIALIZE_ERROR;
90 }
91 char *unix_socket = NULL; // ?
92 uint flag = 0; // ?
93 if ( NULL == mysql_real_connect( mysql, host, user, password, dbname, 3306, unix_socket, flag ) ){
94 return RES_DB_CONNECT_ERROR;
95 }
96
97 return RES_OK;
98 }
99
100
101 /**
102 *
103 * Platform???若?倶?粋??倶????緇?
104 *
105 * @param
106 * @return
107 *
108 */
109 bool isActivated( sessionid_t sid, userid_t uid )
110 {
111 return false;
112 }
113
114 /**
115 *
116 * Platform???若?倶?粋??倶??紊???/span>
117 *
118 * @param
119 * @return
120 *
121 */
122 result_t activate( sessionid_t sid, userid_t uid, bool activate )
123 {
124 return RES_ERROR;
125 }
126
127 /**
128 *
129 * ?≪?????潟????/span>
130 *
131 * @param
132 * @return
133 *
134 */
135 int getAccountCount( sessionid_t sid )
136 {
137 return 0;
138 }
139
140 /**
141 *
142 * ?≪?????潟??????/span>
143 *
144 * @param
145 * @return
146 *
147 */
148 result_t deleteAccount( sessionid_t sid, userid_t uid )
149 {
150 return RES_ERROR;
151 }
152
153 /**
154 *
155 * ?≪?????潟?????怨??
156 *
157 * @param
158 * @return
159 *
160 */
161 result_t getAccount( sessionid_t sid, userid_t uid, const account_t** )
162 {
163 return RES_ERROR;
164 }
165
166 /**
167 *
168 * ?≪?????潟?????怨??
169 *
170 * @param
171 * @return
172 *
173 */
174 result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, const criteria_t* cri, const account_t** accounts, int* accountsLen )
175 {
176 return RES_ERROR;
177 }
178
179 /**
180 *
181 * ?≪?????潟???脂??/span>
182 *
183 * @param sid ?祉???激?с??/span>
184 * @param
185 * @return
186 *
187 */
188 result_t insertAccount( sessionid_t sid, const account_t* account )
189 {
190 // if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
191 string sql;
192 string tmp;
193 char buf[ 12 ];
194
195 //xoops?????若?吟???若???????吾??莨若??
196 sql = "INSERT INTO " + dbprefix + "_users (uname, name, email, url, user_avatar, user_regdate, user_icq, user_from, user_sig, user_viewemail, actkey, user_aim, user_yim, user_msnm, pass, posts, attachsig, rank, level, theme, timezone_offset, last_login, umode, uorder, notify_method, notify_mode, user_occ, bio, user_intrest, user_mailok) VALUES (";
197 sql += "'" + string( addSlashes( account -> getUname( ) ) ) + "', ";
198 sql += "'" + string( addSlashes( account -> getName( ) ) ) + "', ";
199 sql += "'" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
200 sql += "'" + string( addSlashes( account -> getURL( ) ) ) + "', ";
201 sql += "'" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
202 snprintf( buf, 12, "%d", time( NULL ) );
203 sql += string( buf ) + ", ";
204 sql += "'" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
205 sql += "'" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
206 sql += "'" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
207 snprintf( buf, 12, "%d", account -> getUserViewemail( ) );
208 sql += string( buf ) + ", ";
209 sql += "'" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
210 sql += "'" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
211 sql += "'" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
212 sql += "'" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
213 sql += "'" + string( addSlashes( account -> getPass( ) ) ) + "', ";
214 snprintf( buf, 12, "%d", account -> getPosts( ) );
215 sql += string( buf ) + ", ";
216 snprintf( buf, 12, "%d", account -> getAttachsig( ) );
217 sql += string( buf ) + ", ";
218 snprintf( buf, 12, "%d", account -> getRank( ) );
219 sql += string( buf ) + ", ";
220 snprintf( buf, 12, "%d", account -> getLevel( ) );
221 sql += string( buf ) + ", ";
222 sql += "'" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
223 snprintf( buf, 12, "%lf", account -> getTimezoneOffset( ) );
224 sql += string( buf ) + ", ";
225 sql += "0, "; //last login
226 sql += "'" + string( addSlashes( account -> getUmode( ) ) ) + "', ";
227 snprintf( buf, 12, "%d", account -> getUorder( ) );
228 sql += string( buf ) + ", ";
229 snprintf( buf, 12, "%d", account -> getNotifyMethod( ) );
230 sql += string( buf ) + ", ";
231 snprintf( buf, 12, "%d", account -> getNotifyMode( ) );
232 sql += string( buf ) + ", ";
233 sql += "'" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
234 sql += "'" + string( addSlashes( account -> getBio( ) ) ) + "', ";
235 sql += "'" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
236 snprintf( buf, 12, "%d", account -> getUserMailok( ) );
237 sql += string( buf ) + ")";
238 fprintf( stderr, "%s\n", sql.c_str( ) );
239 if( mysql_query( mysql, sql.c_str( ) ) ){
240 return RES_DB_QUERY_ERROR;
241 }
242
243 //???若??D????緇?????
244 userid_t uid;
245 if( getUid( account -> getUname( ), &uid ) != RES_OK ){
246 return RES_ERROR;
247 }
248
249 //vpaccount?????若?吟???若??????????????宴???吾??莨若??
250 sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, institute, tel, organization, country, zipcode, fax, base_url, notice_mail, datetime) VALUES (";
251 snprintf( buf, 12, "%d", uid );
252 sql += string( buf ) + ", ";
253 if( account -> getActivate() ){
254 sql += "1, ";
255 }else{
256 sql += "0, ";
257 }
258 sql += "'" + string( addSlashes( account -> getAddress() ) ) + "', ";
259 sql += "'" + string( addSlashes( account -> getInstitute() ) ) + "', ";
260 sql += "'" + string( addSlashes( account -> getTel() ) ) + "', ";
261 sql += "'" + string( addSlashes( account -> getOrganization() ) ) + "', ";
262 sql += "'" + string( addSlashes( account -> getCountry() ) ) + "', ";
263 sql += "'" + string( addSlashes( account -> getZipcode() ) ) + "', ";
264 sql += "'" + string( addSlashes( account -> getFax() ) ) + "', ";
265 sql += "'" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
266 snprintf( buf, 12, "%d", account -> getNoticeMail( ) );
267 sql += string( buf ) + ", ";
268 snprintf( buf, 12, "%d", account -> getNoticeMailSince( ) );
269 sql += string( buf ) + ")";
270 fprintf( stderr, "%s\n", sql.c_str( ) );
271 if( mysql_query( mysql, sql.c_str( ) ) ){
272 //xoops_users??nsert???????潟?若???????ゃ????
273 sql = "DELETE FROM " + dbprefix + "_users where uid=";
274 snprintf( buf, 12, "%d", uid );
275 sql += string( buf );
276 return RES_DB_QUERY_ERROR;
277 }
278
279 return RES_OK;
280 }
281
282 /**
283 *
284 * ?≪?????潟??紊???/span>
285 *
286 * @param
287 * @return
288 *
289 */
290 result_t updateAccount( sessionid_t sid, const account_t* account )
291 {
292 return RES_ERROR;
293 }
294
295 /**
296 *
297 * ???若??D筝?荀?/span>
298 *
299 * @param
300 * @return
301 *
302 */
303 result_t dumpUids( sessionid_t sid, const criteria_t* cri, userid_t** uids, int* uidsLen )
304 {
305 return RES_ERROR;
306 }
307
308 /**
309 *
310 * ?違???若????/span>
311 *
312 * @param
313 * @return
314 *
315 */
316 int getGroupCount( sessionid_t sid )
317 {
318 return 0;
319 }
320
321 /**
322 *
323 * ??絮??違???若??筝?荀у??
324 *
325 * @param
326 * @return
327 *
328 */
329 result_t getGroupsByUid( sessionid_t sid, userid_t uid, const criteria_t* cri, groupid_t** gids, int* gidsLen )
330 {
331 return RES_ERROR;
332 }
333
334 /**
335 *
336 * ?違???若??膊∞??罔????????
337 *
338 * @param
339 * @return
340 *
341 */
342 bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid )
343 {
344 return RES_ERROR;
345 }
346
347 /**
348 *
349 * ?違???若??ID筝?荀?/span>
350 *
351 * @param
352 * @return
353 *
354 */
355 result_t dumpGids( sessionid_t sid, const criteria_t* cri, groupid_t** gids, int* gidsLen )
356 {
357 return RES_ERROR;
358 }
359
360 /**
361 *
362 * ?違???若??膊∞????ID??緇?
363 *
364 * @param
365 * @return
366 *
367 */
368 result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, const criteria_t* cri, userid_t** uids, int* uidsLen )
369 {
370 return RES_ERROR;
371 }
372
373 /**
374 *
375 * ?違???若????絮????若?九????/span>
376 *
377 * @param
378 * @return
379 *
380 */
381 result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid )
382 {
383 return RES_ERROR;
384 }
385
386 /**
387 *
388 * ?違???若????絮????若?区申??
389 *
390 * @param
391 * @return
392 *
393 */
394 result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid )
395 {
396 return RES_ERROR;
397 }
398
399 /**
400 *
401 * ?違???若????絮????若?九??
402 *
403 * @param
404 * @return
405 *
406 */
407 result_t getMembers( sessionid_t sid, groupid_t gid, const criteria_t* cri, userid_t** uids, int* uidsLen )
408 {
409 return RES_ERROR;
410 }
411
412 /**
413 *
414 * ?違???若????????/span>
415 *
416 * @param
417 * @return
418 *
419 */
420 result_t deleteGroup( sessionid_t sid, groupid_t gid )
421 {
422 return RES_ERROR;
423 }
424
425 /**
426 *
427 * ?違???若?????脂??/span>
428 *
429 * @param
430 * @return
431 *
432 */
433 result_t insertGroup( sessionid_t sid, const group_t* group )
434 {
435 return RES_ERROR;
436 }
437
438 /**
439 *
440 * ?違???若???????/span>
441 *
442 * @param
443 * @return
444 *
445 */
446 result_t updateGroup( sessionid_t sid, const group_t* group )
447 {
448 return RES_ERROR;
449 }
450
451 /**
452 *
453 * ?違???若?????怨??
454 *
455 * @param
456 * @return
457 *
458 */
459 result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group )
460 {
461 return RES_ERROR;
462 }
463
464 /**
465 *
466 * ?違???若?????怨??
467 *
468 * @param
469 * @return
470 *
471 */
472 result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, const criteria_t* cri, const group_t** groups, int* groupsLen )
473 {
474 return RES_ERROR;
475 }
476
477 /**
478 *
479 * ?≪?????若?炊┤???????
480 *
481 * @param
482 * @return
483 *
484 */
485 bool isModerator( sessionid_t sid, userid_t uid )
486 {
487 return RES_ERROR;
488 }
489
490 /**
491 *
492 * ???若??D??緇?
493 *
494 * @param uname ID????緇??????????若?吟?弱??
495 * @param uid ID??篁e?ャ??????紊??違?????ゃ?潟??/span>
496 * @return RES_ERROR | RES_OK
497 * @refer result_t
498 *
499 */
500 result_t getUid( const char* uname, userid_t* uid )
501 {
502 string sql;
503
504 if( uname == NULL ) return RES_ERROR;
505
506 string uname2 = addSlashes( uname );
507 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "'";
508 if( mysql_query( mysql, sql.c_str( ) ) ){
509 return RES_DB_QUERY_ERROR;
510 }
511 MYSQL_RES* result = mysql_use_result( mysql ) ;
512 MYSQL_ROW row = mysql_fetch_row(result);
513 if( row ){
514 *uid = atoi( row[0] );
515 mysql_free_result( result );
516 return RES_OK;
517 }else{
518 mysql_free_result( result );
519 return RES_NO_SUCH_USER;
520 }
521 }
522
523 /**
524 *
525 * ?祉???激?с?潟??篏?????xoops_vpaccount_session???吾??莨若???? sessionid_t??session???????
526 *
527 * @param uid xoops_users??id
528 * @param remoteHost remote ip (host order)
529 * @param session sessionid_t???????????????????ゃ?潟?帥??
530 * @return RES_OK ????
531 * @return RES_DB_QUERY_ERROR DB????????筝?????????/span>
532 */
533 static result_t addSession( userid_t uid, unsigned long remoteHost, sessionid_t* session )
534 {
535 result_t ret;
536 string sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid,remote_host) values (" +
537 unsignedIntToString(uid) + "," + unsignedIntToString((unsigned int)remoteHost) + ")";
538 if ( 0 == mysql_query( mysql, sql.c_str() ) ){
539 *session = (int)mysql_insert_id(mysql);
540 ret = RES_OK;
541 }
542 else {
543 ret = RES_DB_QUERY_ERROR;
544 }
545 return ret;
546 }
547
548
549 /**
550 *
551 * ???違?ゃ?活?荐若???祉???激?с?割???
552 *
553 * @param uname ???違?ゃ?喝??
554 * @param passwd ???鴻???若??
555 * @param session sessionid_t???????????????????ゃ?潟?帥??
556 * @return RES_OK ???違?ゃ?恰??????session??essionid_t???吾??莨若??????
557 * @return RES_LOGIN_FAILURE uname?障????asswd???医幻
558 * @return RES_DB_QUERY_ERROR DB????????筝?????????/span>
559 *
560 */
561 result_t loginUser(const char* uname, const char* passwd, sessionid_t* session )
562 {
563 result_t ret;
564 string sql;
565
566 // uname, passwd -> uid
567 string escUname = addSlashes( uname );
568 string escPasswd = addSlashes( passwd );
569 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and paswd=md5('" + escPasswd + "')";
570 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
571 MYSQL_RES* result = mysql_store_result( mysql );
572 if( result ){
573 MYSQL_ROW row = mysql_fetch_row(result);
574 if( row ){
575 userid_t uid = atoi(row[0]);
576 ret = addSession( uid, 0, session );
577 }else{
578 ret = RES_LOGIN_FAILUE;
579 }
580 mysql_free_result( result );
581 }else {
582 ret = RES_DB_QUERY_ERROR;
583 }
584 }else{
585 ret = RES_DB_QUERY_ERROR;
586 }
587
588 return ret;
589 }
590
591 /**
592 *
593 * ???違?≪???????祉???激?с?括?篋?
594 *
595 * @param sid session id
596 * @return ????
597 *
598 */
599 void logoutUser( sessionid_t sid ){
600 result_t ret;
601 string sql;
602 sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid);
603 if ( 0 == mysql_query( mysql, sql.c_str() ) ){
604 if ( mysql_affected_rows(mysql) == 1 ){
605 // ???違?≪????????
606 }
607 else {
608 // sid???≦??/span>
609 }
610 }
611 else {
612 // DB????????筝?????????/span>
613 }
614 }
615
616 /**
617 *
618 * ?祉???激?с?潟?????.<br>
619 * XOOPS??ession???若????????蚊??????sess_id?????essionid??膈???????
620 * ?逸?session_t??篏?????????
621 * ???若?帥???若?鴻???祉???激?с?潟????違?????宴??荐??蚊????
622 *
623 * @param sessionid xoops??ession_id
624 * @param uid xoops_users??id
625 * @param remoteHost remote ip (host order)
626 * @param session sessionid_t???????????????????ゃ?潟?帥??
627 * @return RES_OK
628 * @return RES_ERROR
629 * @return RES_DB_QUERY_ERROR
630 *
631 */
632 result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* session )
633 {
634 result_t ret;
635 string sql;
636
637 string escSessionid = addSlashes(sessionid);
638 sql = "SELECT sess_id from " + dbprefix + "_session where sess_id='" + escSessionid + "'";
639 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
640 MYSQL_RES* result = mysql_store_result( mysql );
641 if( result ){
642 MYSQL_ROW row = mysql_fetch_row(result);
643 if( row ){
644 ret = addSession( uid, remoteHost, session );
645 }else{
646 ret = RES_ERROR;
647 }
648 mysql_free_result( result );
649 }else {
650 ret = RES_DB_QUERY_ERROR;
651 }
652 }else{
653 ret = RES_DB_QUERY_ERROR;
654 }
655
656
657 return RES_ERROR;
658 }
659
660 /**
661 *
662 * ?祉???激?с?潟???膣違??session_t?у??????.<br>
663 *
664 * @param sess_id
665 * @param session
666 * @return
667 *
668 */
669 result_t getSession( sessionid_t sess_id, const session_t** ppsession )
670 {
671 result_t ret;
672 string sql;
673
674 sql = "SELECT sid, uid, unix_timestamp(timestamp), remote_host from " + dbprefix +
675 "_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sess_id);
676 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
677 MYSQL_RES* result = mysql_store_result( mysql );
678 if( result ){
679 MYSQL_ROW row = mysql_fetch_row(result);
680 if( row ){
681 session_t *p = new session();
682 p->setSessionID(sess_id);
683 p->setUserID(atoi(row[1]));
684 p->setDate(atoi(row[2]));
685 p->setRemoteHost(atoi(row[3]));
686 *ppsession = p;
687 ret = RES_OK;
688 }else{
689 ret = RES_NO_SUCH_SESSION;
690 }
691 mysql_free_result( result );
692 }else {
693 ret = RES_DB_QUERY_ERROR;
694 }
695 }else{
696 ret = RES_DB_QUERY_ERROR;
697 }
698
699 return RES_ERROR;
700 }
701
702 /**
703 *
704 * ?祉???激?с?潟???綵??с?????с????????.
705 *
706 * @param sid ???с??????????session
707 * @return true 罩e?
708 * @return false 筝?罩?/span>
709 *
710 */
711 bool isValidSessionID( sessionid_t sid )
712 {
713 string sql;
714 string sidstr;
715 char buf[ 12 ];
716 snprintf( buf, 12, "%d", sid );
717
718 sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE session_id=" + string( buf );
719 if( mysql_query( mysql, sql.c_str( ) ) ){
720 return false;
721 }
722 MYSQL_RES* result = mysql_use_result( mysql ) ;
723 MYSQL_ROW row = mysql_fetch_row(result);
724 if( row ){
725 return true;
726 }else{
727 return false;
728 }
729 }
730
731 void freeResult( account_t* ptr ){ delete[] ptr; }
732
733 void freeResult( group_t* ptr ){ delete[] ptr; }
734
735 void freeResult( session_t* ptr ){ delete[] ptr; }
736
737 void freeResult( int* ptr ){ delete[] ptr; }
738
739 static string errstr;
740 const char* getLastErrorString()
741 {
742 return errstr.c_str( );
743 }
744
745 void setLastErrorString( const char* str )
746 {
747 errstr = str;
748 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26