1#!/usr/bin/python
2
3import sys
4import MySQLdb
5import webdavlib
6
7import HordeSignatureConverter
8
9from config import webdavConfig, dbConfig
10
11xmlns_inversedav = "urn:inverse:params:xml:ns:inverse-dav"
12
13def UploadSignature(client, user, signature):
14    collection = '/SOGo/dav/%s/' % user
15    proppatch \
16        = webdavlib.WebDAVPROPPATCH(collection,
17                                    { "{%s}signature" % xmlns_inversedav: \
18                                          signature.encode("utf-8") })
19    client.execute(proppatch)
20    if (proppatch.response["status"] < 200
21        or proppatch.response["status"] > 399):
22        print "Failure uploading signature for user '%s': %d" \
23            % (user, proppatch.response["status"])
24
25if __name__ == "__main__":
26    if len(sys.argv) > 1:
27        user = sys.argv[1]
28    else:
29        raise Exception, "<user> argument must be specified" \
30            " (use 'ALL' for everyone)"
31
32    conn = MySQLdb.connect(host = dbConfig["hostname"],
33                           user = dbConfig["username"],
34                           passwd = dbConfig["password"],
35                           db = dbConfig["database"],
36                           use_unicode = True)
37
38    cnv = HordeSignatureConverter.HordeSignatureConverter(user, "DOMAIN.COM")
39    signatures = cnv.fetchSignatures(conn)
40    conn.close()
41
42    client = webdavlib.WebDAVClient(webdavConfig["hostname"],
43                                    webdavConfig["port"],
44                                    webdavConfig["username"],
45                                    webdavConfig["password"])
46    for user in signatures:
47        signature = signatures[user]
48        UploadSignature(client, user, signature)
49