Exemplo n.º 1
0
def loginInfo():
    """
    Retrieve session/login info
     :response Content-Type: application/json, {"synchrotron_name": synchrotron_name, "beamline_name": beamline_name,
                    "loginType": loginType, "loginRes": {'status':{ "code": "ok", "msg": msg }, 'Proposal': proposal, 'session': todays_session, "local_contact": local_contact, "person": someone, "laboratory": a_laboratory']} }
    """     
    global LOGGED_IN_USER
    global MASTER
    loginInfo = session.get("loginInfo")

    if loginInfo is not None:
        loginID = loginInfo["loginID"]
        if LOGGED_IN_USER is not None and LOGGED_IN_USER != loginID:
            return make_response("", 409)

        # auto log in
        loginInfo["loginRes"] = limsutils.lims_login(loginID, loginInfo["password"])
        LOGGED_IN_USER = loginID
        if not MASTER:
            MASTER = session.sid
        session['loginInfo'] = loginInfo
  
    mxcube.queue = qutils.get_queue(session)
    logging.getLogger('HWR').info('Loaded queue')
    logging.getLogger('HWR').info('[QUEUE] %s ' % qutils.queue_to_json())
 
    return jsonify(
                    { "synchrotron_name": mxcube.session.synchrotron_name,
                      "beamline_name": mxcube.session.beamline_name,
                      "loginType": mxcube.db_connection.loginType.title(),
                      "loginRes": limsutils.convert_to_dict(loginInfo["loginRes"] if loginInfo is not None else {}),
                      "queue": qutils.queue_to_dict(),
                      "master": MASTER == session.sid
                    }
                  )
Exemplo n.º 2
0
def login():
    """
    Login into mxcube application.
        :form proposal: proposal as it appears in duo
        :form password: corresponding password
        :response Content-Type: application/json, an object containing following info: {'status':{ "code": "ok", "msg": msg }, 'Proposal': proposal, 'session': todays_session, "local_contact": local_contact, "person": someone, "laboratory": a_laboratory']}
        :statuscode: 200: no error
        :statuscode: 409: could not log in
    """
    global LOGGED_IN_USER
    global MASTER

    content = request.get_json()
    loginID = content['proposal']
    if LOGGED_IN_USER is not None and LOGGED_IN_USER != loginID:
        return make_response({ "code": "", "msg": "Another user is already logged in" }, 409)

    password = content['password']

    loginRes = limsutils.lims_login(loginID, password)
 
    if loginRes['status']['code'] == 'ok':
        session['loginInfo'] = { 'loginID': loginID, 'password': password, 'loginRes': loginRes }
        LOGGED_IN_USER = loginID
        if not MASTER:
            MASTER = session.sid
#        loginRes structure
#        {'status':{ "code": "ok", "msg": msg }, 'Proposal': proposal,
#        'session': todays_session,
#        "local_contact": self.get_session_local_contact(todays_session['session']['sessionId']),
#        "person": prop['Person'],
#        "laboratory": prop['Laboratory']}

    return make_response(loginRes['status']['code'], 200)
Exemplo n.º 3
0
def login():
    """
    Login into mxcube application.

    :returns: Response Object, Content-Type: application/json, an object
    containing following info:

       {'status':{ 'code': 'ok', 'msg': msg },
        'Proposal': proposal,
        'session': todays_session,
        'local_contact': local_contact,
        'person': someone,
        'laboratory': a_laboratory]}

    Status code set to:
       200: On success
       409: Error, could not log in
    """
    global LOGGED_IN_USER

    content = request.get_json()
    loginID = content['proposal']
    password = content['password']

    if LOGGED_IN_USER is not None and LOGGED_IN_USER != loginID:
        data = {"code": "", "msg": "Another user is already logged in"}
        resp = jsonify(data)
        resp.code = 409
        return resp

    login_res = limsutils.lims_login(loginID, password)

    if login_res['status']['code'] == 'ok':
        session['loginInfo'] = {'loginID': loginID,
                                'password': password,
                                'loginRes': login_res}

        LOGGED_IN_USER = loginID

        # Create a new queue just in case any previous queue was not cleared
        # properly
        mxcube.queue = qutils.new_queue()

        # For the moment not loading queue from persistent storage (redis),
        # uncomment to enable loading.
        # qutils.load_queue(session)
        # logging.getLogger('HWR').info('Loaded queue')
        logging.getLogger('HWR').info('[QUEUE] %s ' % qutils.queue_to_json())

        if not remote_access.MASTER:
            remote_access.set_master(session.sid)

    return jsonify(login_res['status'])
