1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#ifndef MOD_AUTH_SINGLEID_H_
#define MOD_AUTH_SINGLEID_H_
#include <stdlib.h>
#include <time.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct sid_attribute {
const char *url;
const char *alias;
int required;
int count;
struct sid_attribute *next;
} sid_attribute_t;
void sid_shared_lock (void);
void sid_shared_unlock (void);
typedef struct sid_request sid_request_t;
void sid_request_log_error (sid_request_t *req,
const char *message,
const char *detail);
const char* sid_request_qs (sid_request_t *req);
const char* sid_request_url (sid_request_t *req,
int with_path);
void sid_request_respond (sid_request_t *req,
int code,
const char *reason,
const char *header,
...);
void sid_request_authenticated (sid_request_t *req,
const char *identifier);
void sid_request_attribute_values (sid_request_t *req,
sid_attribute_t *attr,
const char **values);
/* -----------------------------------------------------------------------------------
* STORAGE: Actually, communications white-board between processes/threads.
*/
typedef struct sid_storage sid_storage_t;
typedef struct sid_assoc {
const char *server;
const char *handle;
const char *type;
const unsigned char *secret;
size_t n_secret;
time_t expires;
} sid_assoc_t;
sid_storage_t* sid_storage_initialize (void *memory,
size_t n_memory);
int sid_storage_check_nonce (sid_storage_t *storage,
const char *server,
const char *nonce);
size_t sid_storage_nonce_capacity (sid_storage_t *storage);
int sid_storage_store_assoc (sid_storage_t *storage,
const sid_assoc_t *assoc);
int sid_storage_find_assoc (sid_storage_t *storage,
const char *server,
const char *handle,
sid_assoc_t *assoc);
void sid_storage_invalidate_assoc (sid_storage_t *storage,
const char *server,
const char *handle);
/* -----------------------------------------------------------------------------------
* OPENID CONSUMER
*/
void sid_consumer_authenticate (sid_request_t *req,
sid_storage_t *store,
const char *trust_root,
const char *identity,
sid_attribute_t *attributes);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* MOD_AUTH_SINGLEID_H_ */
|