desktop installation and mimetypes

and more updates
This commit is contained in:
Jaromil 2011-01-12 17:02:19 +01:00
parent 626f6ea781
commit c00a1721c8
7 changed files with 311 additions and 116 deletions

View File

@ -4,14 +4,14 @@ dnl ==============================================================
AC_PREREQ([2.60])
AC_INIT([Tomb],[0.8.0],[jaromil@dyne.org],[tomb])
AC_INIT([Tomb],[0.9.0],[jaromil@dyne.org],[Tomb])
AC_CONFIG_MACRO_DIR([m4])
AC_CANONICAL_HOST
dnl backwards compatibility for autoconf >= 2.64
dnl PACKAGE_URL should be the fifth argument of AC_INIT
m4_define([AC_PACKAGE_URL], [http://crypto.dyne.org])
m4_define([AC_PACKAGE_URL], [http://tomb.dyne.org])
AC_DEFINE(PACKAGE_URL, "AC_PACKAGE_URL", [Package URL])
AC_SUBST(PACKAGE_URL, AC_PACKAGE_URL)
@ -69,6 +69,10 @@ AC_PROG_INSTALL
AC_CHECK_PROG(have_zsh,zsh,yes,no)
AC_CHECK_PROG(have_cryptsetup,cryptsetup,yes,no)
AC_CHECK_PROG(have_wipe,wipe,yes,no)
AC_CHECK_PROG(have_dcfldd,dcfldd,yes,no)
AC_CHECK_PROG(have_gksu,gksu,yes,no)
AC_CHECK_PROG(have_sudo,gksu,yes,no)
PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.16, :,
AC_MSG_ERROR([*** Gtk+2 >=2.16 development files not found!]))
@ -80,6 +84,12 @@ PKG_CHECK_MODULES(NOTIFY, libnotify, :,
AC_SUBST([NOTIFY_CFLAGS])
AC_SUBST([NOTIFY_LIBS])
PACKAGE_DATA_DIR='${prefix}/share/tomb'
AC_SUBST(PACKAGE_DATA_DIR)
# mime TODO see http://www.freedesktop.org/wiki/Specifications/AddingMIMETutor
XDG_DATA_DIR='${prefix}/share/mime/packages'
AC_SUBST(XDG_DATA_DIR)
dnl alphabetic order on dir/subdir, but Makefile sorts before everything
AC_CONFIG_FILES([
Makefile

View File

@ -1,11 +1,11 @@
bin_SCRIPTS = tomb
bin_SCRIPTS = tomb tomb-open
bin_PROGRAMS = tomb-gtk tomb-notify
bin_PROGRAMS = tomb-status tomb-notify
tomb_gtk_SOURCES = tomb-gtk.cpp
tomb_gtk_LDADD = @GTK2_LIBS@ @NOTIFY_LIBS@
tomb_gtk_CXXFLAGS = @GTK2_CFLAGS@ @NOTIFY_CFLAGS@
tomb_status_SOURCES = tomb-status.cpp
tomb_status_LDADD = @GTK2_LIBS@ @NOTIFY_LIBS@
tomb_status_CXXFLAGS = @GTK2_CFLAGS@ @NOTIFY_CFLAGS@
tomb_notify_SOURCES = tomb-notify.cpp
tomb_notify_LDADD = @NOTIFY_LIBS@

111
src/tomb
View File

@ -55,10 +55,11 @@ else
WIPE="rm -f"
fi
# usb auto detect
# usb auto detect using dmesg
# tested on ubuntu 10.04 - please test and patch on other systems if you can
ask_usbkey() {
notice "looking for key $1 on usb"
exec_as_user tomb-notify "Tomb needs a key." "Plug your usb key in the computer to open $1"
echo -n " . please insert your usb key "
plugged=false
@ -83,7 +84,7 @@ ask_usbkey() {
# get the first partition
usbpart=`dmesg |tail -n 8 | grep ' sd.:' |cut -d: -f2 |tr -d ' '`
# what that it is mounted
# wait that is mounted
mounted=false
while [ "$mounted" != "true" ]; do
cat /proc/mounts | tail -n 2 | grep -q $usbpart
@ -336,10 +337,10 @@ mount_tomb() {
notice "mounting $FILE on mountpoint $MOUNT"
if [ -z $MOUNT ]; then
error "you need to specify a MOUNTPOINT for the mount command"
exit 0
fi
if ! [ -x $MOUNT ]; then
act "mountpoint not specified, using default: /media/$FILE"
MOUNT=/media/${FILE}
mkdir -p $MOUNT
elif ! [ -x $MOUNT ]; then
error "mountpoint $MOUNT doesn't exist"
exit 0
fi
@ -413,7 +414,7 @@ mount_tomb() {
notice "encrypted storage $FILE succesfully mounted on $MOUNT"
if [ $DISPLAY ]; then
exec_as_user tomb-gtk ${FILE} ${MOUNT}
exec_as_user tomb-status ${FILE} ${MOUNT}
fi
}
@ -489,15 +490,109 @@ umount_tomb() {
Rest In Peace."
}
# install mime-types, bells and whistles for the desktop
# see http://developers.sun.com/solaris/articles/integrating_gnome.html
# and freedesktop specs
install() {
notice "Installing Tomb on your desktop"
act "updating mimetypes..."
cat <<EOF > /tmp/dyne-tomb.xml
<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/x-tomb-volume">
<comment>Tomb encrypted volume</comment>
<glob pattern="*.tomb"/>
</mime-type>
<mime-type type="application/x-tomb-key">
<comment>Tomb crypto key</comment>
<glob pattern="*.tomb.gpg"/>
</mime-type>
</mime-info>
EOF
xdg-mime install /tmp/dyne-tomb.xml
xdg-icon-resource install --context mimetypes --size 32 monmort.xpm monmort
xdg-icon-resource install --size 32 monmort.xpm dyne-monmort
rm /tmp/dyne-tomb.xml
act "updating desktop..."
cat <<EOF > /usr/share/applications/tomb.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=Tomb crypto undertaker
GenericName=Crypto undertaker
Comment=Keep your bones safe
Exec=tomb-open %U
TryExec=tomb-open
Icon=monmort.xpm
Terminal=true
Categories=Utility;Security;Archiving;Filesystem;
MimeType=application/x-tomb-volume;
EOF
update-desktop-database
act "updating menus..."
cat <<EOF > /etc/menu/tomb
?package(tomb):command="tomb" icon="/usr/share/pixmaps/monmort.xpm" needs="cryptsetup" \
section="Applications/Accessories" title="Tomb" hints="Crypto" \
hotkey="Tomb"
EOF
update-menus
act "updating mime info..."
cat <<EOF > /usr/share/mime-info/tomb.keys
# actions for encrypted tomb storage
application/x-tomb-volume:
open=tomb-open %f
view=tomb-open %f
icon-filename=monmort.xpm
short_list_application_ids_for_novice_user_level=tomb
EOF
cat <<EOF > /usr/share/mime-info/tomb.mime
# mime type for encrypted tomb storage
application/x-tomb-volume
ext: tomb
application/x-tomb-key
ext: tomb.gpg
EOF
cat <<EOF > /usr/lib/mime/packages/tomb
application/x-tomb-volume; tomb '%s'; needsterminal; priority=8
EOF
update-mime
act "updating application entry..."
cat <<EOF > /usr/share/application-registry/tomb.applications
tomb
command=tomb-open
name=Tomb - Crypto Undertaker
can_open_multiple_files=false
expects_uris=false
requires_terminal=true
mime-types=application/x-tomb-volume,application/x-tomb-key
EOF
}
case "$CMD" in
create) create_tomb ;;
format) format_tomb ;;
mount) mount_tomb ;;
open) mount_tomb ;;
umount) umount_tomb ;;
unmount) umount_tomb ;;
close) umount_tomb ;;
install) install ;;
status) tomb-status ;;
notify) tomb-notify ;;
*) error "command \"$CMD\" not recognized"
act "try -h for help"
;;

