From bba2ad9cdad7c7c6a82bd4c020d5e7645e4995d5 Mon Sep 17 00:00:00 2001 From: nekobit Date: Sat, 23 Jul 2022 05:32:17 +0000 Subject: [PATCH] More perl shit FossilOrigin-Name: 3e3d09e82d3730e070a60b59be3c4ad69c1f3c965c3bf027673e9a3811825eb6 --- perl/l10n.pm | 2 ++ perl/main.pl | 11 +++++---- src/cookie.c | 32 ++++++++++++++++++++++++++ src/cookie.h | 3 +++ src/local_config.c | 48 +++++++++++++++++++++++++++++++++++++++ src/local_config.h | 3 +++ src/query.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++ src/query.h | 5 +++++ src/session.c | 45 +++++-------------------------------- 9 files changed, 160 insertions(+), 45 deletions(-) create mode 100644 src/local_config.c diff --git a/perl/l10n.pm b/perl/l10n.pm index 67c50fc..e69fee3 100644 --- a/perl/l10n.pm +++ b/perl/l10n.pm @@ -1,5 +1,7 @@ package l10n; +use Exporter 'import'; + our @EXPORT = qw( %L10N ); our %L10N = ( diff --git a/perl/main.pl b/perl/main.pl index 77cac12..548227c 100644 --- a/perl/main.pl +++ b/perl/main.pl @@ -2,7 +2,7 @@ use strict; use warnings; # Modules use Template; -use l10n; +use l10n qw( %L10N ); my $template = Template->new( { @@ -17,13 +17,12 @@ sub base_page my ($ssn, $data) = @_; my $result; - my $vars = { - # L10N => L10N, + my %vars = ( prefix => '', - lang => sub { $l10n::L10N{'EN_US'}{shift(@_)} }, - }; + lang => sub { $L10N{'EN_US'}->{shift(@_)} }, + ); - $template->process(\$data, $vars, \$result) || + $template->process(\$data, \%vars, \$result) || return $template->error(); $result; diff --git a/src/cookie.c b/src/cookie.c index 6be7e9a..dec504e 100644 --- a/src/cookie.c +++ b/src/cookie.c @@ -164,3 +164,35 @@ int cookie_get_val(char* src, char* key, struct http_cookie_info* info) return 1; } + +HV* perlify_cookies(struct cookie_values* cookies) +{ + HV* ssn_cookies_hv = newHV(); + + hv_stores(ssn_cookies_hv, "lang", newSViv(keyint(cookies->lang))); + hv_stores(ssn_cookies_hv, "interact_img", newSViv(keyint(cookies->interact_img))); + hv_stores(ssn_cookies_hv, "themeclr", newSViv(keyint(cookies->themeclr))); + hv_stores(ssn_cookies_hv, "jsactions", newSViv(keyint(cookies->jsactions))); + hv_stores(ssn_cookies_hv, "jsreply", newSViv(keyint(cookies->jsreply))); + hv_stores(ssn_cookies_hv, "jslive", newSViv(keyint(cookies->jslive))); + hv_stores(ssn_cookies_hv, "js", newSViv(keyint(cookies->js))); + hv_stores(ssn_cookies_hv, "interact_img", newSViv(keyint(cookies->interact_img))); + hv_stores(ssn_cookies_hv, "statattachments", newSViv(keyint(cookies->stat_attachments))); + hv_stores(ssn_cookies_hv, "statgreentexts", newSViv(keyint(cookies->stat_greentexts))); + hv_stores(ssn_cookies_hv, "statdope", newSViv(keyint(cookies->stat_dope))); + hv_stores(ssn_cookies_hv, "statoneclicksoftware", newSViv(keyint(cookies->stat_oneclicksoftware))); + hv_stores(ssn_cookies_hv, "statemojolikes", newSViv(keyint(cookies->stat_emojo_likes))); + hv_stores(ssn_cookies_hv, "stathidemuted", newSViv(keyint(cookies->stat_hide_muted))); + hv_stores(ssn_cookies_hv, "instanceshowshoutbox", newSViv(keyint(cookies->instance_show_shoutbox))); + hv_stores(ssn_cookies_hv, "instancepanel", newSViv(keyint(cookies->instance_panel))); + hv_stores(ssn_cookies_hv, "notifembed", newSViv(keyint(cookies->notif_embed))); + hv_stores(ssn_cookies_hv, "access_token", newSVpv(keystr(cookies->access_token), 0)); + hv_stores(ssn_cookies_hv, "logged_in", newSVpv(keystr(cookies->logged_in), 0)); + hv_stores(ssn_cookies_hv, "theme", newSVpv(keystr(cookies->theme), 0)); + hv_stores(ssn_cookies_hv, "instance_url", newSVpv(keystr(cookies->instance_url), 0)); + hv_stores(ssn_cookies_hv, "background_url", newSVpv(keystr(cookies->background_url), 0)); + hv_stores(ssn_cookies_hv, "client_id", newSVpv(keystr(cookies->client_id), 0)); + hv_stores(ssn_cookies_hv, "client_secret", newSVpv(keystr(cookies->client_secret), 0)); + + return ssn_cookies_hv; +} diff --git a/src/cookie.h b/src/cookie.h index a9b4e39..77ace71 100644 --- a/src/cookie.h +++ b/src/cookie.h @@ -19,6 +19,7 @@ #ifndef COOKIE_H #define COOKIE_H #include +#include "global_perl.h" #include "key.h" struct cookie_values @@ -61,4 +62,6 @@ char* parse_cookies(char* begin, struct http_cookie_info* info); char* read_cookies_env(FCGX_Request* req, struct cookie_values* cookies); int cookie_get_val(char* src, char* key, struct http_cookie_info* info); +HV* perlify_cookies(struct cookie_values* cookies); + #endif // COOKIE_H diff --git a/src/local_config.c b/src/local_config.c new file mode 100644 index 0000000..2bfc3a5 --- /dev/null +++ b/src/local_config.c @@ -0,0 +1,48 @@ +/* + * Treebird - Lightweight frontend for Pleroma + * Copyright (C) 2022 Nekobit + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#include "global_perl.h" +#include "local_config.h" + +HV* perlify_config(struct local_config* config) +{ + HV* ssn_config_hv = newHV(); + + hv_stores(ssn_config_hv, "logged_in", newSVpv(config->logged_in, 0)); + hv_stores(ssn_config_hv, "theme", newSVpv(config->theme, 0)); + hv_stores(ssn_config_hv, "background_url", newSVpv(config->background_url, 0)); + hv_stores(ssn_config_hv, "lang", newSViv(config->lang)); + hv_stores(ssn_config_hv, "themeclr", newSViv(config->themeclr)); + hv_stores(ssn_config_hv, "jsactions", newSViv(config->jsactions)); + hv_stores(ssn_config_hv, "jslive", newSViv(config->jslive)); + hv_stores(ssn_config_hv, "js", newSViv(config->js)); + hv_stores(ssn_config_hv, "interact_img", newSViv(config->interact_img)); + hv_stores(ssn_config_hv, "stat_attachments", newSViv(config->stat_attachments)); + hv_stores(ssn_config_hv, "stat_greentexts", newSViv(config->stat_greentexts)); + hv_stores(ssn_config_hv, "stat_dope", newSViv(config->stat_dope)); + hv_stores(ssn_config_hv, "stat_oneclicksoftware", newSViv(config->stat_oneclicksoftware)); + hv_stores(ssn_config_hv, "stat_emojo_likes", newSViv(config->stat_emojo_likes)); + hv_stores(ssn_config_hv, "stat_hide_muted", newSViv(config->stat_hide_muted)); + hv_stores(ssn_config_hv, "instance_show_shoutbox", newSViv(config->instance_show_shoutbox)); + hv_stores(ssn_config_hv, "instance_panel", newSViv(config->instance_panel)); + hv_stores(ssn_config_hv, "notif_embed", newSViv(config->notif_embed)); + hv_stores(ssn_config_hv, "sidebar_opacity", newSViv(config->sidebar_opacity)); + + return ssn_config_hv; +} + diff --git a/src/local_config.h b/src/local_config.h index 3eb092f..e1b0578 100644 --- a/src/local_config.h +++ b/src/local_config.h @@ -18,6 +18,7 @@ #ifndef LOCAL_CONFIG_H #define LOCAL_CONFIG_H +#include "global_perl.h" #include "query.h" struct local_config @@ -44,4 +45,6 @@ struct local_config int sidebar_opacity; }; +HV* perlify_config(struct local_config* config); + #endif // LOCAL_CONFIG_H diff --git a/src/query.c b/src/query.c index cc62c1f..7968cce 100644 --- a/src/query.c +++ b/src/query.c @@ -262,3 +262,59 @@ void free_files(struct file_array* files) } free(content); } + +HV* perlify_post_values(struct post_values* post) +{ + HV* ssn_post_hv = newHV(); + + // This ugly... + hv_stores(ssn_post_hv, "theme", newSVpv(keystr(post->theme), 0)); + hv_stores(ssn_post_hv, "themeclr", newSViv(keyint(post->themeclr))); + hv_stores(ssn_post_hv, "lang", newSViv(keyint(post->lang))); + hv_stores(ssn_post_hv, "title", newSViv(keyint(post->title))); + hv_stores(ssn_post_hv, "jsactions", newSViv(keyint(post->jsactions))); + hv_stores(ssn_post_hv, "jsreply", newSViv(keyint(post->jsreply))); + hv_stores(ssn_post_hv, "jslive", newSViv(keyint(post->jslive))); + hv_stores(ssn_post_hv, "js", newSViv(keyint(post->js))); + hv_stores(ssn_post_hv, "interact_img", newSViv(keyint(post->interact_img))); + hv_stores(ssn_post_hv, "stat_attachments", newSViv(keyint(post->stat_attachments))); + hv_stores(ssn_post_hv, "stat_greentexts", newSViv(keyint(post->stat_greentexts))); + hv_stores(ssn_post_hv, "stat_dope", newSViv(keyint(post->stat_dope))); + hv_stores(ssn_post_hv, "stat_oneclicksoftware", newSViv(keyint(post->stat_oneclicksoftware))); + hv_stores(ssn_post_hv, "stat_emojo_likes", newSViv(keyint(post->stat_emojo_likes))); + hv_stores(ssn_post_hv, "stat_hide_muted", newSViv(keyint(post->stat_hide_muted))); + hv_stores(ssn_post_hv, "instance_show_shoutbox", newSViv(keyint(post->instance_show_shoutbox))); + hv_stores(ssn_post_hv, "instance_panel", newSViv(keyint(post->instance_panel))); + hv_stores(ssn_post_hv, "notif_embed", newSViv(keyint(post->notif_embed))); + hv_stores(ssn_post_hv, "set", newSViv(keyint(post->set))); + hv_stores(ssn_post_hv, "only_media", newSViv(keyint(post->only_media))); + hv_stores(ssn_post_hv, "replies_only", newSViv(keyint(post->replies_only))); + hv_stores(ssn_post_hv, "replies_policy", newSViv(keyint(post->replies_policy))); + hv_stores(ssn_post_hv, "emojoindex", newSViv(keyint(post->emojoindex))); + hv_stores(ssn_post_hv, "sidebar_opacity", newSViv(keyint(post->sidebar_opacity))); + hv_stores(ssn_post_hv, "file_ids", newSVpv(keystr(post->file_ids), 0)); + hv_stores(ssn_post_hv, "content", newSVpv(keystr(post->content), 0)); + hv_stores(ssn_post_hv, "itype", newSVpv(keystr(post->itype), 0)); + hv_stores(ssn_post_hv, "id", newSVpv(keystr(post->id), 0)); + hv_stores(ssn_post_hv, "username", newSVpv(keystr(post->username), 0)); + hv_stores(ssn_post_hv, "password", newSVpv(keystr(post->password), 0)); + hv_stores(ssn_post_hv, "replyid", newSVpv(keystr(post->replyid), 0)); + hv_stores(ssn_post_hv, "visibility", newSVpv(keystr(post->visibility), 0)); + hv_stores(ssn_post_hv, "instance", newSVpv(keystr(post->instance), 0)); + hv_stores(ssn_post_hv, "min_id", newSVpv(keystr(post->min_id), 0)); + hv_stores(ssn_post_hv, "max_id", newSVpv(keystr(post->max_id), 0)); + hv_stores(ssn_post_hv, "start_id", newSVpv(keystr(post->start_id), 0)); + + return ssn_post_hv; +} + +HV* perlify_get_values(struct get_values* get) +{ + HV* ssn_query_hv = newHV(); + + hv_stores(ssn_query_hv, "offset", newSVpv(keystr(get->offset), 0)); + hv_stores(ssn_query_hv, "query", newSVpv(keystr(get->query), 0)); + hv_stores(ssn_query_hv, "code", newSVpv(keystr(get->code), 0)); + + return ssn_query_hv; +} diff --git a/src/query.h b/src/query.h index 8354ccb..b78dfde 100644 --- a/src/query.h +++ b/src/query.h @@ -18,6 +18,7 @@ #ifndef QUERY_H #define QUERY_H +#include "global_perl.h" #include #include #include "key.h" @@ -89,4 +90,8 @@ char* try_handle_post(FCGX_Request* req, void (*call)(struct http_query_info*, v void free_files(struct file_array* files); +// Perl stuff +HV* perlify_post_values(struct post_values* post); +HV* perlify_get_values(struct get_values* get); + #endif // QUERY_H diff --git a/src/session.c b/src/session.c index 44f1f3d..ef7557b 100644 --- a/src/session.c +++ b/src/session.c @@ -30,52 +30,19 @@ const char* const get_token(struct session* ssn) return keystr(ssn->cookies.access_token); } -static HV* perlify_post_values(struct post_values* post) -{ -} - -static HV* perlify_get_values(struct get_values* get) -{ -} - -static HV* perlify_config(struct local_config* config) -{ - HV* ssn_config_hv = newHV(); - - hv_stores(ssn_config_hv, "logged_in", newSVpv(config->logged_in, 0)); - hv_stores(ssn_config_hv, "theme", newSVpv(config->theme, 0)); - hv_stores(ssn_config_hv, "background_url", newSVpv(config->background_url, 0)); - hv_stores(ssn_config_hv, "lang", newSViv(config->lang)); - hv_stores(ssn_config_hv, "themeclr", newSViv(config->themeclr)); - hv_stores(ssn_config_hv, "jsactions", newSViv(config->jsactions)); - hv_stores(ssn_config_hv, "jslive", newSViv(config->jslive)); - hv_stores(ssn_config_hv, "js", newSViv(config->js)); - hv_stores(ssn_config_hv, "interact_img", newSViv(config->interact_img)); - hv_stores(ssn_config_hv, "stat_attachments", newSViv(config->stat_attachments)); - hv_stores(ssn_config_hv, "stat_greentexts", newSViv(config->stat_greentexts)); - hv_stores(ssn_config_hv, "stat_dope", newSViv(config->stat_dope)); - hv_stores(ssn_config_hv, "stat_oneclicksoftware", newSViv(config->stat_oneclicksoftware)); - hv_stores(ssn_config_hv, "stat_emojo_likes", newSViv(config->stat_emojo_likes)); - hv_stores(ssn_config_hv, "stat_hide_muted", newSViv(config->stat_hide_muted)); - hv_stores(ssn_config_hv, "instance_show_shoutbox", newSViv(config->instance_show_shoutbox)); - hv_stores(ssn_config_hv, "instance_panel", newSViv(config->instance_panel)); - hv_stores(ssn_config_hv, "notif_embed", newSViv(config->notif_embed)); - hv_stores(ssn_config_hv, "sidebar_opacity", newSViv(config->sidebar_opacity)); - - return ssn_config_hv; -} - HV* perlify_session(struct session* ssn) { HV* ssn_hv = newHV(); hv_stores(ssn_hv, "logged_in", newSVuv(ssn->logged_in)); -// HV* ssn_post_values = perlify_post_values(&(ssn->post)); -// HV* ssn_get_values = perlify_get_values(&(ssn->query)); -// HV* ssn_get_values = perlify_cookie_values(&(ssn->query)) + HV* ssn_post_values = perlify_post_values(&(ssn->post)); + HV* ssn_get_values = perlify_get_values(&(ssn->query)); + HV* ssn_cookie_values = perlify_cookies(&(ssn->cookies)); // Config HV* ssn_config = perlify_config(&(ssn->config)); hv_stores(ssn_hv, "config", newRV_inc((SV*)ssn_config)); - + hv_stores(ssn_hv, "cookies", newRV_inc((SV*)ssn_cookie_values)); + hv_stores(ssn_hv, "query", newRV_inc((SV*)ssn_get_values)); + hv_stores(ssn_hv, "post", newRV_inc((SV*)ssn_post_values)); return ssn_hv; }