mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-08-22 07:03:19 +00:00
Changed preferences to use JSON for v3
This commit is contained in:
committed by
Francis Lachapelle
parent
f49610f058
commit
243726f096
@@ -7,6 +7,9 @@ import simplejson
|
||||
import sogoLogin
|
||||
|
||||
|
||||
DEBUG=False
|
||||
#DEBUG=True
|
||||
|
||||
|
||||
# must be kept in sync with SoObjects/SOGo/SOGoDefaults.plist
|
||||
# this should probably be fetched magically...
|
||||
@@ -18,122 +21,128 @@ SOGoSupportedLanguages = [ "Arabic", "Basque", "Catalan", "Czech", "Dutch", "Dan
|
||||
daysBetweenResponseList=[1,2,3,5,7,14,21,30]
|
||||
|
||||
class HTTPPreferencesPOST (webdavlib.HTTPPOST):
|
||||
cookie = None
|
||||
|
||||
def prepare_headers (self):
|
||||
headers = webdavlib.HTTPPOST.prepare_headers(self)
|
||||
if self.cookie:
|
||||
headers["Cookie"] = self.cookie
|
||||
return headers
|
||||
cookie = None
|
||||
|
||||
def prepare_headers (self):
|
||||
headers = webdavlib.HTTPPOST.prepare_headers(self)
|
||||
if self.cookie:
|
||||
headers["Cookie"] = self.cookie
|
||||
return headers
|
||||
|
||||
class HTTPPreferencesGET (webdavlib.HTTPGET):
|
||||
cookie = None
|
||||
cookie = None
|
||||
|
||||
def prepare_headers (self):
|
||||
headers = webdavlib.HTTPGET.prepare_headers(self)
|
||||
if self.cookie:
|
||||
headers["Cookie"] = self.cookie
|
||||
return headers
|
||||
def prepare_headers (self):
|
||||
headers = webdavlib.HTTPGET.prepare_headers(self)
|
||||
if self.cookie:
|
||||
headers["Cookie"] = self.cookie
|
||||
return headers
|
||||
|
||||
class preferences:
|
||||
login = username
|
||||
passw = password
|
||||
login = username
|
||||
passw = password
|
||||
|
||||
def __init__(self, otherLogin = None, otherPassword = None):
|
||||
if otherLogin and otherPassword:
|
||||
self.login = otherLogin
|
||||
self.passw = otherPassword
|
||||
def __init__(self, otherLogin = None, otherPassword = None):
|
||||
if otherLogin and otherPassword:
|
||||
self.login = otherLogin
|
||||
self.passw = otherPassword
|
||||
|
||||
self.client = webdavlib.WebDAVClient(hostname, port)
|
||||
self.client = webdavlib.WebDAVClient(hostname, port)
|
||||
|
||||
authCookie = sogoLogin.getAuthCookie(hostname, port, self.login, self.passw)
|
||||
self.cookie = authCookie
|
||||
authCookie = sogoLogin.getAuthCookie(hostname, port, self.login, self.passw)
|
||||
self.cookie = authCookie
|
||||
|
||||
# map between preferences/jsonDefaults and the webUI names
|
||||
# should probably be unified...
|
||||
self.preferencesMap = {
|
||||
"SOGoLanguage": "language",
|
||||
"SOGoTimeZone": "timezone",
|
||||
"SOGoSieveFilters": "sieveFilters",
|
||||
#- If this is not set, we CAN'T save preferences
|
||||
self.preferences = None
|
||||
|
||||
# Vacation stuff
|
||||
"Vacation": "enableVacation", # to disable, don't specify it
|
||||
"autoReplyText": "autoReplyText", # string
|
||||
"autoReplyEmailAddresses": "autoReplyEmailAddresses", # LIST
|
||||
"daysBetweenResponse": "daysBetweenResponsesList",
|
||||
"ignoreLists": "ignoreLists", #bool
|
||||
def find_key(self, d, key):
|
||||
if key in d:
|
||||
return d
|
||||
subdicts = [a[1] for a in d.iteritems() if type(a[1]) == dict]
|
||||
for subd in subdicts:
|
||||
ret = self.find_key(subd, key)
|
||||
if ret:
|
||||
return ret
|
||||
return None
|
||||
|
||||
# forward stuff
|
||||
"Forward": "enableForward", # to disable, don't specify it
|
||||
"forwardAddress": "forwardAddress",
|
||||
"keepCopy": "forwardKeepCopy",
|
||||
def load_preferences(self):
|
||||
defaults = self.get_defaults()
|
||||
settings = self.get_settings()
|
||||
self.preferences = {'defaults': defaults, 'settings': settings}
|
||||
#print "LOAD PREFS:", self.preferences
|
||||
|
||||
# Calendar stuff
|
||||
"enablePreventInvitations": "preventInvitations",
|
||||
"PreventInvitations": "PreventInvitations",
|
||||
"whiteList": "whiteList",
|
||||
}
|
||||
def get(self, preference=None):
|
||||
if not self.preferences:
|
||||
self.load_preferences()
|
||||
#- Want the whole thing
|
||||
if not preference:
|
||||
return self.preferences
|
||||
else:
|
||||
tmpdict = self.find_key(self.preferences, preference)
|
||||
return tmpdict[preference]
|
||||
|
||||
def _get(self, subtype='jsonDefault', preference=None):
|
||||
url = "/SOGo/so/%s/%s" % (self.login, subtype)
|
||||
get = HTTPPreferencesGET(url)
|
||||
get.cookie = self.cookie
|
||||
self.client.execute(get)
|
||||
if DEBUG: print "LUC (url):", url
|
||||
if DEBUG: print "LUC (status):", get.response["status"]
|
||||
if DEBUG: print "LUC (body):", get.response['body']
|
||||
content = simplejson.loads(get.response['body'])
|
||||
result = None
|
||||
try:
|
||||
if preference:
|
||||
result = content[preference]
|
||||
else:
|
||||
result = content
|
||||
except:
|
||||
pass
|
||||
return result
|
||||
|
||||
def set(self, preference, value=None):
|
||||
# if preference is a dict, set all prefs found in the dict
|
||||
content=""
|
||||
if isinstance(preference, dict):
|
||||
for k,v in preference.items():
|
||||
content+="%s=%s&" % (self.preferencesMap[k], urllib.quote(v))
|
||||
else:
|
||||
# assume it is a str
|
||||
formKey = self.preferencesMap[preference]
|
||||
content = "%s=%s&hasChanged=1" % (formKey, urllib.quote(value))
|
||||
def get_defaults(self, preference=None):
|
||||
return self._get('jsonDefaults', preference)
|
||||
|
||||
def get_settings(self, preference=None):
|
||||
return self._get('jsonSettings', preference)
|
||||
|
||||
url = "/SOGo/so/%s/preferences" % self.login
|
||||
def set_nosave(self, preference, value=None):
|
||||
# First check if we did a get, if not, must get first
|
||||
if not self.preferences:
|
||||
self.load_preferences()
|
||||
|
||||
post = HTTPPreferencesPOST (url, content)
|
||||
post.content_type = "application/x-www-form-urlencoded"
|
||||
post.cookie = self.cookie
|
||||
# Get the right sub-dict and change the key/value
|
||||
subdict = self.find_key(self.preferences, preference)
|
||||
if not subdict:
|
||||
print "LUC(nosubdict):", preference, self.preferences
|
||||
subdict[preference] = value
|
||||
|
||||
self.client.execute (post)
|
||||
def set(self, preference, value=None):
|
||||
self.set_nosave(preference, value)
|
||||
self.save()
|
||||
|
||||
# Raise an exception if the pref wasn't properly set
|
||||
if post.response["status"] != 200:
|
||||
raise Exception ("failure setting prefs, (code = %d)" \
|
||||
def set_multiple(self, preferences={}):
|
||||
for key, value in preferences.iteritems():
|
||||
self.set_nosave(key, value)
|
||||
self.save()
|
||||
|
||||
def save(self):
|
||||
url = "/SOGo/so/%s/Preferences/save" % self.login
|
||||
|
||||
post = HTTPPreferencesPOST(url, simplejson.dumps(self.preferences))
|
||||
post.content_type = "application/json"
|
||||
post.cookie = self.cookie
|
||||
self.client.execute(post)
|
||||
|
||||
# Raise an exception if the pref wasn't properly set
|
||||
if post.response["status"] != 200:
|
||||
raise Exception ("failure setting prefs, (code = %d)" \
|
||||
% post.response["status"])
|
||||
|
||||
def get(self, preference=None):
|
||||
url = "/SOGo/so/%s/preferences/jsonDefaults" % self.login
|
||||
get = HTTPPreferencesGET (url)
|
||||
get.cookie = self.cookie
|
||||
self.client.execute (get)
|
||||
content = simplejson.loads(get.response['body'])
|
||||
result = None
|
||||
try:
|
||||
if preference:
|
||||
result = content[preference]
|
||||
else:
|
||||
result = content
|
||||
except:
|
||||
pass
|
||||
return result
|
||||
|
||||
def get_settings(self, preference=None):
|
||||
url = "/SOGo/so/%s/preferences/jsonSettings" % self.login
|
||||
get = HTTPPreferencesGET (url)
|
||||
get.cookie = self.cookie
|
||||
self.client.execute (get)
|
||||
content = simplejson.loads(get.response['body'])
|
||||
result = None
|
||||
try:
|
||||
if preference:
|
||||
result = content[preference]
|
||||
else:
|
||||
result = content
|
||||
except:
|
||||
pass
|
||||
return result
|
||||
|
||||
# Simple main to test this class
|
||||
if __name__ == "__main__":
|
||||
p = preferences ()
|
||||
print p.get ("SOGoLanguage")
|
||||
p.set ("SOGoLanguage", SOGoSupportedLanguages.index("French"))
|
||||
print p.get ("SOGoLanguage")
|
||||
p = preferences ()
|
||||
print p.get ("SOGoLanguage")
|
||||
p.set ("SOGoLanguage", SOGoSupportedLanguages.index("French"))
|
||||
print p.get ("SOGoLanguage")
|
||||
|
||||
Reference in New Issue
Block a user