tazweb rev 176

New way to handle bookmarks (more secure and integrated cmdline functions
author Christophe Lincoln <pankso@slitaz.org>
date Fri Mar 10 11:53:18 2017 +0100 (2017-03-10)
parents f9c2b5aeacbd
children 1603951a52b8
files .hgignore Makefile data/bookmarks.cgi src/main.c tazweb-helper
line diff
     1.1 --- a/.hgignore	Sun Feb 19 18:34:15 2017 +0000
     1.2 +++ b/.hgignore	Fri Mar 10 11:53:18 2017 +0100
     1.3 @@ -1,1 +1,2 @@
     1.4 -tazweb
     1.5 +tazweb$
     1.6 +po/mo
     2.1 --- a/Makefile	Sun Feb 19 18:34:15 2017 +0000
     2.2 +++ b/Makefile	Fri Mar 10 11:53:18 2017 +0100
     2.3 @@ -49,11 +49,11 @@
     2.4  		$(DESTDIR)$(PREFIX)/share/icons/hicolor/32x32/apps \
     2.5  		$(DESTDIR)$(PREFIX)/share/applications
     2.6  	install -m 0755 $(PACKAGE) $(DESTDIR)$(PREFIX)/bin
     2.7 +	install -m 0755 $(PACKAGE)-helper $(DESTDIR)$(PREFIX)/bin
     2.8  	cp -d doc/* $(DESTDIR)$(DOCDIR)/$(PACKAGE)
     2.9  	install -m 0644 data/tazweb.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/32x32/apps
    2.10  	install -m 0644 data/tazweb.desktop $(DESTDIR)$(PREFIX)/share/applications
    2.11  	install -m 0644 data/bookmarks.txt $(DESTDIR)$(PREFIX)/share/tazweb
    2.12 -	install -m 0755 data/bookmarks.cgi $(DESTDIR)/var/www/cgi-bin
    2.13  	mkdir -p $(DESTDIR)$(PREFIX)/share/locale
    2.14  	cp -a po/mo/* $(DESTDIR)$(PREFIX)/share/locale
    2.15  
     3.1 --- a/data/bookmarks.cgi	Sun Feb 19 18:34:15 2017 +0000
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,126 +0,0 @@
     3.4 -#!/bin/sh
     3.5 -#
     3.6 -# TazWeb Bookmarks CGI handler
     3.7 -# Copyright (C) 2014 SliTaz GNU/Linux - BSD License
     3.8 -#
     3.9 -. /usr/lib/slitaz/httphelper.sh
    3.10 -
    3.11 -script="$SCRIPT_NAME"
    3.12 -home="$(GET home)"
    3.13 -user="$(basename $home)"
    3.14 -config="/home/$user/.config/tazweb"
    3.15 -bookmarks="$config/bookmarks.txt"
    3.16 -
    3.17 -# Security check
    3.18 -case $REMOTE_ADDR in
    3.19 -	127.0.0.1|\[::ffff:127.0.0.1\]) ;;
    3.20 -	*) header; echo "Security exit! Your IP: $REMOTE_ADDR"; exit 1
    3.21 -esac
    3.22 -
    3.23 -# HTML 5 header with built-in minimal CSS
    3.24 -html_header() {
    3.25 -	cat << EOT
    3.26 -<!DOCTYPE html>
    3.27 -<html lang="en">
    3.28 -<head>
    3.29 -	<meta charset="utf-8" />
    3.30 -	<title>TazWeb - Bookmarks</title>
    3.31 -	<style type="text/css">
    3.32 -		body { margin: 2% 10%; } .rm { color: #666; } ul { padding: 0; }
    3.33 -		.rm:hover { text-decoration: none; color: #B70000; }
    3.34 -		h1 { color: #666; border-bottom: 4px solid #666; }
    3.35 -		a { text-decoration: none; } a:hover { text-decoration: underline; }
    3.36 -		li { list-style-type: none; color: #666; line-height: 1.4em; padding: 0; }
    3.37 -		footer { font-size: 80%; border-top: 2px solid #666; padding: 5px 0; }
    3.38 -		textarea { width: 100%; height: 240px; font-size: 98%; }
    3.39 -	</style>
    3.40 -</head>
    3.41 -<body>
    3.42 -<section id="content">
    3.43 -
    3.44 -EOT
    3.45 -}
    3.46 -
    3.47 -# HTML 5 footer
    3.48 -html_footer() {
    3.49 -	cat << EOT
    3.50 -
    3.51 -</section>
    3.52 -
    3.53 -<footer>
    3.54 -	<a href="$script?home=$home">Bookmarks</a>
    3.55 -	- <a href="$script?raw&amp;home=$home">Raw</a>
    3.56 -	- <a href="$script?edit&amp;home=$home">Edit</a>
    3.57 -</footer>
    3.58 -
    3.59 -</body>
    3.60 -</html>
    3.61 -EOT
    3.62 -}
    3.63 -
    3.64 -# Handle GET actions: continue or exit
    3.65 -
    3.66 -case " $(GET) " in
    3.67 -	
    3.68 -	*\ edit\ *)
    3.69 -		header
    3.70 -		html_header
    3.71 -		cat << EOT
    3.72 -<h1>Bookmarks Edit</h1>
    3.73 -<form method="get" action="$script" name="edit">
    3.74 -	<input type="hidden" name="save" />
    3.75 -	<input type="hidden" name="home" value="$home" />
    3.76 -	<textarea name="content">$(cat "$bookmarks")</textarea>
    3.77 -	<p><input type="submit" value="$(gettext "Save bookmarks")" /></p>
    3.78 -</form>
    3.79 -EOT
    3.80 -		html_footer && exit 0 ;;
    3.81 -	
    3.82 -	*\ save\ *)
    3.83 -		sed "s/$(echo -en '\r') /\n/g" > ${bookmarks} << EOT
    3.84 -$(GET content)
    3.85 -EOT
    3.86 -		;;
    3.87 -	
    3.88 -	*\ raw\ *)
    3.89 -		# View bookmarks file
    3.90 -		header
    3.91 -		html_header
    3.92 -		echo '<h1>Raw Bookmarks</h1>'
    3.93 -		echo "<pre>"
    3.94 -		IFS="|"
    3.95 -		cat ${bookmarks} | cat ${bookmarks} | while read title url null
    3.96 -		do
    3.97 -			echo "$title | <a href='$url'>$url</a>"
    3.98 -		done
    3.99 -		unset IFS
   3.100 -		echo "</pre>"
   3.101 -		html_footer && exit 0 ;;
   3.102 -	
   3.103 -	*\ rm\ *)
   3.104 -		# Remove a bookmark item and continue
   3.105 -		url=$(GET rm)
   3.106 -		[ "$url" ] || continue
   3.107 -		sed -i s"#.*${url}.*##" ${bookmarks}
   3.108 -		sed -i "/^$/"d ${bookmarks} ;;
   3.109 -	
   3.110 -esac
   3.111 -
   3.112 -# Show all bookmarks
   3.113 -header
   3.114 -html_header
   3.115 -echo '<h1>TazWeb Bookmarks</h1>'
   3.116 -echo '<ul>'
   3.117 -IFS="|"
   3.118 -cat ${bookmarks} | while read title url null
   3.119 -do
   3.120 -	cat << EOT
   3.121 -	<li><a class="rm" href="?rm=$url&amp;home=$home">&otimes;<a/>
   3.122 -	<a href="${url}">${title}<a/></li>
   3.123 -EOT
   3.124 -done
   3.125 -unset IFS
   3.126 -echo '</ul>'
   3.127 -html_footer
   3.128 -
   3.129 -exit 0
     4.1 --- a/src/main.c	Sun Feb 19 18:34:15 2017 +0000
     4.2 +++ b/src/main.c	Fri Mar 10 11:53:18 2017 +0100
     4.3 @@ -19,7 +19,7 @@
     4.4  #define HOME       g_get_home_dir()
     4.5  #define CONFIG     g_strdup_printf("%s/.config/tazweb", HOME)
     4.6  #define BMTXT      g_strdup_printf("%s/bookmarks.txt", CONFIG)
     4.7 -#define BMURL      "http://localhost/cgi-bin/bookmarks.cgi"
     4.8 +#define BMURL      g_strdup_printf("%s/bookmarks.html", CONFIG)
     4.9  #define WEBHOME    "file:///usr/share/webhome/index.html"
    4.10  #define SEARCH     "http://duckduckgo.com/?q=%s&t=slitaz"
    4.11  
    4.12 @@ -154,7 +154,8 @@
    4.13  static void
    4.14  go_bookmarks_cb(GtkWidget* widget, WebKitWebView* webview)
    4.15  {
    4.16 -	uri = g_strdup_printf("%s?home=%s", BMURL, HOME);
    4.17 +	system("tazweb-helper html_bookmarks");
    4.18 +	uri = g_strdup_printf("file://%s", BMURL);
    4.19  	g_assert(uri);
    4.20  	webkit_web_view_load_uri(webview, uri);
    4.21  }
    4.22 @@ -523,8 +524,8 @@
    4.23  	
    4.24  	/* Get a default bookmarks.txt if missing */
    4.25  	if (! g_file_test(BMTXT, G_FILE_TEST_EXISTS)) {
    4.26 -		system("install -m 0777 -d $HOME/.config/tazweb");
    4.27 -		system("install -m 0666 /usr/share/tazweb/bookmarks.txt \
    4.28 +		system("install -m 0700 -d $HOME/.config/tazweb");
    4.29 +		system("install -m 0600 /usr/share/tazweb/bookmarks.txt \
    4.30  			$HOME/.config/tazweb/bookmarks.txt");
    4.31  	} 
    4.32  
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/tazweb-helper	Fri Mar 10 11:53:18 2017 +0100
     5.3 @@ -0,0 +1,92 @@
     5.4 +#!/bin/sh
     5.5 +#
     5.6 +# TazWeb Helper - Handle bookmarks (no libtaz, usable on any Linux distro)
     5.7 +#
     5.8 +
     5.9 +tazweb="$(pwd)/tazweb"
    5.10 +config="$HOME/.config/tazweb"
    5.11 +bm_txt="$config/bookmarks.txt"
    5.12 +bm_html="$config/bookmarks.html"
    5.13 +
    5.14 +help() {
    5.15 +	cat << EOT
    5.16 +
    5.17 +$(gettext "Usage:") $(basename $0) [bookmarks] --option
    5.18 +
    5.19 +$(gettext "Options:")
    5.20 +  --raw       Show raw bookmarks.txt
    5.21 +
    5.22 +EOT
    5.23 +}
    5.24 +
    5.25 +# HTML 5 header with built-in minimal CSS
    5.26 +html_header() {
    5.27 +	cat << EOT
    5.28 +<!DOCTYPE html>
    5.29 +<html lang="en">
    5.30 +<head>
    5.31 +	<meta charset="utf-8" />
    5.32 +	<title>TazWeb - Bookmarks</title>
    5.33 +	<style type="text/css">
    5.34 +		body { margin: 2% 10%; font-size: 94%; } ul { padding: 0; }
    5.35 +		h1 { color: #888; border-bottom: 4px solid #888; }
    5.36 +		ul a { text-decoration: none; } ul a:hover { text-decoration: underline; }
    5.37 +		li { list-style-type: none; color: #666; line-height: 1.4em; padding: 0; }
    5.38 +		footer { font-size: 80%; border-top: 1px solid #888; padding: 5px 0; }
    5.39 +		textarea { width: 100%; height: 240px; font-size: 98%; }
    5.40 +	</style>
    5.41 +</head>
    5.42 +<body>
    5.43 +<section id="content">
    5.44 +<h1>TazWeb Bookmarks</h1>
    5.45 +<ul>
    5.46 +EOT
    5.47 +}
    5.48 +
    5.49 +# HTML 5 footer
    5.50 +html_footer() {
    5.51 +	cat << EOT
    5.52 +</ul>
    5.53 +</section>
    5.54 +<footer>
    5.55 +	$(cat $bm_txt | wc -l) $(gettext "bookmarks")
    5.56 +</footer>
    5.57 +</body>
    5.58 +</html>
    5.59 +EOT
    5.60 +}
    5.61 +
    5.62 +# Generate bookmarks.html
    5.63 +html_bookmarks() {
    5.64 +	html_header > ${bm_html}
    5.65 +	IFS="|"
    5.66 +	cat ${bm_txt} | while read title url null
    5.67 +	do
    5.68 +		cat >> ${bm_html} << EOT
    5.69 +	<li><a href="${url}">${title}</a></li>
    5.70 +EOT
    5.71 +	done
    5.72 +	unset IFS
    5.73 +	html_footer  >> ${bm_html}
    5.74 +	# Security fix from old cgi-bin bookmarks.cgi
    5.75 +	chmod 0600 ${USER}.${USER} ${bm_txt}
    5.76 +}
    5.77 +
    5.78 +#
    5.79 +# Commands
    5.80 +#
    5.81 +case "$1" in
    5.82 +	
    5.83 +	-b|bookmarks)
    5.84 +		if [ "$raw" ]; then
    5.85 +			${tazweb} file:///${config}/bookmarks.txt &
    5.86 +		else
    5.87 +			html_bookmarks
    5.88 +			${tazweb} file:///${config}/bookmarks.html &
    5.89 +		fi ;;
    5.90 +	
    5.91 +	*_*) ${1} ;;
    5.92 +	
    5.93 +	*|-h|help) help ;;
    5.94 +
    5.95 +esac; exit 0