annotate s3/tests/s3_uploader_test.c @ 206:240337164a80

[Seobeo] SSL should be used for large file as well lol.
author MrJuneJune <me@mrjunejune.com>
date Sun, 15 Feb 2026 11:41:53 -0800
parents 008ca7780c8a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
1 #include "s3/s3_uploader.h"
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
2
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
3 #include <stdio.h>
198
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
4 #include <stdlib.h>
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
5 #include <string.h>
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
6
198
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
7 // Simple .env parser
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
8 static char *parse_env_value(const char *env_content, const char *key)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
9 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
10 const char *pos = strstr(env_content, key);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
11 if (!pos) return NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
12
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
13 pos += strlen(key);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
14 if (*pos != '=') return NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
15 pos++;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
16
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
17 const char *end = pos;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
18 while (*end && *end != '\n' && *end != '\r') end++;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
19
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
20 size_t len = end - pos;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
21 char *value = malloc(len + 1);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
22 memcpy(value, pos, len);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
23 value[len] = '\0';
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
24 return value;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
25 }
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
26
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
27 static char *load_file(const char *path)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
28 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
29 FILE *f = fopen(path, "r");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
30 if (!f) return NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
31
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
32 fseek(f, 0, SEEK_END);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
33 long size = ftell(f);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
34 fseek(f, 0, SEEK_SET);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
35
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
36 char *content = malloc(size + 1);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
37 fread(content, 1, size, f);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
38 content[size] = '\0';
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
39 fclose(f);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
40 return content;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
41 }
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
42
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
43 int main(int argc, char **argv)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
44 {
198
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
45 // Try to load .env file - check multiple locations for bazel runfiles
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
46 char *env_content = load_file(".env");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
47 if (!env_content)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
48 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
49 env_content = load_file("zenbu/.env"); // bazel runfiles path
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
50 }
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
51 if (!env_content)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
52 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
53 env_content = load_file("../.env");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
54 }
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
55 if (!env_content)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
56 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
57 env_content = load_file("../../.env");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
58 }
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
59
198
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
60 char *access_key = NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
61 char *secret_key = NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
62
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
63 if (env_content)
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
64 {
198
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
65 access_key = parse_env_value(env_content, "AWS_MRJUNEJUNE_ACCESS_KEY");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
66 secret_key = parse_env_value(env_content, "AWS_MRJUNEJUNE_SECRET_ACCESS_KEY");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
67 free(env_content);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
68 }
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
69
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
70 // Fall back to environment variables
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
71 if (!access_key) access_key = getenv("AWS_ACCESS_KEY_ID") ? strdup(getenv("AWS_ACCESS_KEY_ID")) : NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
72 if (!secret_key) secret_key = getenv("AWS_SECRET_ACCESS_KEY") ? strdup(getenv("AWS_SECRET_ACCESS_KEY")) : NULL;
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
73
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
74 if (!access_key || !secret_key)
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
75 {
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
76 printf("Missing credentials. Set in .env file or environment:\n");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
77 printf(" AWS_MRJUNEJUNE_ACCESS_KEY / AWS_ACCESS_KEY_ID\n");
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
78 printf(" AWS_MRJUNEJUNE_SECRET_ACCESS_KEY / AWS_SECRET_ACCESS_KEY\n");
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
79 return 1;
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
80 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
81
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
82 S3_Config config = {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
83 .access_key_id = access_key,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
84 .secret_access_key = secret_key,
198
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
85 .region = "us-west-2",
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
86 .bucket = "mrjunejune",
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
87 .endpoint = NULL,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
88 .use_path_style = FALSE
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
89 };
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
90
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
91 printf("S3 Uploader Test\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
92 printf("================\n");
198
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
93 printf("Region: %s\n", config.region);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
94 printf("Bucket: %s\n", config.bucket);
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
95 printf("\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
96
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
97 // Test 1: Upload string data
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
98 printf("Test 1: Uploading string data...\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
99 const char *test_data = "Hello from S3 uploader test!";
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
100 S3_Result result = S3_Upload_Data(&config,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
101 (const uint8 *)test_data,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
102 strlen(test_data),
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
103 "test/hello.txt",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
104 "text/plain");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
105 if (result.success)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
106 {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
107 printf(" SUCCESS! ETag: %s\n", result.etag ? result.etag : "(none)");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
108 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
109 else
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
110 {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
111 printf(" FAILED! Status: %d, Error: %s\n",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
112 result.status_code,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
113 result.error_message ? result.error_message : "(unknown)");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
114 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
115 S3_Result_Destroy(&result);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
116
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
117 // Test 2: Content type detection
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
118 printf("\nTest 2: Content type detection...\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
119 printf(" .html -> %s\n", S3_Guess_Content_Type("page.html"));
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
120 printf(" .png -> %s\n", S3_Guess_Content_Type("image.png"));
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
121 printf(" .json -> %s\n", S3_Guess_Content_Type("data.json"));
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
122 printf(" .xyz -> %s\n", S3_Guess_Content_Type("unknown.xyz"));
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
123
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
124 // Test 3: Generate presigned PUT URL
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
125 printf("\nTest 3: Generating presigned PUT URL...\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
126 S3_Presigned_URL put_url = S3_Presign_Put(&config,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
127 "uploads/client-upload.png",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
128 "image/png",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
129 3600); // 1 hour
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
130 if (put_url.success)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
131 {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
132 printf(" SUCCESS!\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
133 printf(" URL: %s\n", put_url.url);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
134 printf("\n Client can upload with:\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
135 printf(" curl -X PUT -H \"Content-Type: image/png\" --data-binary @file.png \"$URL\"\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
136 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
137 else
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
138 {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
139 printf(" FAILED! Error: %s\n", put_url.error_message ? put_url.error_message : "(unknown)");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
140 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
141 S3_Presigned_URL_Destroy(&put_url);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
142
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
143 // Test 4: Generate presigned GET URL
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
144 printf("\nTest 4: Generating presigned GET URL...\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
145 S3_Presigned_URL get_url = S3_Presign_Get(&config,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
146 "uploads/client-upload.png",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
147 3600); // 1 hour
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
148 if (get_url.success)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
149 {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
150 printf(" SUCCESS!\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
151 printf(" URL: %s\n", get_url.url);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
152 printf("\n Client can download with:\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
153 printf(" curl \"$URL\" -o file.png\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
154 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
155 else
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
156 {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
157 printf(" FAILED! Error: %s\n", get_url.error_message ? get_url.error_message : "(unknown)");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
158 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
159 S3_Presigned_URL_Destroy(&get_url);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
160
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
161 // Test 5: Upload file (if provided as argument)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
162 if (argc >= 3)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
163 {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
164 printf("\nTest 5: Uploading file...\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
165 printf(" Local: %s\n", argv[1]);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
166 printf(" S3 Key: %s\n", argv[2]);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
167
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
168 result = S3_Upload_File(&config, argv[1], argv[2]);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
169 if (result.success)
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
170 {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
171 printf(" SUCCESS! ETag: %s\n", result.etag ? result.etag : "(none)");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
172 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
173 else
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
174 {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
175 printf(" FAILED! Status: %d, Error: %s\n",
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
176 result.status_code,
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
177 result.error_message ? result.error_message : "(unknown)");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
178 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
179 S3_Result_Destroy(&result);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
180 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
181 else
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
182 {
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
183 printf("\nTest 5: Skipped (no file path provided)\n");
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
184 printf(" Usage: %s <local_file> <s3_key>\n", argv[0]);
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
185 }
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
186
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
187 printf("\nDone!\n");
198
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
188
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
189 free(access_key);
008ca7780c8a S3 upload got it to work.
MrJuneJune <me@mrjunejune.com>
parents: 196
diff changeset
190 free(secret_key);
196
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
191 return 0;
83f16548ba41 [AI] Adding s3 bucket uploader code using Seobeo.
MrJuneJune <me@mrjunejune.com>
parents:
diff changeset
192 }