Exemplo n.º 4
0
def login():
    """
    Login into mxcube application.

    :returns: Response Object, Content-Type: application/json, an object
    containing following info:

       {'status':{ 'code': 'ok', 'msg': msg },
        'Proposal': proposal,
        'session': todays_session,
        'local_contact': local_contact,
        'person': someone,
        'laboratory': a_laboratory]}

    Status code set to:
       200: On success
       409: Error, could not log in
    """
    global LOGGED_IN_USER

    content = request.get_json()
    loginID = content['proposal']
    password = content['password']

    if LOGGED_IN_USER is not None and LOGGED_IN_USER != loginID:
        data = {"code": "", "msg": "Another user is already logged in"}
        return make_response(data, 409)

    login_res = limsutils.lims_login(loginID, password)

    if login_res['status']['code'] == 'ok':
        session['loginInfo'] = {
            'loginID': loginID,
            'password': password,
            'loginRes': login_res
        }

        LOGGED_IN_USER = loginID

        # Create a new queue just in case any previous queue was not cleared
        # properly
        mxcube.queue = qutils.new_queue()

        # For the moment not loading queue from persistent storage (redis),
        # uncomment to enable loading.
        #qutils.load_queue(session)
        #logging.getLogger('HWR').info('Loaded queue')
        logging.getLogger('HWR').info('[QUEUE] %s ' % qutils.queue_to_json())

        if not remote_access.MASTER:
            remote_access.set_master(session.sid)

    return make_response(login_res['status']['code'], 200)
Exemplo n.º 5
0
def login():
    """
    Login into mxcube application.

    :returns: Response Object, Content-Type: application/json, an object
    containing following info:

       {'status':{ 'code': 'ok', 'msg': msg },
        'Proposal': proposal,
        'session': todays_session,
        'local_contact': local_contact,
        'person': someone,
        'laboratory': a_laboratory]}

    Status code set to:
       200: On success
       409: Error, could not log in
    """
    params = request.get_json()
    loginID = params.get("proposal", "")
    password = params.get("password", "")

    try:
        login_res = limsutils.lims_login(loginID, password)
        inhouse = limsutils.lims_is_inhouse(login_res)

        info = {
            "valid": limsutils.lims_valid_login(login_res),
            "local": is_local_host(),
            "existing_session": limsutils.lims_existing_session(login_res),
            "inhouse": inhouse
        }

        _users = logged_in_users(exclude_inhouse=True)

        # Only allow in-house log-in from local host
        if inhouse and not (inhouse and is_local_host()):
            return deny_access("In-house only allowed from localhost")

        # Only allow other users to log-in if they are from the same proposal
        if (not inhouse) and _users and (loginID not in _users):
            return deny_access("Another user is already logged in")

        # Only allow local login when remote is disabled
        if not mxcube.ALLOW_REMOTE and not is_local_host():
            return deny_access("Remote access disabled")

        # Only allow remote logins with existing sessions
        if limsutils.lims_valid_login(login_res) and is_local_host():
            msg = "[LOGIN] Valid login from local host (%s)" % str(info)
            logging.getLogger("HWR").info(msg)
        elif limsutils.lims_valid_login(login_res) and \
             limsutils.lims_existing_session(login_res):
            msg = "[LOGIN] Valid remote login from %s with existing session (%s)"
            msg += msg % (remote_addr(), str(info))
            logging.getLogger("HWR").info(msg)
        else:
            logging.getLogger("HWR").info("Invalid login %s" % info)
            return deny_access(str(info))
    except:
        return deny_access("")
    else:
        add_user(create_user(loginID, remote_addr(), session.sid))

        session['loginInfo'] = {
            'loginID': loginID,
            'password': password,
            'loginRes': login_res
        }

        # Create a new queue just in case any previous queue was not cleared
        # properly
        mxcube.queue = qutils.new_queue()

        # For the moment not loading queue from persistent storage (redis),
        # uncomment to enable loading.
        # qutils.load_queue(session)
        # logging.getLogger('HWR').info('Loaded queue')
        logging.getLogger('HWR').info('[QUEUE] %s ' % qutils.queue_to_json())

        if not get_operator():
            set_operator(session.sid)

        return jsonify(login_res['status'])