# -*- mode: python -*- # -*- coding: utf-8 -*- import pdb import re import psycopg2 import psycopg2.extras from flask import current_app from app import app, db from app.auth.models import User, Role def import_scodoc7_user_db(scodoc7_db="dbname=SCOUSERS"): """Create users from existing ScoDoc7 db (SCOUSERS) The resulting users are in SCO8USERS, handled via Flask/SQLAlchemy ORM. """ cnx = psycopg2.connect(scodoc7_db) cursor = cnx.cursor(cursor_factory=psycopg2.extras.DictCursor) cursor.execute("SELECT * FROM sco_users;") for u7 in cursor: if User.query.filter_by(user_name=u7["user_name"]).first(): # user with same name exists ! current_app.logger.warning( "User {} exists and is left unchanged".format(u7["user_name"]) ) else: u = User( user_name=u7["user_name"], email=u7["email"], date_modif_passwd=u7["date_modif_passwd"], nom=u7["nom"], prenom=u7["prenom"], dept=u7["dept"], passwd_temp=u7["passwd_temp"], date_expiration=u7["date_expiration"], password_scodoc7=u7["passwd"], active=(u7["status"] == None), ) # Set roles: # ScoDoc7 roles are stored as 'AdminRT,EnsRT' for role_dept in u7["roles"].split(","): m = re.match(r"^([A-Za-z0-9]+?)([A-Z][A-Za-z0-9]*?)$", role_dept) if not m: current_app.logger.warning( "User {}: ignoring role {}".format(u7["user_name"], role_dept) ) else: role_name = m.group(1) dept = m.group(2) role = Role.query.filter_by(name=role_name).first() if not role: current_app.logger.warning( "User {}: ignoring role {}".format( u7["user_name"], role_dept ) ) else: u.add_role(role, dept) db.session.add(u) current_app.logger.info("imported user {}".format(u)) db.session.commit()