View File

@ -1,99 +0,0 @@
/* Tomb - encrypted storage undertaker
*
* (c) Copyright 2007-2011 Denis Roio <jaromil@dyne.org>
*
* This source code is free software; you can redistribute it and/or
* modify it under the terms of the GNU Public License as published
* by the Free Software Foundation; either version 3 of the License,
* or (at your option) any later version.
*
* This source code 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.
* Please refer to the GNU Public License for more details.
*
* You should have received a copy of the GNU Public License along with
* this source code; if not, write to:
* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <gtk/gtk.h>
#include <libnotify/notify.h>
/* The Tomb icon is an artwork by Jordi aka MonMort
a nomadic graffiti artist from Barcelona */
#include <monmort.xpm>
GtkStatusIcon *status_tomb;
GtkMenu *menu_tomb;
NotifyNotification *notice;
GError *error;
// forward declaration of callbacks
gboolean left_click(GtkWidget *w, GdkEvent *e);
gboolean cb_close(GtkWidget *w, GdkEvent *e);
int main(int argc, char **argv) {
GObject *tray;
GdkPixbuf *pb_monmort;
GtkWidget *menu_close;
gint menu_x, menu_y;
gboolean push_in = true;
char tomb_file[512];
gtk_set_locale();
gtk_init(&argc, &argv);
// libnotify
notify_init(PACKAGE);
// set and show the status icon
pb_monmort = gdk_pixbuf_new_from_xpm_data(monmort);
status_tomb = gtk_status_icon_new_from_pixbuf(pb_monmort);
// gtk_status_icon_set_name(status_tomb, "tomb");
gtk_status_icon_set_title(status_tomb, "Tomb");
gtk_status_icon_set_tooltip_text (status_tomb, "Tomb - crypto undertaker");
// gtk_status_icon_set_blinking(status_tomb, true);
menu_tomb = (GtkMenu*) gtk_menu_new();
menu_close = gtk_menu_item_new_with_label("Close");
gtk_menu_attach(menu_tomb, menu_close, 0, 1, 0, 1);
g_signal_connect_swapped(menu_close, "activate", G_CALLBACK(cb_close), NULL);
gtk_widget_show(menu_close);
g_signal_connect_swapped(status_tomb, "activate", G_CALLBACK(left_click), menu_tomb);
notice = notify_notification_new_with_status_icon
("Tomb encrypted undertaker",
"We started digging out bones",
NULL, status_tomb);
notify_notification_set_icon_from_pixbuf(notice, pb_monmort);
notify_notification_show(notice, &error);
gtk_main();
notify_uninit();
exit(0);
}
// callbacks
gboolean left_click(GtkWidget *w, GdkEvent *e) {
gtk_menu_popup(menu_tomb, NULL, NULL,
gtk_status_icon_position_menu, status_tomb,
1, gtk_get_current_event_time());
}
gboolean cb_close(GtkWidget *w, GdkEvent *e) {
execlp("tomb","tomb","-S","umount",NULL);
gtk_main_quit();
}

