summaryrefslogtreecommitdiff
path: root/module/mod_auth_singleid.h
blob: 038e23e73feb44e3a5d8c0d2f3c83c6015c94c3d (plain)
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
#ifndef MOD_AUTH_SINGLEID_H_
#define MOD_AUTH_SINGLEID_H_

#include <stdlib.h>

#ifdef __cplusplus
extern "C" {
#endif

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);

/* -----------------------------------------------------------------------------------
 * 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);


#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* MOD_AUTH_SINGLEID_H_ */