Mercurial
annotate connectors/main.c @ 279:b3b547563ec7
Add Google connector service and agent wiki
Implement the C/Seobeo Google Drive and Gmail connector with encrypted OAuth storage, Zenbu authentication, browser testing, AI tool discovery, chunked HTTP decoding, and Bazel coverage. Consolidate repository guidance into progressive wiki documentation and enforce arena-first allocation for new first-party C code.
Co-authored-by: Copilot <[email protected]>
Copilot-Session: 84c338fd-0939-4bb3-b7f3-1062eb213e5d
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 17 Aug 2026 22:22:36 -0700 |
| parents | |
| children |
| rev | line source |
|---|---|
|
279
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
1 #include "connectors/connector.h" |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
2 #include "connectors/auth_http_adapter.h" |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
3 |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
4 #include <openssl/crypto.h> |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
5 |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
6 #include <stdio.h> |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
7 #include <stdlib.h> |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
8 #include <string.h> |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
9 |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
10 typedef struct { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
11 char database[1024]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
12 char auth_database[1024]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
13 char auth_cookie_secret_hex[AUTH_CRYPTO_COOKIE_SECRET_MAX_BYTES * 2 + 1]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
14 int64 auth_session_idle_ttl; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
15 char bind[128]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
16 char port[16]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
17 char static_dir[1024]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
18 char client_id[1024]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
19 char client_secret[2048]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
20 char redirect_uri[2048]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
21 char master_key[256]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
22 uint32 master_key_version; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
23 } Service_Config; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
24 |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
25 static boolean set_value(Service_Config *config, const char *key, const char *value) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
26 { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
27 #define SET(name, field) if (!strcmp(key, name)) { \ |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
28 if (strlen(value) >= sizeof(config->field)) return FALSE; \ |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
29 strcpy(config->field, value); return TRUE; \ |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
30 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
31 SET("DATABASE", database) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
32 SET("DB_PATH", database) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
33 SET("database", database) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
34 SET("AUTH_DATABASE", auth_database) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
35 SET("AUTH_DB_PATH", auth_database) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
36 SET("auth_database", auth_database) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
37 SET("AUTH_COOKIE_SECRET", auth_cookie_secret_hex) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
38 SET("AUTH_COOKIE_SECRET_HEX", auth_cookie_secret_hex) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
39 SET("auth_cookie_secret_hex", auth_cookie_secret_hex) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
40 SET("BIND", bind) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
41 SET("SERVER_HOST", bind) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
42 SET("bind", bind) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
43 SET("PORT", port) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
44 SET("SERVER_PORT", port) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
45 SET("port", port) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
46 SET("STATIC_DIR", static_dir) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
47 SET("static_dir", static_dir) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
48 SET("GOOGLE_CLIENT_ID", client_id) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
49 SET("google_client_id", client_id) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
50 SET("GOOGLE_CLIENT_SECRET", client_secret) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
51 SET("google_client_secret", client_secret) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
52 SET("GOOGLE_REDIRECT_URI", redirect_uri) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
53 SET("google_redirect_uri", redirect_uri) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
54 SET("MASTER_KEY_BASE64URL", master_key) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
55 SET("master_key_base64url", master_key) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
56 if (!strcmp(key, "MASTER_KEY_VERSION") || |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
57 !strcmp(key, "master_key_version")) { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
58 config->master_key_version = (uint32)strtoul(value, NULL, 10); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
59 return config->master_key_version > 0; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
60 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
61 if (!strcmp(key, "AUTH_SESSION_IDLE_TTL") || |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
62 !strcmp(key, "auth_session_idle_ttl")) { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
63 char *end = NULL; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
64 long long parsed = strtoll(value, &end, 10); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
65 if (!end || *end || parsed <= 0) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
66 return FALSE; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
67 config->auth_session_idle_ttl = (int64)parsed; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
68 return TRUE; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
69 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
70 #undef SET |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
71 return TRUE; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
72 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
73 |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
74 static boolean load_config(const char *path, Service_Config *config) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
75 { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
76 FILE *file = fopen(path, "r"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
77 char workspace_path[2048] = {0}; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
78 if (!file) { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
79 const char *workspace = getenv("BUILD_WORKSPACE_DIRECTORY"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
80 if (workspace && workspace[0]) { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
81 int written = snprintf( |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
82 workspace_path, sizeof(workspace_path), "%s/%s", workspace, path); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
83 if (written > 0 && (size_t)written < sizeof(workspace_path)) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
84 file = fopen(workspace_path, "r"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
85 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
86 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
87 if (!file) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
88 return FALSE; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
89 memset(config, 0, sizeof(*config)); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
90 strcpy(config->bind, "127.0.0.1"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
91 strcpy(config->port, "6981"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
92 strcpy(config->static_dir, "connectors"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
93 config->auth_session_idle_ttl = 604800; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
94 char line[4096]; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
95 boolean ok = TRUE; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
96 while (ok && fgets(line, sizeof(line), file)) { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
97 char *newline = strpbrk(line, "\r\n"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
98 if (newline) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
99 *newline = '\0'; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
100 if (!line[0] || line[0] == '#') |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
101 continue; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
102 char *equals = strchr(line, '='); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
103 if (!equals) { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
104 ok = FALSE; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
105 break; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
106 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
107 *equals = '\0'; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
108 ok = set_value(config, line, equals + 1); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
109 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
110 fclose(file); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
111 return ok && config->database[0] && config->auth_database[0] && |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
112 config->auth_cookie_secret_hex[0] && config->client_id[0] && |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
113 config->client_secret[0] && config->redirect_uri[0] && |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
114 config->master_key[0] && config->master_key_version; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
115 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
116 |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
117 int main(int argc, char **argv) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
118 { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
119 const char *config_path = argc > 1 ? argv[1] : getenv("CONNECTOR_CONFIG_PATH"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
120 if (!config_path || !config_path[0]) |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
121 config_path = "connectors/.config"; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
122 Service_Config service; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
123 if (!load_config(config_path, &service)) { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
124 fprintf(stderr, "Invalid connector config: %s\n", config_path); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
125 return 1; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
126 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
127 Connector_Master_Key key = {.version = service.master_key_version}; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
128 size_t key_length = 0; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
129 if (!Connector_Base64Url_Decode( |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
130 service.master_key, key.key, sizeof(key.key), &key_length) || |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
131 key_length != sizeof(key.key)) { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
132 fprintf(stderr, "MASTER_KEY_BASE64URL must decode to 32 bytes\n"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
133 return 1; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
134 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
135 Connector_Store store; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
136 if (!Connector_Store_Open(&store, service.database, &key)) { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
137 fprintf(stderr, "Unable to open connector database\n"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
138 return 1; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
139 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
140 Connector_Auth_HTTP_Context auth_context; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
141 if (!Connector_Auth_HTTP_Init( |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
142 &auth_context, service.auth_database, |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
143 service.auth_cookie_secret_hex, service.auth_session_idle_ttl)) { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
144 OPENSSL_cleanse( |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
145 service.auth_cookie_secret_hex, |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
146 sizeof(service.auth_cookie_secret_hex)); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
147 fprintf(stderr, "Unable to initialize shared HTTP authentication\n"); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
148 Connector_Store_Close(&store); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
149 return 1; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
150 } |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
151 OPENSSL_cleanse( |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
152 service.auth_cookie_secret_hex, sizeof(service.auth_cookie_secret_hex)); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
153 Connector_Google_Config google = { |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
154 .client_id = service.client_id, |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
155 .client_secret = service.client_secret, |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
156 .redirect_uri = service.redirect_uri, |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
157 .oauth_authorize_url = "https://accounts.google.com/o/oauth2/v2/auth", |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
158 .oauth_token_url = "https://oauth2.googleapis.com/token", |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
159 .oauth_revoke_url = "https://oauth2.googleapis.com/revoke", |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
160 .identity_url = "https://openidconnect.googleapis.com/v1/userinfo", |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
161 .drive_api_url = "https://www.googleapis.com", |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
162 .drive_upload_url = "https://www.googleapis.com", |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
163 .gmail_api_url = "https://gmail.googleapis.com" |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
164 }; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
165 Connector_Auth_Adapter auth = |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
166 Connector_Auth_HTTP_Create_Adapter(&auth_context); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
167 Connector_Service_Configure(&store, &google, auth); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
168 Seobeo_Router_Init(); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
169 Connector_Service_Register_Routes(); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
170 int result = Seobeo_Web_Server_Start_On( |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
171 service.bind, service.static_dir, service.port, SEOBEO_MODE_EDGE, 4); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
172 Seobeo_Router_Destroy(); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
173 Connector_Auth_HTTP_Destroy(&auth_context); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
174 Connector_Store_Close(&store); |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
175 return result; |
|
b3b547563ec7
Add Google connector service and agent wiki
MrJuneJune <me@mrjunejune.com>
parents:
diff
changeset
|
176 } |