Host your own doodles with jawanndenn

Thursday, March 14. 2019

For a website where event dates are offered to a group of users who need to find those dates that most users can attend, doodles are a good solution. There are well known providers for that sort of thing like doodle.com/, dudle.inf.tu-dresden.de/ or www.dfn.de/dienstleistungen/dfnterminplaner/, with the latter two offering better privacy for european users (no transfer of data to servers in the USA).

Still, hosting your very own service is an attractive alternative. For this there is jawanndenn.de/  which can be downloaded from github.com/hartwork/jawanndenn. It is a web application written in python by Sebastian Pipping, libre software.

Installation is easy with

pip install jawanndenn

and then run it from the command line with something like

jawanndenn --host your-domain.tld --port 23456  (the port is arbitrary).
navigate your browser to
https://your-domain.tld:23456 and create your first own poll.

You see the log entries written out on the console. This is nice for testing but to actually use jawanndenn you'll need something more stable than a manually started programm.

As my web server runs with apache this is how I did it:

- set up a subdomain dedicated for the application, like doodle.your-domain.tld

- get certificates for it from Let's Encrypt (i.e. using github.com/lukas2511/dehydrated )

- create a folder for document root of the new subdomain and put a file app.wsgi and a favicon.ico there, the former you'll find at github.com/hartwork/jawanndenn/blob/master/jawanndenn/app.wsgi , the latter can be done with touch as we won't see that icon anyways but it saves 404 log entries to have a file named like it.

- make sure that apache2 has mod_wsgi enabled

- set up a virtual host for it in apache2/sites-available. Example:

#
#
######################################
#  doodle.your-domain.tld
######################################
#
#

# subdomain dedicated for running the jawanndenn web application
# don't separate .conf and .common since this will lead to errors when both :80 and :443 try to set
# a WSGIDaemonProcess with the same name.
# Don't include processes=1 into the WSGIDaemonProcess definition for this will lead to errors "Single process needed"

<VirtualHost :80>
#       include sites-available/doodle.
your-domain.tld.common ## this won't do, see above
        ServerName doodle.
your-domain.tld


        WSGIDaemonProcess doodle user=web123 group=web123 threads=5
        WSGIScriptAlias / /var/www/web123/doodle/app.wsgi

    <Directory /var/www/web123/doodle>
        WSGIProcessGroup doodle
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>

   CustomLog /var/log/apache2/doodle.
your-domain.tld.access.log combined
   ErrorLog  /var/log/apache2/doodle.your-domain.tld.error.log

</VirtualHost>

<VirtualHost
:443>

ServerName doodle.your-domain.tld


    # supply a different name for the WSGIDaemonProcess on :443
    WSGIDaemonProcess doodler user=web123 group=web123 threads=5
    WSGIScriptAlias / /var/www/web123/doodle/app.wsgi

    <Directory /var/www/web123/doodle>
        WSGIProcessGroup doodler
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>

   CustomLog /var/log/apache2/doodle.your-domain.tld.access.log combined
   ErrorLog  /var/log/apache2/doodle.your-domain.tld.error.log


        SSLEngine on

        SSLCertificateFile      /etc/dehydrated/certs/
your-domain.tld/cert.pem
        SSLCertificateKeyFile   /etc/dehydrated/certs/
your-domain.tld/privkey.pem
        SSLCertificateChainFile /etc/dehydrated/certs/
your-domain.tld/chain.pem




</VirtualHost>

Now restart apache2, weed out typos and your done. You create new doodles from doodle.your-domain.tld,
make note of the handle of the new poll and embed it on a web site with an iframe like

<div class="dudel">
<iframe src="https://doodle.your-domain.tld/poll/a9108dcfa12006ce3c229d6f0110c5f976df14e963ddd9b7ffc8618013a0bd7e"
        width="100%" height="600" frameborder="0"
        allowfullscreen >
  <p> <a href="https://developer.mozilla.org/en-US/docs/Glossary">
    Fallback link for browsers that don't support iframes
  </a> </p>
</iframe>
<div>

 

I had no luck trying to use sandbox with the iframe, YMMV

 

Now, is that secure?
Depends.

Do a little exploration with the 'View Web Source' feature of your browser to see all the relevant URIs and handles visible in plain text. Who ever gets to that page with the doodles can do shyte like

  • create 'unofficial' doddle polls
  • post spam as the name of a doodle
  • what the heck

Thus, we do have the security feature of 'data never leave my own site'. Which is cool.
All the rest of your desired security you will have to provide on your own.
 

Now, can I edit a vote? As it comes jawanndenn does not support any editing of votes which is regarded a security feature but makes doodles pretty useless in real life cause people do change opinion all the time. You cannot manually edit the stored votes cause they are stored in a binary format that's hard to access.

What you can do is add that functionality by yoursel like modify the vote() method of the _Poll object to replace the prior vote with the new vote if the name is exactly the same. 

 

ownCloud - halb und halb

