summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2022-09-28 09:29:09 +0200
committerGravatar default2022-09-28 09:29:09 +0200
commita636cf8b25d72900892b18191e0d68de10779e90 (patch)
treedd2fa86101259a499713d810db7d360d25f27aa3
parentDelete dangling local timeline entry in timeline_admire(). (diff)
downloadpenes-snac2-a636cf8b25d72900892b18191e0d68de10779e90.tar.gz
penes-snac2-a636cf8b25d72900892b18191e0d68de10779e90.tar.xz
penes-snac2-a636cf8b25d72900892b18191e0d68de10779e90.zip
New function static_get().
-rw-r--r--data.c25
-rw-r--r--html.c42
-rw-r--r--snac.h2
-rw-r--r--xs_httpd.h2
-rw-r--r--xs_io.h11
5 files changed, 77 insertions, 5 deletions
diff --git a/data.c b/data.c
index 13cef84..b20dc9e 100644
--- a/data.c
+++ b/data.c
@@ -801,6 +801,31 @@ int actor_get(snac *snac, char *actor, d_char **data)
801} 801}
802 802
803 803
804d_char *_static_fn(snac *snac, char *id)
805/* gets the filename for a static file */
806{
807 return xs_fmt("%s/static/%s", snac->basedir, id);
808}
809
810
811int static_get(snac *snac, char *id, d_char **data, int *size)
812/* returns static content */
813{
814 xs *fn = _static_fn(snac, id);
815 FILE *f;
816 int status = 404;
817
818 *size = 0xfffffff;
819
820 if ((f = fopen(fn, "rb")) != NULL) {
821 *data = xs_read(f, size);
822 status = 200;
823 }
824
825 return status;
826}
827
828
804void enqueue_input(snac *snac, char *msg, char *req) 829void enqueue_input(snac *snac, char *msg, char *req)
805/* enqueues an input message */ 830/* enqueues an input message */
806{ 831{
diff --git a/html.c b/html.c
index 7f8e990..89df82a 100644
--- a/html.c
+++ b/html.c
@@ -207,12 +207,52 @@ d_char *html_msg_icon(snac *snac, d_char *s, char *msg)
207} 207}
208 208
209 209
210d_char *html_user_header(snac *snac, d_char *s)
211/* creates the HTML header */
212{
213 char *p, *v;
214
215 s = xs_str_cat(s, "<!DOCTYPE html>\n<html>\n<head>\n");
216 s = xs_str_cat(s, "<meta name=\"viewport\" "
217 "content=\"width=device-width, initial-scale=1\"/>\n");
218 s = xs_str_cat(s, "<meta name=\"generator\" "
219 "content=\"" USER_AGENT "\"/>\n");
220
221 /* add server CSS */
222 p = xs_dict_get(srv_config, "cssurls");
223 while (xs_list_iter(&p, &v)) {
224 xs *s1 = xs_fmt("<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\"/>\n", v);
225 s = xs_str_cat(s, s1);
226 }
227
228 /* add the user CSS */
229 {
230 xs *css = NULL;
231 int size;
232
233 if (valid_status(static_get(snac, "style.css", &css, &size))) {
234 xs *s1 = xs_fmt("<style>%s</style>\n", css);
235 s = xs_str_cat(s, s1);
236 }
237 }
238
239 {
240 xs *s1 = xs_fmt("<title>%s</title>\n", xs_dict_get(snac->config, "name"));
241 s = xs_str_cat(s, s1);
242 }
243
244 s = xs_str_cat(s, "</head>\n<body>\n");
245
246 return s;
247}
248
249
210d_char *html_timeline(snac *snac, char *list, int local) 250d_char *html_timeline(snac *snac, char *list, int local)
211/* returns the HTML for the timeline */ 251/* returns the HTML for the timeline */
212{ 252{
213 d_char *s = xs_str_new(NULL); 253 d_char *s = xs_str_new(NULL);
214 254
215 s = xs_str_cat(s, "<!DOCTYPE html>\n<html>\n"); 255 s = html_user_header(snac, s);
216 256
217 s = xs_str_cat(s, "<h1>HI</h1>\n"); 257 s = xs_str_cat(s, "<h1>HI</h1>\n");
218 258
diff --git a/snac.h b/snac.h
index b5a5a76..7cd46c7 100644
--- a/snac.h
+++ b/snac.h
@@ -78,6 +78,8 @@ int is_muted(snac *snac, char *actor);
78int actor_add(snac *snac, char *actor, char *msg); 78int actor_add(snac *snac, char *actor, char *msg);
79int actor_get(snac *snac, char *actor, d_char **data); 79int actor_get(snac *snac, char *actor, d_char **data);
80 80
81int static_get(snac *snac, char *id, d_char **data, int *size);
82
81void enqueue_input(snac *snac, char *msg, char *req); 83void enqueue_input(snac *snac, char *msg, char *req);
82void enqueue_output(snac *snac, char *msg, char *actor, int retries); 84void enqueue_output(snac *snac, char *msg, char *actor, int retries);
83 85
diff --git a/xs_httpd.h b/xs_httpd.h
index 0842e15..68f60c4 100644
--- a/xs_httpd.h
+++ b/xs_httpd.h
@@ -128,7 +128,7 @@ d_char *xs_httpd_request(FILE *f, d_char **payload, int *p_size)
128 if ((v = xs_dict_get(req, "content-length")) != NULL) { 128 if ((v = xs_dict_get(req, "content-length")) != NULL) {
129 /* if it has a payload, load it */ 129 /* if it has a payload, load it */
130 *p_size = atoi(v); 130 *p_size = atoi(v);
131 *payload = xs_read(f, *p_size); 131 *payload = xs_read(f, p_size);
132 } 132 }
133 133
134 /* is the payload form urlencoded variables? */ 134 /* is the payload form urlencoded variables? */
diff --git a/xs_io.h b/xs_io.h
index 523d207..62af82c 100644
--- a/xs_io.h
+++ b/xs_io.h
@@ -6,7 +6,7 @@
6 6
7d_char *xs_readall(FILE *f); 7d_char *xs_readall(FILE *f);
8d_char *xs_readline(FILE *f); 8d_char *xs_readline(FILE *f);
9d_char *xs_read(FILE *f, int size); 9d_char *xs_read(FILE *f, int *size);
10 10
11 11
12#ifdef XS_IMPLEMENTATION 12#ifdef XS_IMPLEMENTATION
@@ -56,16 +56,18 @@ d_char *xs_readline(FILE *f)
56} 56}
57 57
58 58
59d_char *xs_read(FILE *f, int size) 59d_char *xs_read(FILE *f, int *sz)
60/* reads up to size bytes from f */ 60/* reads up to size bytes from f */
61{ 61{
62 d_char *s; 62 d_char *s;
63 int size = *sz;
64 int rdsz = 0;
63 65
64 errno = 0; 66 errno = 0;
65 67
66 s = xs_str_new(NULL); 68 s = xs_str_new(NULL);
67 69
68 while (size != 0 && !feof(f)) { 70 while (size > 0 && !feof(f)) {
69 char tmp[2048]; 71 char tmp[2048];
70 int n, r; 72 int n, r;
71 73
@@ -76,8 +78,11 @@ d_char *xs_read(FILE *f, int size)
76 s = xs_append_m(s, tmp, r); 78 s = xs_append_m(s, tmp, r);
77 79
78 size -= r; 80 size -= r;
81 rdsz += r;
79 } 82 }
80 83
84 *sz = rdsz;
85
81 return s; 86 return s;
82} 87}
83 88