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.7 - (show annotations) (download) (as text)
Fri Nov 26 04:51:47 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.6: +137 -7 lines
File MIME type: text/x-c++src
dbprefixを定義した.
insertAccountを定義した.
isValidSessionIDを定義した.

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

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