feat: remove domain field from config and derive domain from headers
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
[server]
|
[server]
|
||||||
host = 0.0.0.0
|
host = 0.0.0.0
|
||||||
port = 8087
|
port = 8087
|
||||||
domain = https://search.example.com
|
|
||||||
|
|
||||||
# Default locale (default: en_gb)
|
# Default locale (default: en_gb)
|
||||||
#locale = en_gb
|
#locale = en_gb
|
||||||
|
|||||||
@@ -65,11 +65,9 @@ int load_config(const char *filename, Config *config) {
|
|||||||
config->host[sizeof(config->host) - 1] = '\0';
|
config->host[sizeof(config->host) - 1] = '\0';
|
||||||
} else if (strcmp(key, "port") == 0) {
|
} else if (strcmp(key, "port") == 0) {
|
||||||
config->port = atoi(value);
|
config->port = atoi(value);
|
||||||
} else if (strcmp(key, "domain") == 0) {
|
|
||||||
strncpy(config->domain, value, sizeof(config->domain) - 1);
|
|
||||||
config->domain[sizeof(config->domain) - 1] = '\0';
|
|
||||||
} else if (strcmp(key, "locale") == 0) {
|
} else if (strcmp(key, "locale") == 0) {
|
||||||
strncpy(config->default_locale, value, sizeof(config->default_locale) - 1);
|
strncpy(config->default_locale, value,
|
||||||
|
sizeof(config->default_locale) - 1);
|
||||||
config->default_locale[sizeof(config->default_locale) - 1] = '\0';
|
config->default_locale[sizeof(config->default_locale) - 1] = '\0';
|
||||||
}
|
}
|
||||||
} else if (strcmp(section, "proxy") == 0) {
|
} else if (strcmp(section, "proxy") == 0) {
|
||||||
|
|||||||
33
src/Main.c
33
src/Main.c
@@ -19,17 +19,38 @@
|
|||||||
#include "Utility/Utility.h"
|
#include "Utility/Utility.h"
|
||||||
|
|
||||||
Config global_config;
|
Config global_config;
|
||||||
|
|
||||||
int handle_opensearch(UrlParams *params) {
|
int handle_opensearch(UrlParams *params) {
|
||||||
(void)params;
|
(void)params;
|
||||||
extern Config global_config;
|
|
||||||
TemplateContext ctx = new_context();
|
TemplateContext ctx = new_context();
|
||||||
context_set(&ctx, "domain", global_config.domain);
|
|
||||||
|
const char *http_host = beaker_get_header("Host");
|
||||||
|
if (http_host == NULL) {
|
||||||
|
http_host = "localhost";
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *req_scheme =
|
||||||
|
"https"; // not sure if it's a good idea to just assume https, but you
|
||||||
|
// should probably be using https for anything other than testing
|
||||||
|
// or local network anyways.
|
||||||
|
|
||||||
|
if (strncmp(http_host, "localhost", 9) == 0 ||
|
||||||
|
strncmp(http_host, "127.", 4) == 0 ||
|
||||||
|
strncmp(http_host, "192.168.", 8) == 0 ||
|
||||||
|
strncmp(http_host, "10.", 3) == 0) {
|
||||||
|
req_scheme = "http";
|
||||||
|
}
|
||||||
|
|
||||||
|
context_set(&ctx, "domain", http_host);
|
||||||
|
context_set(&ctx, "scheme", req_scheme);
|
||||||
|
|
||||||
char *rendered = render_template("opensearch.xml", &ctx);
|
char *rendered = render_template("opensearch.xml", &ctx);
|
||||||
serve_data(rendered, strlen(rendered), "application/opensearchdescription+xml");
|
serve_data(rendered, strlen(rendered),
|
||||||
|
"application/opensearchdescription+xml");
|
||||||
|
|
||||||
free(rendered);
|
free(rendered);
|
||||||
free_context(&ctx);
|
free_context(&ctx);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,7 +67,6 @@ int main() {
|
|||||||
|
|
||||||
Config cfg = {.host = DEFAULT_HOST,
|
Config cfg = {.host = DEFAULT_HOST,
|
||||||
.port = DEFAULT_PORT,
|
.port = DEFAULT_PORT,
|
||||||
.domain = "",
|
|
||||||
.default_locale = "en_gb",
|
.default_locale = "en_gb",
|
||||||
.proxy = "",
|
.proxy = "",
|
||||||
.proxy_list_file = "",
|
.proxy_list_file = "",
|
||||||
@@ -75,7 +95,8 @@ int main() {
|
|||||||
if (loaded > 0) {
|
if (loaded > 0) {
|
||||||
fprintf(stderr, "[INFO] Loaded %d locales\n", loaded);
|
fprintf(stderr, "[INFO] Loaded %d locales\n", loaded);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "[WARN] No locales loaded (make sure to run from omnisearch directory)\n");
|
fprintf(stderr, "[WARN] No locales loaded (make sure to run from "
|
||||||
|
"omnisearch directory)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
apply_engines_config(cfg.engines);
|
apply_engines_config(cfg.engines);
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
xmlns:moz="http://www.mozilla.org/2006/browser/search/">
|
xmlns:moz="http://www.mozilla.org/2006/browser/search/">
|
||||||
<ShortName>OmniSearch</ShortName>
|
<ShortName>OmniSearch</ShortName>
|
||||||
<Description>Lightweight metasearch engine</Description>
|
<Description>Lightweight metasearch engine</Description>
|
||||||
<Url type="text/html" method="get" template="{{domain}}/search?q={searchTerms}"/>
|
<Url type="text/html" method="get" template="{{scheme}}://{{domain}}/search?q={searchTerms}"/>
|
||||||
<InputEncoding>UTF-8</InputEncoding>
|
<InputEncoding>UTF-8</InputEncoding>
|
||||||
<OutputEncoding>UTF-8</OutputEncoding>
|
<OutputEncoding>UTF-8</OutputEncoding>
|
||||||
<moz:SearchForm>{{domain}}/</moz:SearchForm>
|
<moz:SearchForm>{{domain}}/</moz:SearchForm>
|
||||||
|
|||||||
Reference in New Issue
Block a user