Weave server

Så kom den store dag hvor Firefox 3.0 blev frigivet, alt i alt en glædelig begivenhed eller ? Njaa ikke helt synes jeg, goddag til Firefox 3.0 er nemlig samtidig et farvel til Google Browser Sync udvidelsen. Man kunne i sidste uge læse på en Google blog, at der ikke kommer en Firefox 3.0 kompatibel version af GBS 🙁
Det er noget rigtigt skidt er det, jeg færdes til daglig på 4 forskellige computere, og GBS har de sidste par år trofast sørget for at mine bookmarks, browserhistorik og passwords var i sync på alle maskiner.

Heldigvis er der et nyt produkt ved navn Weave undervejs fra Mozilla Labs. Det kan nogenlunde de samme ting som GBS, og kan man leve med lidt småfejl, kan det sagtens bruges.
Weave skal bruge en konto på en WebDAV server for at kunne gemme/synce data, har man ikke sådan en i forvejen kan man i perioder være heldig at få lov til at oprette en hos Mozilla Labs på deres Weave server

Har man en lille nørd i sig der trænger til pleje, kan man jo også bare lave sin egen server.
Jeg har eksperimenteret lidt og her kommer noget input til hvordan man kan få en WebDAV server op at køre.

Du skal bruge følgende:
Apache 2.2.x
MySQL 5.0 (andre versioner kan også bruges)

Apache serveren skal bla have disse moduler indlæst:

  • mod_dav
  • mod_dav_fs
  • mod_authn-dbd (databasebaseret login i stedet for htpasswd filer)
  • mod_dbd
  • mod_rewrite

Kompiler du din egen Apache server kan du eventuelt finde inspiration i min config.nice fil.

Så skal der laves lidt tilføjelser til httpd.conf filen.

En virtuel host kunne f.eks se således ud: (SSL kan anbefales)


<VirtualHost>
  DocumentRoot /sti/til/weavedata
  ServerName weaveserver.domain.dk

  # Rewrite der sørger for at mappe bruger ned i dir der matcher 
  # det navn han er logget ind med.
  RewriteEngine On
  RewriteCond %{LA-U:REMOTE_USER}    ^(.+)$
  RewriteRule ^(.*)$ /%1$1 [L]

  # Opsætning til mod_dbd
  DBDriver mysql
  DBDParams "dbname=weave user=weaveuser pass=hemmeligkode"
  DBDMin 1
  DBDKeep 2
  DBDMax 10
  DBDExptime 60 
</VirtualHost>

Adgangskontrol:


<Directory /sti/til/weavedata/>
  Dav on
  # Enable ved debug
  #Options +Indexes
  #IndexOptions FancyIndexing XHTML
  #IndexIgnore .DS* .DAV

  Order Deny,Allow
  Allow from All
  AuthType Basic
  AuthName "Weave server"
  AuthBasicProvider dbd
  AuthDBDUserPWQuery "SELECT password FROM users WHERE username= %s" 
  Require valid-user
</Directory>

Så opretter vi en MySQL database, en enkelt tabel og en MySQL bruger:


create database weave;

create table users (username char(96) not null default '', 
password char(35) not null default '',primary key  (username));

grant select on weave.* to 'weaveuser'@'localhost' identified by "hemmeligkode";

mod_dbd kan forstå kodeord i forskellige formater, et af dem er en base64 encoded SHA1 hash af kodeordet med teksten {SHA} foranstillet. Sådan et kodeord kan f.eks fremstilles med en stump PHP som denne:


echo '{SHA}'.base64_encode(sha1('secretpassword', TRUE));

Jeg har valgt at bruge emailadresser som brugernavne, SQL til en brugeroprettelse kan så se således ud:


insert into users values ("bruger@domain.dk","{SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=");

Til slut skal der oprettes et bibliotek til brugerens data og tildeles skriverettigheder til webserveren


mkdir /sti/til/weavedata/bruger@domain.dk
chown nobody:nobody /sti/til/weavedata/bruger@domain.dk

Update: Version 0.2 af Weave kræver en lidt anden biblioteksstruktur, i stedet for ovenstående skal man nu anvende:


mkdir /sti/til/weavedata/bruger@domain.dk/user/bruger@domain.dk
chown nobody:nobody /sti/til/weavedata/bruger@domain.dk/user/bruger@domain.dk