Monday, January 28. 2013

Das folgende ist schon etwas alt, es gibt einen neuen Artikel mit meinen jüngeren Erlebnissen mit OC 5.+ 

In einem anderen Artikel habe ich ownCloud schon mal kurz erwähnt als eine mögliche Alternative zu Cloud-Angeboten wie GoogleDrive, Dropbox oder Insync. Es gibt ja ganz verschiedene Nutzungs-szenarien für Cloud-Speicherplatz, mein Schwerpunkt liegt nun nicht auf externem Backup-Space oder Sharing sondern auf einem Zugriffsfenster für im Lan vorgehaltene Dateien, das mir orts- und deviceübergreifend zur Verfügung steht. 

Und besonders geht es mir da um die An- und Einbindung meines Androidphones. 

  • schnell mal ein Bild hin- oder herschieben, USB anstöpseln und warten, bis endlich die sd-Karte gemounted ist - und dann für laufende Apps auf dem phone leider nicht mehr zugägnlich ist - dauert mir einfach zu lange.
  • irgendwo unterwegs will ich ein bestimmtes Lied aus meiner Musiksammlung, das ich gerade nicht auf der Sdkarte habe
  • meine mindmaps brauche ich immer und überall und zwar konsistent, also nicht das letzte Edit leider nur auf dem anderen Rechner...

So, das umreisst den Bereich, den mir ownCloud auf einem Rechner im Lan locker erfüllt. Einen dynamischen DNS-Dienst braucht es, der die je aktuelle IP meines DSL an eine Domain bindet, einen von aussen erreichbaren Rechner mit Apache, php, optional mysql und dem aktuellen ownCloud installiert und dann ist es noch sehr sinnvoll, sich für diese Domain eines der kostenlosen Serverzertifikate von startssl zu besorgen. Man kann die php - Dateien des ownCloud direkt in die Document root eines vhost entpacken, für die aktuelle Version 4.51 gibt es aber auch ein debian-repository und auf Sicht ist das doch die viel unaufwendigere Lösung, sobald es updates einzuspielen gilt. (Es gibt packages für CentOS, debian, fedora, openSuSe, RHEL, SLE und Ubuntu.)

Für debian Squeeze importiert man den repository key mit 
wget http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_6.0/Release.key
apt-key add - < Release.key 

bindet das repository ein mit echo 'deb http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_6.0/ /' >> /etc/apt/sources.list.d/owncloud.list
und anschliessend reicht ein

apt-get update
apt-get install owncloud

Fein, jetzt findet man in /var/www/owncloud das ganze php und in /etc/apache2/conf.d/ die Datei owncloud.conf, die man sich evtl. noch etwas zurechtbiegen will. 
Bei mir sorgt ein  

<IfModule mod_alias.c>
   Alias /cloud /var/www/owncloud/
</IfModule>
dafür, dass ich owncloud in jedem vhost als /cloud erreiche.
 
https://meineDomain.tld/cloud im browser ansteuern, die Installation mit ein paar Einstellungen (Datenbank, Verzeichnispfade und Zugriffsoptionen) auf den Weg schicken, Admin und user account anlegen, fertig. 
Auf dem Android gefällt mir als Client der TotalCommander mit WebDav-Plugin sehr gut aber es gibt natürlich zahllose Alternativen.
 
Soweit so gut, die Kategorie Dateien (mit den zwei Filteransichten Musik und Bilder) gefällt. Was mir nicht gefällt sind Kalender und Kontakte. Ich würde eben gerne meinen Androiden von Google und den Google-Account Features ablösen, aber dazu brauche ich für Kontakte und Kalender entsprechende Funktionalität und saubere Importfunktionen, die die derzeit auf Google eingestellten Daten ohne Verluste übernehmen können.
 
Meine Kontakte sind auf https://www.google.com/contacts/#contacts gepflegt, das Gros hat Portraitbilder, die Kontakte sind in Gruppen (bzw getagged), vielfach gibt es Notizen. Ich will jetzt nicht die Kontakte als vcard transferieren und anschliessend alle Portraits händisch neu zuordnen müssen und auf die Tags und einfache Gruppierung völlig verzichten mag ich noch weniger.
 
Bei den Kalendern habe ich noch nicht so detailliert herumprobiert aber soviel ist klar: das Modul CloneGoogleCalendar fehlt auch hier.

Mennoh! Das ist ein Millionenmarkt von Leuten, die nur mit Bauchschmerzen ihre ganzen Kontakte und Kalenderdaten bei google in den USA vorhalten - warum wagt das keiner, die Google-Dienste hierzu nachzubauen und uns Datensparsarmkeit zu ermöglichen? 

Ein Blog mit weiteren Artikeln zu dem Themenkreis sei hier noch empfohlen: netbunker

Noch ein paar pointer auf bezügliche Apps, die man sich auch gut aus f-droid installieren kann:

