Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit3ba43be13812acf9b8d12186d74468cd0e295b79 (patch)
Author
 Haelwenn (lanodan) Monnier <contact@hacktivis.me>
2019-05-11 07:57:07 +0200
Committer
 Haelwenn (lanodan) Monnier <contact@hacktivis.me>
2019-05-11 08:01:47 +0200
Filesdcaa83a5de7b43045e91a9231786bacde2d2d539
goodwolf-3ba43be13812acf9b8d12186d74468cd0e295b79.tar
goodwolf-3ba43be13812acf9b8d12186d74468cd0e295b79.tar.gz
goodwolf-3ba43be13812acf9b8d12186d74468cd0e295b79.zip
Parente440a33e371d5741a3f49bc44727665adabbe023 (diff)
Add a simple way to fix the URL
It tries to load it as a file before trying a URL to avoid loading something meant as local. Closes: https://gitlab.com/lanodan/badWolf/issues/6
3 files changed, 34 insertions, 5 deletions
-rw-r--r--Makefile2
-rw-r--r--badwolf.12
-rw-r--r--badwolf.c35
diff --git a/Makefile b/Makefile
index 74ddedd..7bd30db 100644
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,7 @@ TRANS = fr.mo
CC = cc
CFLAGS = -g -Wall -Wextra
-CDEPS = `pkg-config --cflags $(DEPS)` -DDATADIR=\"$(DATADIR)\" -DPACKAGE=\"$(PACKAGE)\"
+CDEPS = `pkg-config --cflags $(DEPS)` -DDATADIR=\"$(DATADIR)\" -DPACKAGE=\"$(PACKAGE)\" -D_DEFAULT_SOURCE
LIBS = `pkg-config --libs $(DEPS)`
all: $(OBJS) $(TRANS)
diff --git a/badwolf.1 b/badwolf.1
index f039518..0d0d75a 100644
--- a/badwolf.1
+++ b/badwolf.1
@@ -9,7 +9,7 @@
.Sh SYNOPSIS
.Nm
.Op Ar webkit/gtk options
-.Op Ar url
+.Op Ar url or path
.Sh DESCRIPTION
.Nm
is a minimalist browser that care about privacy, it is based on WebKitGTK and thus also accepts WebKitGTK (and depdendencies) flags and environment variables, unfortunately there doesn't seems to be manpages for theses.
diff --git a/badwolf.c b/badwolf.c
index 1cdaab6..abc0fef 100644
--- a/badwolf.c
+++ b/badwolf.c
@@ -8,6 +8,7 @@
#include <glib/gprintf.h> /* g_fprintf() */
#include <gtk/gtk.h>
#include <locale.h> /* LC_* */
+#include <stdlib.h> /* realpath() */
#include <webkit2/webkit2.h>
const gchar *homepage = "https://hacktivis.me/projects/badwolf";
@@ -36,6 +37,7 @@ struct Client
GtkWidget *search;
};
+gchar *ensure_uri_scheme(gchar *text);
static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data);
static gboolean
commonCb_key_press_event(struct Window *window, GdkEvent *event, struct Client *browser);
@@ -80,6 +82,33 @@ static void
notebookCb_switch__page(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data);
gint get_tab_position(GtkContainer *notebook, GtkWidget *child);
+gchar *
+ensure_uri_scheme(gchar *text)
+{
+ if(text == NULL) return "about:blank";
+
+ char *scheme = g_uri_parse_scheme(text);
+
+ if(scheme != NULL)
+ return text;
+ else
+ {
+ gchar *f;
+ char *path;
+ path = realpath(text, NULL);
+
+ if(path != NULL)
+ {
+ f = g_strdup_printf("file://%s", path);
+ free(path);
+ }
+ else
+ f = g_strdup_printf("http://%s", text);
+
+ return f;
+ }
+}
+
static void
badwolf_about_dialog(GtkWindow *main_window)
{
@@ -425,10 +454,10 @@ WebViewCb_create(WebKitWebView *related_web_view,
static gboolean
locationCb_activate(GtkEntry *location, gpointer user_data)
{
- const char *target_url;
+ char *target_url;
struct Client *browser = (struct Client *)user_data;
- target_url = gtk_entry_get_text(location);
+ target_url = ensure_uri_scheme((char *)gtk_entry_get_text(location));
if(target_url != NULL) webkit_web_view_load_uri(browser->webView, target_url);
@@ -502,7 +531,7 @@ struct Client *
new_browser(struct Window *window, gchar *target_url, WebKitWebView *related_web_view)
{
struct Client *browser = g_malloc(sizeof(struct Client));
- if(target_url == NULL) target_url = "about:blank";
+ target_url = ensure_uri_scheme(target_url);
browser->window = window;
browser->box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);