ooiservices/app/main/user.py
def create_user():
    '''
    Requires either a CSRF token shared between the UI and the Services OR an
    authenticated request from a valid user.
    '''
    csrf_token = request.headers.get('X-Csrf-Token')
    if not csrf_token or csrf_token != current_app.config['UI_API_KEY']:
        auth = False
        if request.authorization:
            auth = verify_auth(request.authorization['username'], request.authorization['password'])
        if not auth:
            return jsonify(error="Invalid Authentication"), 401
    data = json.loads(request.data)
    #add user to db
    role_mapping = {
        1: ['annotate', 'asset_manager', 'user_admin', 'redmine'], # Administrator
        2: ['annotate', 'asset_manager'],                          # Marine Operator
        3: []                                                      # Science User
    }
    role_scopes = role_mapping[data['role_id']]
    valid_scopes = UserScope.query.filter(UserScope.scope_name.in_(role_scopes)).all()

    try:
        new_user = User.from_json(data)
        new_user.scopes = valid_scopes
        new_user.active = True
        db.session.add(new_user)
        db.session.commit()
    except Exception as e:
        return jsonify(error=e.message), 409

    try:
        redmine = redmine_login()
        organization = new_user.organization.organization_name
        tmp = dt.datetime.now() + dt.timedelta(days=1)
        due_date = dt.datetime.strftime(tmp, "%Y-%m-%d")
        issue = redmine.issue.new()
        issue.project_id = current_app.config['REDMINE_PROJECT_ID']
        issue.subject = 'New User Registration for OOI UI: %s, %s' % (new_user.first_name, new_user.last_name)
        issue.description = 'A new user has requested access to the OOI User Interface. Please review the application for %s, their role in the organization %s is %s and email address is %s' % (new_user.first_name, organization, new_user.role, new_user.email)
        issue.priority_id = 1
        issue.due_date = due_date
        # Get the list of ticker Trackers
        trackers = list(redmine.tracker.all())
        # Find the REDMINE_TRACKER (like 'Support') and get the id
        # This make a difference for field validation and proper tracker assignment
        config_redmine_tracker = current_app.config['REDMINE_TRACKER']
        tracker_id = [tracker.id for tracker in trackers if tracker.name == config_redmine_tracker][0]
        issue.tracker_id = tracker_id
        issue.save()
    except Exception as e:
        current_app.logger.exception("Failed to generate redmine issue for new user")
        return jsonify(error=e.message), 409

    return jsonify(new_user.to_json()), 201

    Requires either a CSRF token shared between the UI and the Services OR an
    authenticated request from a valid user.
    
Requires either a CSRF token shared between the UI and the Services OR an
authenticated request from a valid user.
Requires either a CSRF token shared between the UI and the Services OR an authenticated request from a valid user .
def create_user():
    csrf_token = request.headers.get('X-Csrf-Token')
    if not csrf_token or csrf_token != current_app.config['UI_API_KEY']:
        auth = False
        if request.authorization:
            auth = verify_auth(request.authorization['username'], request.authorization['password'])
        if not auth:
            return jsonify(error="Invalid Authentication"), 401
    data = json.loads(request.data)
    role_mapping = {
        1: ['annotate', 'asset_manager', 'user_admin', 'redmine'], 
        2: ['annotate', 'asset_manager'],                          
        3: []                                                      
    }
    role_scopes = role_mapping[data['role_id']]
    valid_scopes = UserScope.query.filter(UserScope.scope_name.in_(role_scopes)).all()
    try:
        new_user = User.from_json(data)
        new_user.scopes = valid_scopes
        new_user.active = True
        db.session.add(new_user)
        db.session.commit()
    except Exception as e:
        return jsonify(error=e.message), 409
    try:
        redmine = redmine_login()
        organization = new_user.organization.organization_name
        tmp = dt.datetime.now() + dt.timedelta(days=1)
        due_date = dt.datetime.strftime(tmp, "%Y-%m-%d")
        issue = redmine.issue.new()
        issue.project_id = current_app.config['REDMINE_PROJECT_ID']
        issue.subject = 'New User Registration for OOI UI: %s, %s' % (new_user.first_name, new_user.last_name)
        issue.description = 'A new user has requested access to the OOI User Interface. Please review the application for %s, their role in the organization %s is %s and email address is %s' % (new_user.first_name, organization, new_user.role, new_user.email)
        issue.priority_id = 1
        issue.due_date = due_date
        trackers = list(redmine.tracker.all())
        config_redmine_tracker = current_app.config['REDMINE_TRACKER']
        tracker_id = [tracker.id for tracker in trackers if tracker.name == config_redmine_tracker][0]
        issue.tracker_id = tracker_id
        issue.save()
    except Exception as e:
        current_app.logger.exception("Failed to generate redmine issue for new user")
        return jsonify(error=e.message), 409
    return jsonify(new_user.to_json()), 201
def create_user ( ) : csrf_token = request . headers . get ( 'X-Csrf-Token' ) if not csrf_token or csrf_token != current_app . config [ 'UI_API_KEY' ] : auth = False if request . authorization : auth = verify_auth ( request . authorization [ 'username' ] , request . authorization [ 'password' ] ) if not auth : return jsonify ( error = "Invalid Authentication" ) , 401 data = json . loads ( request . data ) role_mapping = { 1 : [ 'annotate' , 'asset_manager' , 'user_admin' , 'redmine' ] , 2 : [ 'annotate' , 'asset_manager' ] , 3 : [ ] } role_scopes = role_mapping [ data [ 'role_id' ] ] valid_scopes = UserScope . query . filter ( UserScope . scope_name . in_ ( role_scopes ) ) . all ( ) try : new_user = User . from_json ( data ) new_user . scopes = valid_scopes new_user . active = True db . session . add ( new_user ) db . session . commit ( ) except Exception as e : return jsonify ( error = e . message ) , 409 try : redmine = redmine_login ( ) organization = new_user . organization . organization_name tmp = dt . datetime . now ( ) + dt . timedelta ( days = 1 ) due_date = dt . datetime . strftime ( tmp , "%Y-%m-%d" ) issue = redmine . issue . new ( ) issue . project_id = current_app . config [ 'REDMINE_PROJECT_ID' ] issue . subject = 'New User Registration for OOI UI: %s, %s' % ( new_user . first_name , new_user . last_name ) issue . description = 'A new user has requested access to the OOI User Interface. Please review the application for %s, their role in the organization %s is %s and email address is %s' % ( new_user . first_name , organization , new_user . role , new_user . email ) issue . priority_id = 1 issue . due_date = due_date trackers = list ( redmine . tracker . all ( ) ) config_redmine_tracker = current_app . config [ 'REDMINE_TRACKER' ] tracker_id = [ tracker . id for tracker in trackers if tracker . name == config_redmine_tracker ] [ 0 ] issue . tracker_id = tracker_id issue . save ( ) except Exception as e : current_app . logger . exception ( "Failed to generate redmine issue for new user" ) return jsonify ( error = e . message ) , 409 return jsonify ( new_user . to_json ( ) ) , 201
Requires either a CSRF token shared between the UI and the Services OR an
authenticated request from a valid user.
Requires either a CSRF token shared between the UI and the Services OR an authenticated request from a valid user .
'''
    Requires either a CSRF token shared between the UI and the Services OR an
    authenticated request from a valid user.
    ''' #add user to db # Administrator # Marine Operator # Science User # Get the list of ticker Trackers # Find the REDMINE_TRACKER (like 'Support') and get the id # This make a difference for field validation and proper tracker assignment