126 lines
4.5 KiB
Python
Executable File
126 lines
4.5 KiB
Python
Executable File
#! /usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
""" Script to administrate mandaye server
|
|
"""
|
|
|
|
import os
|
|
os.environ['MANDAYE_CONFIG_MODULE'] = 'mandaye_vincennes.config'
|
|
|
|
import base64
|
|
|
|
from optparse import OptionParser
|
|
|
|
from mandaye import config
|
|
from mandaye.log import logger
|
|
|
|
def get_cmd_options():
|
|
usage = "usage: %prog --createdb|--upgradedb|--cryptpwd"
|
|
parser = OptionParser(usage=usage)
|
|
parser.add_option("--createdb",
|
|
dest="createdb",
|
|
default=False,
|
|
action="store_true",
|
|
help="Create Mandaye database"
|
|
)
|
|
parser.add_option("--upgradedb",
|
|
dest="upgradedb",
|
|
default=False,
|
|
action="store_true",
|
|
help="Upgrade Mandaye database"
|
|
)
|
|
parser.add_option("--cryptpwd",
|
|
dest="cryptpwd",
|
|
default=False,
|
|
action="store_true",
|
|
help="Crypt external password in Mandaye's database"
|
|
)
|
|
parser.add_option("--migrate",
|
|
dest="old_db",
|
|
default="",
|
|
type="string",
|
|
help="OLD_DB: oldsqlalchemy schema (ex postgresql://mandaye@/mandayeold)")
|
|
|
|
(options, args) = parser.parse_args()
|
|
return options
|
|
|
|
def encrypt_pwd(pwd):
|
|
from Crypto.Cipher import AES
|
|
logger.debug("Encrypt password")
|
|
enc_pwd = pwd
|
|
if config.encrypt_secret:
|
|
try:
|
|
cipher = AES.new(config.encrypt_secret, AES.MODE_CFB)
|
|
enc_pwd = cipher.encrypt(pwd)
|
|
enc_pwd = base64.b64encode(enc_pwd)
|
|
except Exception, e:
|
|
if config.debug:
|
|
traceback.print_exc()
|
|
logger.warning('Password encrypting failed %s' % e)
|
|
else:
|
|
logger.warning("You must set a secret to use pwd encryption")
|
|
return enc_pwd
|
|
|
|
def main():
|
|
options = get_cmd_options()
|
|
if options.createdb or options.upgradedb:
|
|
logger.info("Creating or upgrading database...")
|
|
from alembic.config import Config
|
|
from alembic import command
|
|
from mandaye import global_config
|
|
alembic_cfg = Config(global_config.alembic_cfg)
|
|
alembic_cfg.set_main_option("script_location", global_config.alembic_script_path)
|
|
command.upgrade(alembic_cfg, "head")
|
|
logger.info("Database upgraded")
|
|
if options.cryptpwd:
|
|
from mandaye.backends.default import ManagerSPUser
|
|
for user in ManagerSPUser.all():
|
|
user.password = encrypt_pwd(user.password)
|
|
ManagerSPUser.save()
|
|
if options.old_db:
|
|
from mandaye.db import sql_session
|
|
from mandaye.models import IDPUser, SPUser, ServiceProvider
|
|
from sqlalchemy import create_engine
|
|
from sqlalchemy.sql import text
|
|
engine = create_engine(options.old_db)
|
|
conn = engine.connect()
|
|
sites = conn.execute(text("select id, name FROM sites")).fetchall()
|
|
for site in sites:
|
|
sp = ServiceProvider(name=site[1])
|
|
sp.id = site[0]
|
|
sql_session().add(sp)
|
|
sql_session().commit()
|
|
local_users = conn.execute(text("select id, login from local_users")).fetchall()
|
|
for local_user in local_users:
|
|
idp_user = IDPUser(unique_id=local_user[1], idp_id='default')
|
|
idp_user.id = local_user[0]
|
|
sql_session().add(idp_user)
|
|
sql_session().commit()
|
|
ext_users = conn.execute(text("select id, login, password, birthdate, last_connection, local_user_id, site_id, creation_date from ext_users")).fetchall()
|
|
for ext_user in ext_users:
|
|
site_id = ext_user[6]
|
|
post_values = {}
|
|
if site_id == 1:
|
|
post_values['codeFamille'] = ext_user[1]
|
|
post_values['motDePasse'] = encrypt_pwd(ext_user[2])
|
|
elif site_id == 2:
|
|
post_values['user'] = ext_user[1]
|
|
post_values['password'] = encrypt_pwd(ext_user[2])
|
|
elif site_id == 3:
|
|
post_values['txtNomFoyer'] = ext_user[1]
|
|
post_values['txtCode'] = encrypt_pwd(ext_user[2])
|
|
post_values['txtDateNaissance'] = ext_user[3]
|
|
sp_user = SPUser(login=ext_user[1], post_values=post_values)
|
|
sp_user.idp_user_id = ext_user[5]
|
|
sp_user.id = ext_user[0]
|
|
sp_user.last_connection = ext_user[4]
|
|
sp_user.service_provider_id = site_id
|
|
sp_user.creation_date = ext_user[7]
|
|
sql_session().add(sp_user)
|
|
sql_session().commit()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|