OwnCloud client - (a few bucks, open source, free if you build it yourself) sync files with OwnCloud.
CardDav-sync - (a few bucks, open source, free if you build it yourself) sync contacts with OwnCloud into your contact managers.
CalDav-sync - (a few bucks, open source, free if you build it yourself) sync calendars in OwnCloud into your calender apps.
Just Player - (freeware, open source) sync music with OwnCloud and play it.

update Ende Februar 2013:
Nun will ich es nach etwas Abstand mal zum Transfer einer kleinen Datei nutzen und - mobile client wie Browser geben alle Anzeichen eines Server Errror. Im error_log findet sich
PHP Fatal error:  xcache_clear_cache(): xcache.admin.user and/or xcache.admin.pass settings is not configured. Make sure you've modified the correct php ini file for your php used in webserver. in /var/www/owncloud/lib/cache/xcache.php on line 50

Na super. Tante Google weiß Rat, scheints habe ich mit dem letzten update && upgrade auf eine Version von owncloud (4.5.7-1) upgedated, die eine Version von xcache erwartet, die unter Debian Squeeze eben nicht gegeben ist. Die empfohlene Abhilfe, die auch hier ownCloud wieder ans Laufen bringt: 

/etc/php5/apache2/conf.d/xcache.ini mit einem Editor meines Vertrauens editieren und dort diese Zeile ergänzen: xcache.admin.enable_auth = Off

Half. OwnCloud ist wieder am Start. Aber im Log stehen nun vieleviele Kopien von: PHP Warning:  xcache_isset(): xcache.var_size is either 0 or too small to enable var data caching in /var/www/owncloud/lib/cache/xcache.php on line 39 Letztlich Log-Spam, eine Applikation sollte wirklich mitbekommen, dass sie eine Warnung schon einige hundert Mal gegeben hat und irgendwann die Frequenz reduzieren, statt bei Benutzung nun rund 4 bis 5 Mal / sec den immergleichen Text ins Log zu schiessen.

 

update 14.3.2013:
nice! heise berichtet von der eben erschienenen Version 5.0 von ownCloud und deutet auf laestig klingende upgrade-Methoden. Aber ich hab' es doch im repository... hier reicht ein apt-get update && ap-get upgrade und dann erscheint, nach Aufruf der Wolke, ein kurzer Hinweis auf das Upgrade, pling, pling,plong, pling, erfolgreich, weitergeleitet - fertig.
Erstmal login als Administrator, es sind eine Reihe neue Applications dazugekommen und ich aktiviere tasks - Antivir hat zwar die Anmerkung "recommended", schmeisst mir aber gleich eine Fehlermeldung. 
Auf den ersten Blick kommt mir die neue Oberfläche etwas dunkler vor, platzsparender und bedienbarer.
Raus und zweites Login als user, ich bekomme erst einmal minutenlang einen Verlaufsbalken mit dem Titel: "Dateisystem-Cache wird aktualisiert ..." Und dann: "Alles leer - lade etwas hoch!" :-(  - da ist schon mal was verlorengegangen. Hoffentlich nur der Link...

Kurz mal durch die anderen Optionen:
Kontakte kennt auf einmal Gruppen! Schon mal ein Schritt in die richtige Richtung.
Aufgaben kennt keine hierarchischen Beziehungen zwischen tasks, also kein "Kapitel 1" .. "Kapitel n" als subTasks zu "Buch". Eine Task hat Title, Kategorie, Ort, Fälligkeit, Fertigstellung scheint Boolean zu sein. Nach Priorität kann man sortieren, aber wo man die setzt, sehe ich erst mal nicht.

Ein Blick in's forum.owncloud.org/ bestätigt, dass andere die Probleme (Dateien, Task/Priority) auch haben. 
Es findet sich auch ein Hinweis auf ein Google import app

SSL und IPv6

Tuesday, March 2. 2010

Ich hatte den seltsamen Effekt, dass von den Merkmalen IPv4/IPv6 und http:/https: alle Permutationen funktionierten bis auf IPv6 mit https. Die Konfiguration der vhosts unter apache2 sah klar und richtig aus, aber sobald ich von http:// auf https:// wechselte, fiel die Verbindung von IPv6 auf IPv4 zurück.

Nun, es war kein Mangel am Startcom - Zertifikat und auch kein Bug des ssl, apache2 oder firefox sondern was fehlte war in ports.conf ein 

Listen 443

Beim Herumtesten kam mir noch ein anderer 'falscher Fehler' unter:
Bei einer adhoc ssl-isierten Domain monierte firefox "ssl_error_rx_record_too_long" und apache schrieb ins error_log "[error] [client 192.168.1.100] Invalid method in request \x16\x03\x01". Tatsaechlich müßte der Text der Fehlermeldung besser lauten: "Your SSL configuration is crap"denn es fehlten für den :443 - vhost die Zeilen mit SSLEngine, SSLCertificateFile, SSLCertificateKeyFile etc.

(Page 1 of 1, totaling 3 entries)