View File

@ -63,8 +63,6 @@ int main(int argc, char **argv) {
notify_uninit();
usleep(.5);
exit(0);
}

12
src/tomb-open Executable file
View File

@ -0,0 +1,12 @@
#!/bin/sh
# startup wrapper to open tombs
# got a tomb as argument
if [ $@ ]; then
tomb -S open $@
exit $?
fi
tomb -h
sleep 10

179
src/tomb-status.cpp Normal file
View File

@ -0,0 +1,179 @@
/* Tomb - encrypted storage undertaker
*
* (c) Copyright 2007-2011 Denis Roio <jaromil@dyne.org>
*
* This source code is free software; you can redistribute it and/or
* modify it under the terms of the GNU Public License as published
* by the Free Software Foundation; either version 3 of the License,
* or (at your option) any later version.
*
* This source code 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.
* Please refer to the GNU Public License for more details.
*
* You should have received a copy of the GNU Public License along with
* this source code; if not, write to:
* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <gtk/gtk.h>
#include <libnotify/notify.h>
/* The Tomb icon is an artwork by Jordi aka MonMort
a nomadic graffiti artist from Barcelona */
#include <monmort.xpm>
GdkPixbuf *pb_monmort;
GtkStatusIcon *status_tomb;
GtkMenu *menu_left, *menu_right;
NotifyNotification *notice;
GError *error;
char filename[256];
char mountpoint[256];
// forward declaration of callbacks
gboolean left_click(GtkWidget *w, GdkEvent *e);
gboolean cb_view(GtkWidget *w, GdkEvent *e);
gboolean cb_close(GtkWidget *w, GdkEvent *e);
gboolean right_click(GtkWidget *w, GdkEvent *e);
gboolean cb_about(GtkWidget *w, GdkEvent *e);
int main(int argc, char **argv) {
GObject *tray;
GtkWidget *item_close, *item_view, *item_about;
gint menu_x, menu_y;
gboolean push_in = true;
char tomb_file[512];
gtk_set_locale();
gtk_init(&argc, &argv);
// get the information from commandline
if(argc<3) sprintf(mountpoint,"unknown");
else snprintf(mountpoint,255, "%s", argv[2]);
if(argc<2) sprintf(filename, "unknown");
else snprintf(filename,255, "%s", argv[1]);
// libnotify
notify_init(PACKAGE);
// set and show the status icon
pb_monmort = gdk_pixbuf_new_from_xpm_data(monmort);
status_tomb = gtk_status_icon_new_from_pixbuf(pb_monmort);
// gtk_status_icon_set_name(status_tomb, "tomb");
gtk_status_icon_set_title(status_tomb, "Tomb");
gtk_status_icon_set_tooltip_text (status_tomb, "Tomb - crypto undertaker");
// LEFT click menu
menu_left = (GtkMenu*) gtk_menu_new();
// view
item_view = gtk_menu_item_new_with_label("View");
gtk_menu_attach(menu_left, item_view, 0, 1, 0, 1);
g_signal_connect_swapped(item_view, "activate", G_CALLBACK(cb_view), NULL);
gtk_widget_show(item_view);
// close
item_close = gtk_menu_item_new_with_label("Close");
gtk_menu_attach(menu_left, item_close, 0, 1, 1, 2);
g_signal_connect_swapped(item_close, "activate", G_CALLBACK(cb_close), NULL);
gtk_widget_show(item_close);
// connect it
g_signal_connect_swapped(status_tomb, "activate", G_CALLBACK(left_click), menu_left);
// RIGHT click menu
menu_right = (GtkMenu*) gtk_menu_new();
// about
item_about = gtk_menu_item_new_with_label("About");
gtk_menu_attach(menu_right, item_about, 0, 1, 0, 1);
g_signal_connect_swapped(item_about, "activate", G_CALLBACK(cb_about), NULL);
g_signal_connect_swapped(item_about, "popup-menu", G_CALLBACK(cb_about), NULL);
gtk_widget_show(item_about);
// connect it
g_signal_connect_swapped(status_tomb, "popup-menu", G_CALLBACK(right_click), menu_right);
// status icon
notice = notify_notification_new_with_status_icon
("Tomb encrypted undertaker",
"We started digging out bones",
NULL, status_tomb);
notify_notification_set_icon_from_pixbuf(notice, pb_monmort);
notify_notification_show(notice, &error);
gtk_main();
notify_uninit();
exit(0);
}
// callbacks left click
gboolean left_click(GtkWidget *w, GdkEvent *e) {
gtk_menu_popup(menu_left, NULL, NULL,
gtk_status_icon_position_menu, status_tomb,
1, gtk_get_current_event_time());
}
gboolean cb_view(GtkWidget *w, GdkEvent *e) {
GtkWidget *dialog =
gtk_message_dialog_new (NULL,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_CLOSE,
"Tomb '%s' open on '%s'", filename, mountpoint);
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
gboolean cb_close(GtkWidget *w, GdkEvent *e) {
execlp("tomb","tomb","-S","umount",NULL);
gtk_main_quit();
}
// callbacks right click
gboolean right_click(GtkWidget *w, GdkEvent *e) {
gtk_menu_popup(menu_right, NULL, NULL,
gtk_status_icon_position_menu, status_tomb,
1, gtk_get_current_event_time());
}
gboolean cb_about(GtkWidget *w, GdkEvent *e) {
const gchar *authors[] = {"Denis Roio aka Jaromil - http://jaromil.dyne.org",NULL};
const gchar *artists[] = {"Jordi aka MonMort - http://monmort.blogspot.org",
"Gabriele Zaverio aka Asbesto - http://freaknet.org/asbesto",
NULL};
GtkWidget *dialog = gtk_about_dialog_new();
gtk_about_dialog_set_name(GTK_ABOUT_DIALOG(dialog), PACKAGE);
gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(dialog), VERSION);
gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(dialog),
"(C)2007-2010 Denis Roio aka Jaromil");
gtk_about_dialog_set_artists(GTK_ABOUT_DIALOG(dialog), artists);
gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(dialog), authors);
gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(dialog),
"The Crypto Undertaker\n"
"\n"
"This program helps people keeping their bones together by taking care of their private data inside encrypted storage filesystems that are easy to access and transport.\n"
"\n"
"The level of security provided by this program is fairly good: it uses an accelerated AES/SHA256 (cbc-essiv) to access the data on the fly, as if it would be a mounted volume.\n"
"\n"
"To start digging your tomb be ready to get your hands dirty and use the commandline utility 'tomb' from a text terminal."
);
gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(dialog), PACKAGE_URL);
gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(dialog), pb_monmort);
gtk_dialog_run(GTK_DIALOG (dialog));
gtk_widget_destroy(dialog);
}