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 } )
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)
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'])
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)
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'])