use propper json now and decode values
This commit is contained in:
parent
e76ae88edc
commit
d64ca716e9
@ -1,9 +1,11 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python3
|
||||||
import subprocess
|
import subprocess
|
||||||
from configobj import ConfigObj
|
from configobj import ConfigObj
|
||||||
import uuid
|
import uuid
|
||||||
from MAPI.Util import *
|
from MAPI.Util import *
|
||||||
|
|
||||||
import kopano
|
import kopano
|
||||||
|
|
||||||
# Try simplejson if json is not available
|
# Try simplejson if json is not available
|
||||||
try:
|
try:
|
||||||
import json
|
import json
|
||||||
@ -12,120 +14,123 @@ except ImportError:
|
|||||||
|
|
||||||
|
|
||||||
def encode(value):
|
def encode(value):
|
||||||
proc = subprocess.Popen(["php", "deencode.php", "encode", value], stdout=subprocess.PIPE)
|
output = subprocess.check_output(["php", "deencode.php", "encode", value])
|
||||||
return proc.communicate()[0]
|
return output.strip()
|
||||||
|
|
||||||
|
|
||||||
def opt_args():
|
def opt_args():
|
||||||
parser = kopano.parser('skpcfmUP')
|
parser = kopano.parser('skpcfm')
|
||||||
parser.add_option("--user", dest="user", action="store", help="username")
|
parser.add_option("--user", dest="user", action="store", help="username")
|
||||||
|
parser.add_option("--ssl", dest="ssl", action="store_true", help="Use localhost on port 443")
|
||||||
|
parser.add_option("--hostname", dest="hostname", action="store", help="hostname")
|
||||||
|
|
||||||
parser.add_option("--file", dest="file", default=[], action="store", help="config file(s) separate by ',' ")
|
parser.add_option("--file", dest="file", default=[], action="store", help="config file(s) separate by ',' ")
|
||||||
parser.add_option("--overwrite", dest="overwrite", action="store_true", help="overwrite files settings")
|
|
||||||
parser.add_option("--default", dest="default", action="store_true",
|
parser.add_option("--default", dest="default", action="store_true",
|
||||||
help="use default user and password in the configfile")
|
help="use default user and password in the configfile")
|
||||||
|
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
def read_settings(options):
|
def read_settings(user):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
user = kopano.Server(options).user(options.user)
|
mapisettings = user.store.prop(PR_EC_WEBACCESS_SETTINGS_JSON).value.decode('utf-8')
|
||||||
except MAPIErrorLogonFailed as e:
|
settings = json.loads(mapisettings)
|
||||||
print('User \'{}\' not found ({})'.format(options.user, e))
|
except Exception as e:
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if not user.store:
|
|
||||||
print('User \'{}\' has no user store ({})'.format(options.user, e))
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
try:
|
|
||||||
mapisettings = user.store.prop(PR_EC_WEBACCESS_SETTINGS_JSON).value
|
|
||||||
return mapisettings
|
|
||||||
except Exception:
|
|
||||||
print('{}: Has no or no valid WebApp settings creating empty config tree'.format(user.name))
|
print('{}: Has no or no valid WebApp settings creating empty config tree'.format(user.name))
|
||||||
return '{"settings": {"zarafa": {"v1": {"contexts": {"mail": {}}}}}}'
|
settings = json.loads('{"settings": {"zarafa": {"v1": {"contexts": {"mail": {}}}}}}')
|
||||||
|
return settings
|
||||||
|
|
||||||
|
|
||||||
def write_settings(data, options):
|
def write_settings(user, setting):
|
||||||
user = kopano.Server(options).user(options.user)
|
try:
|
||||||
user.store.create_prop(PR_EC_WEBACCESS_SETTINGS_JSON, data.encode('utf-8'))
|
user.store.create_prop(PR_EC_WEBACCESS_SETTINGS_JSON, setting.encode('utf-8'))
|
||||||
print('Writing settings for user \'{}\''.format(user.fullname))
|
except Exception as e:
|
||||||
|
print('{}: Error Writing WebApp settings for user: {}'.format(e, user.name))
|
||||||
|
|
||||||
|
|
||||||
def files(options):
|
def files(options):
|
||||||
filesjson = '{'
|
filesjson = {'accounts': {}}
|
||||||
if options.overwrite:
|
|
||||||
filesjson = '{"accounts": {'
|
|
||||||
num = 0
|
|
||||||
files = options.file.split(',')
|
files = options.file.split(',')
|
||||||
for file in files:
|
for file in files:
|
||||||
configfile = ConfigObj(file)
|
configfile = ConfigObj(file)
|
||||||
if options.default:
|
if configfile['setting']['use_zarafa_credentials']:
|
||||||
username = configfile['setting']['default_user']
|
username = configfile['setting']['default_user']
|
||||||
else:
|
else:
|
||||||
username = options.user
|
username = options.user
|
||||||
if num != 0:
|
password = encode(configfile['setting']['default_password'])
|
||||||
filesjson += ','
|
backendoptions = {
|
||||||
id = uuid.uuid4()
|
'ftp': {"backend_features": {
|
||||||
filesjson += '''
|
"Streaming": "true", }},
|
||||||
"%s": {
|
'webdav': {"backend_features": {
|
||||||
"status": "ok",
|
"Quota": "true",
|
||||||
"backend_config": {
|
"VersionInfo": "true"}},
|
||||||
"server_path": "%s",
|
'owncloud': {"backend_features": {
|
||||||
"workgroup": "%s",
|
"Quota": "true",
|
||||||
"server_address": "%s",
|
"Sharing": "true",
|
||||||
"server_ssl": %s,
|
"VersionInfo": "true"}},
|
||||||
"current_account_id": "%s",
|
'smb': {"backend_features": {
|
||||||
"use_zarafa_credentials": %s,
|
"Quota": "true",
|
||||||
"user": "%s",
|
"Streaming": "true",
|
||||||
"password": "%s",
|
"VersionInfo": "true"}},
|
||||||
"server_port": "%s"
|
}
|
||||||
},
|
|
||||||
"cannot_change": false,
|
if file == 'seafile.cfg':
|
||||||
"name": "%s",
|
password = encode(options.user)
|
||||||
"status_description": "Account is ready to use.",
|
username = kopano.Server(options).user(options.user).email
|
||||||
"id": "%s",
|
|
||||||
"backend_features": {
|
if 'local' in file:
|
||||||
"Sharing": true,
|
if options.ssl:
|
||||||
"VersionInfo": true,
|
port = '443'
|
||||||
"Quota": true
|
address = options.hostname
|
||||||
},
|
ssl = 'true'
|
||||||
"backend": "%s"
|
else:
|
||||||
}''' % (id, encode(configfile['setting']['server_path']), encode(configfile['setting']['workgroup']),
|
port = configfile['setting']['server_port']
|
||||||
encode(configfile['setting']['server_address']), configfile['setting']['server_ssl'],
|
address = configfile['setting']['server_address']
|
||||||
encode('d4cacda458a2a26c301f2b7d75ada530'), configfile['setting']['use_zarafa_credentials'],
|
ssl = configfile['setting']['server_ssl']
|
||||||
encode(username), encode(configfile['setting']['default_password']),
|
else:
|
||||||
encode(configfile['setting']['server_port']), configfile['setting']['name'], id, configfile['setting']['type'])
|
port = configfile['setting']['server_port']
|
||||||
num += 1
|
address = configfile['setting']['server_address']
|
||||||
if options.overwrite:
|
ssl = configfile['setting']['server_ssl']
|
||||||
filesjson += '}}'
|
id = str(uuid.uuid4())
|
||||||
else:
|
filesjson['accounts'][id] = {
|
||||||
filesjson += '}'
|
"status": "ok",
|
||||||
|
"backend_config": {
|
||||||
|
"server_path": encode(configfile['setting']['server_path']).decode('utf-8'),
|
||||||
|
"workgroup": encode(configfile['setting']['workgroup']).decode('utf-8'),
|
||||||
|
"server_address": encode(address).decode('utf-8'),
|
||||||
|
"server_ssl": ssl,
|
||||||
|
"current_account_id": encode('d4cacda458a2a26c301f2b7d75ada530').decode('utf-8'),
|
||||||
|
"use_zarafa_credentials": configfile['setting']['use_zarafa_credentials'],
|
||||||
|
"user": encode(username).decode('utf-8'),
|
||||||
|
"password": password.decode('utf-8'),
|
||||||
|
"server_port": encode(port).decode('utf-8')
|
||||||
|
},
|
||||||
|
"cannot_change": False,
|
||||||
|
"name": configfile['setting']['name'],
|
||||||
|
"status_description": "Account is ready to use.",
|
||||||
|
"id": id,
|
||||||
|
"backend_features": backendoptions[configfile['setting']['type'].lower()]['backend_features'],
|
||||||
|
"backend": configfile['setting']['type']
|
||||||
|
}
|
||||||
|
|
||||||
|
if configfile['setting']['type'].lower() == 'ftp':
|
||||||
|
filesjson['accounts'][id]['backend_config']['server_pasv'] = configfile['setting']['server_pasv']
|
||||||
|
|
||||||
return filesjson
|
return filesjson
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
options, args = opt_args()
|
options, args = opt_args()
|
||||||
|
|
||||||
data = read_settings(options)
|
server = kopano.Server(options)
|
||||||
webappsettings = json.loads(data)
|
user = server.user(options.user)
|
||||||
|
webappsettings = read_settings(user)
|
||||||
if not webappsettings['settings']['zarafa']['v1'].get('plugins'):
|
if not webappsettings['settings']['zarafa']['v1'].get('plugins'):
|
||||||
webappsettings['settings']['zarafa']['v1']['plugins'] = {}
|
webappsettings['settings']['zarafa']['v1']['plugins'] = {}
|
||||||
|
webappsettings['settings']['zarafa']['v1']['plugins']['files'] = files(options)
|
||||||
if options.overwrite:
|
write_settings(user, json.dumps(webappsettings))
|
||||||
webappsettings['settings']['zarafa']['v1']['plugins']['files'] = json.loads(files(options))
|
|
||||||
else:
|
|
||||||
if not webappsettings['settings']['zarafa']['v1']['plugins'].get('files'):
|
|
||||||
webappsettings['settings']['zarafa']['v1']['plugins']['files'] = {}
|
|
||||||
if not webappsettings['settings']['zarafa']['v1']['plugins']['files'].get('accounts'):
|
|
||||||
webappsettings['settings']['zarafa']['v1']['plugins']['files']['accounts'] = {}
|
|
||||||
webappsettings['settings']['zarafa']['v1']['plugins']['files']['accounts'].update(json.loads(files(options)))
|
|
||||||
|
|
||||||
write_settings(json.dumps(webappsettings), options)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user