|
|
|
@@ -1,66 +1,70 @@ |
1 | #include <uuid/uuid.h> |
1 | #include <uuid/uuid.h> |
2 | #include <iostream> |
2 | #include <iostream> |
3 | #include <cassert> |
3 | #include <cassert> |
4 | #include <string> |
4 | #include <string> |
5 | #include <ext/algorithm> |
| |
6 | using namespace std; |
5 | using namespace std; |
7 | #include <kingate/exception.h> |
6 | #include <kingate/exception.h> |
8 | #include <kingate/plaincgi.h> |
7 | #include <kingate/plaincgi.h> |
9 | #include <kingate/cgi_gateway.h> |
8 | #include <kingate/cgi_gateway.h> |
10 | #include <opkele/exception.h> |
9 | #include <opkele/exception.h> |
11 | #include <opkele/util.h> |
10 | #include <opkele/util.h> |
12 | #include <opkele/uris.h> |
11 | #include <opkele/uris.h> |
13 | #include <opkele/extension.h> |
12 | #include <opkele/extension.h> |
14 | #include <opkele/association.h> |
13 | #include <opkele/association.h> |
15 | #include <opkele/debug.h> |
14 | #include <opkele/debug.h> |
16 | #include <opkele/verify_op.h> |
15 | #include <opkele/verify_op.h> |
17 | #include <opkele/sreg.h> |
16 | #include <opkele/sreg.h> |
18 | |
17 | |
| |
18 | #include "config.h" |
| |
19 | #ifdef HAVE_EXT_ALGORITHM_H |
| |
20 | # include <ext/algorithm> |
| |
21 | #endif |
| |
22 | |
19 | #include "sqlite.h" |
23 | #include "sqlite.h" |
20 | #include "kingate_openid_message.h" |
24 | #include "kingate_openid_message.h" |
21 | |
25 | |
22 | static const string get_self_url(const kingate::cgi_gateway& gw) { |
26 | static const string get_self_url(const kingate::cgi_gateway& gw) { |
23 | bool s = gw.has_meta("SSL_PROTOCOL_VERSION"); |
27 | bool s = gw.has_meta("SSL_PROTOCOL_VERSION"); |
24 | string rv = s?"https://":"http://"; |
28 | string rv = s?"https://":"http://"; |
25 | rv += gw.http_request_header("Host"); |
29 | rv += gw.http_request_header("Host"); |
26 | const string& port = gw.get_meta("SERVER_PORT"); |
30 | const string& port = gw.get_meta("SERVER_PORT"); |
27 | if( port!=(s?"443":"80") ) { |
31 | if( port!=(s?"443":"80") ) { |
28 | rv += ':'; rv += port; |
32 | rv += ':'; rv += port; |
29 | } |
33 | } |
30 | rv += gw.get_meta("REQUEST_URI"); |
34 | rv += gw.get_meta("REQUEST_URI"); |
31 | string::size_type q = rv.find('?'); |
35 | string::size_type q = rv.find('?'); |
32 | if(q!=string::npos) |
36 | if(q!=string::npos) |
33 | rv.erase(q); |
37 | rv.erase(q); |
34 | return rv; |
38 | return rv; |
35 | } |
39 | } |
36 | |
40 | |
37 | class opdb_t : public sqlite3_t { |
41 | class opdb_t : public sqlite3_t { |
38 | public: |
42 | public: |
39 | opdb_t() |
43 | opdb_t() |
40 | : sqlite3_t("/tmp/OP.db") { |
44 | : sqlite3_t("/tmp/OP.db") { |
41 | assert(_D); |
45 | assert(_D); |
42 | char **resp; int nr,nc; char *errm; |
46 | char **resp; int nr,nc; char *errm; |
43 | if(sqlite3_get_table( |
47 | if(sqlite3_get_table( |
44 | _D, "SELECT a_op FROM assoc LIMIT 0", |
48 | _D, "SELECT a_op FROM assoc LIMIT 0", |
45 | &resp,&nr,&nc,&errm)!=SQLITE_OK) { |
49 | &resp,&nr,&nc,&errm)!=SQLITE_OK) { |
46 | extern const char *__OP_db_bootstrap; |
50 | extern const char *__OP_db_bootstrap; |
47 | DOUT_("Bootstrapping DB"); |
51 | DOUT_("Bootstrapping DB"); |
48 | if(sqlite3_exec(_D,__OP_db_bootstrap,NULL,NULL,&errm)!=SQLITE_OK) |
52 | if(sqlite3_exec(_D,__OP_db_bootstrap,NULL,NULL,&errm)!=SQLITE_OK) |
49 | throw opkele::exception(OPKELE_CP_ string("Failed to boostrap SQLite database: ")+errm); |
53 | throw opkele::exception(OPKELE_CP_ string("Failed to boostrap SQLite database: ")+errm); |
50 | }else |
54 | }else |
51 | sqlite3_free_table(resp); |
55 | sqlite3_free_table(resp); |
52 | } |
56 | } |
53 | }; |
57 | }; |
54 | |
58 | |
55 | class example_op_t : public opkele::verify_OP { |
59 | class example_op_t : public opkele::verify_OP { |
56 | public: |
60 | public: |
57 | kingate::cgi_gateway& gw; |
61 | kingate::cgi_gateway& gw; |
58 | opdb_t db; |
62 | opdb_t db; |
59 | kingate::cookie htc; |
63 | kingate::cookie htc; |
60 | |
64 | |
61 | |
65 | |
62 | example_op_t(kingate::cgi_gateway& g) |
66 | example_op_t(kingate::cgi_gateway& g) |
63 | : gw(g) { |
67 | : gw(g) { |
64 | try { |
68 | try { |
65 | htc = gw.cookies.get_cookie("htop_session"); |
69 | htc = gw.cookies.get_cookie("htop_session"); |
66 | sqlite3_mem_t<char*> S = sqlite3_mprintf( |
70 | sqlite3_mem_t<char*> S = sqlite3_mprintf( |
|