Пример #1
0
    def DELETE(self, name):
        """ 删除当前存储中的群集 """

        res = {"msg": None, "code": 0, "success": False}
        logger.info("the name that will delete is %s" % name)

        if name in ("leader", "active", "all"):
            res.update(msg="DELETE: name reserved for the system key words",
                       code=-1031)

        elif self.isActive(name):
            res.update(msg="DELETE: not allowed to delete the active cluster",
                       code=-1032)

        elif self.isMember(name):
            swarm = self.getOne(name)
            logger.info("Will delete swarm cluster is %s" % swarm)
            self._swarms.remove(swarm)
            if self.isMember(name):
                logger.info("Delete fail")
                res.update(success=False)
            else:
                logger.info("Delete successfully, pickle current swarm")
                self._pickle(self._swarms)
                res.update(success=True)

        else:
            res.update(msg="DELETE: this swarm cluster does not exist",
                       code=-1030)

        logger.info(res)
        return res
Пример #2
0
 def getUserProfile(self, uid, getBind=False):
     """ 查询用户资料
     @param uid str: 用户id
     """
     res = dict(msg=None, code=1)
     key = "passport:user:profile:{}".format(uid)
     try:
         if self.cache_enable is False:
             raise
         data = json.loads(self.redis.get(key))
         if data:
             logger.info("Hit getUserProfile Cache")
         else:
             raise
     except:
         sql = "SELECT register_source,register_ip,nick_name,domain_name,gender,birthday,signature,avatar,location,ctime,mtime,is_realname,is_admin,lock_nick_name,lock_domain_name FROM user_profile WHERE uid=%s"
         if uid and isinstance(uid, (str, unicode)) and len(uid) == 22:
             try:
                 data = self.mysql.get(sql, uid)
             except Exception, e:
                 logger.error(e, exc_info=True)
                 res.update(msg="System is abnormal")
             else:
                 res.update(data=data, code=0)
                 pipe = self.redis.pipeline()
                 pipe.set(key, json.dumps(data))
                 pipe.expire(key, 3600)
                 pipe.execute()
         else:
             res.update(msg="There are invalid parameters", code=2)
Пример #3
0
 def listUserApp(self):
     """ 查询userapp应用列表 """
     res = dict(msg=None, code=1)
     key = "passport:user:apps"
     try:
         if self.cache_enable is False:
             raise
         data = json.loads(self.redis.get(key))
         if data:
             logger.info("Hit listUserApps Cache")
         else:
             raise
     except:
         sql = "SELECT id,name,description,app_id,app_secret,app_redirect_url,ctime,mtime FROM sso_apps"
         try:
             data = self.mysql.query(sql)
         except Exception, e:
             logger.error(e, exc_info=True)
             res.update(msg="System is abnormal")
         else:
             res.update(data=data, code=0)
             pipe = self.redis.pipeline()
             pipe.set(key, json.dumps(data))
             pipe.expire(key, 600)
             pipe.execute()
Пример #4
0
    def get(self):
        """ 查询私有仓 """

        query = request.args.get("q")
        ImageName = request.args.get("ImageName")
        ImageId = request.args.get("ImageId")
        tag = request.args.get("tag")

        res = {"msg": None, "data": None}
        if query == "url":
            res.update(data=g.registry.url)
        elif query == "status":
            res.update(data=g.registry.status)
        elif query == "version":
            res.update(data=g.registry.version)
        elif query == "all_repository":
            res.update(data=g.registry._list_all_repository)
        elif query == "all_tag":
            res.update(data=g.registry._list_repository_tag(ImageName))
        elif query == "all_imageId_ancestry":
            res.update(data=g.registry._list_imageId_ancestry(ImageId))
        elif query == "imageId_info":
            res.update(data=g.registry._get_imageId_info(ImageId))
        logger.info(res)
        return res
Пример #5
0
    def GET(self, get, **kwargs):

        res = {"msg": None, "code": 0}
        checkState = kwargs.get("checkState", False)
        UpdateManager = kwargs.get("UpdateManager", False)
        logger.info("get %s request, the query params is %s" % (get, kwargs))

        if not isinstance(get, (str, unicode)) or not get:
            res.update(msg="GET: query params type error or none", code=-1010)
        else:
            get = get.lower()
            if get == "all":
                res.update(data=self.getSwarm(checkState, UpdateManager))
            elif get == "active":
                res.update(data=self.getActive)
            elif get == "leader":
                res.update(data=self._checkSwarmLeader(self.getActive))
            elif get == "member":
                res.update(data=self.getMember)
            elif get == "method":
                res.update(data=self.getMethod)
            else:
                if self.isMember(get):
                    res.update(data=self.getOne(get))
                else:
                    res.update(msg="No such swarm", code=-1011)

        logger.info(res)
        return res
Пример #6
0
 def unbind(self, uid, identity_type):
     """解绑账号,要求已经登录系统
     参数:
         @param uid str: 用户id
         @param identity_type int: 账号类型,参见`oauth2_name2type`函数
     流程:
         1. 检测此`identity_type`是否是否为注册源
         2. 是注册源(使用此`identity_type`直接登录用户):
             2.1 只有绑定了邮箱、手机以及设置了密码才允许解绑;
             2.2 上一条校验通过,则删除`user_auth`中`identity_type`对应条目
         3. 不是注册源(使用此`identity_type`绑定的用户):
             3.1 直接删除`user_auth`中`identity_type`对应条目
     """
     res = dict(msg=None, code=1)
     if uid and identity_type and identity_type in (3, 4, 5, 6, 7, 8, 9):
         register_source = self.__get_registerSource(uid)
         if register_source and isinstance(register_source, int):
             if register_source == identity_type:
                 # 是注册源流程
                 identity_types = self.__list_identity_type(uid)
                 if 2 in identity_types or 1 in identity_types:
                     # 这里需设计为绑定了2-email、3-mobile时已经设置密码
                     res.update(self.__remove_identity_type(uid, identity_type))
                 else:
                     res.update(msg="Please bind the email or phone first", code=2)
             else:
                 # 非注册源流程
                 res.update(self.__remove_identity_type(uid, identity_type))
         else:
             res.update(msg="System is abnormal")
     else:
         res.update(msg="Check failed")
     logger.info(res)
     return res
Пример #7
0
def usersecurity():
    res = dict(msg=None, code=1)
    Action = request.args.get("Action")
    if request.method == "GET":
        if Action == "getSessions":
            sd = analysis_sessionId(request.cookies.get("sessionId"))
            if sd:
                res.update(code=0)
                data = dict()
                # 获取当前会话
                if request.args.get("getCurrentSession", True) in (True, "True", "true"):
                    browserType, browserDevice, browserOs, browserFamily = parse_userAgent(request.headers.get("User-Agent"))
                    area = getIpArea(g.ip)
                    if len(area.split()) >= 3:
                        area = area.split()[2]
                    CurrentSession = dict(iat=sd['iat'], exp=sd['exp'], browser=dict(family=" ".join(browserFamily.split()[:-1]), os=browserOs), ip=g.ip, area=area)
                    if g.sid:
                        CurrentSession["session"] = g.api.usersso.ssoGetWithSid(g.sid, True)
                    data["CurrentSession"]=CurrentSession
                # 获取其他会话
                if request.args.get("getOtherSession") in (True, "True", "true"):
                    OtherSession = [ g.api.usersso.ssoGetWithSid(sid, True) for sid in g.api.usersso.ssoGetRegisteredUserSid(g.uid) if g.sid != sid and g.api.usersso.ssoExistWithSid(sid) ]
                    data["OtherSession"] = OtherSession
                res["data"] = data
        elif Action == "getLoginHistory":
            # 获取登录历史
            sort = request.args.get("sort") or "desc"
            page = request.args.get("page") or 1
            limit = request.args.get("limit") or 10
            res = g.api.userprofile.listUserLoginHistory(uid=g.uid, page=page, limit=limit, sort=sort)
    logger.info(res)
    return jsonify(dfr(res))
Пример #8
0
def userprofile():
    res = dict(msg=None, code=1)
    if request.method == "GET":
        getBind = True if request.args.get("getBind") in ("true", "True", True) else False
        res = g.api.userprofile.getUserProfile(g.uid, getBind)
    elif request.method == "POST":
        Action = request.args.get("Action")
        if Action == "bindLauth":
            account = request.form.get("account")
            vcode = request.form.get("vcode")
            password = request.form.get("password")
            auth = Authentication()
            res = auth.bindLauth(uid=g.uid, account=account, vcode=vcode, password=password)
            if res["success"] == True and res["show_realname_tip"] == True:
                res['set_realname'] = g.api.userprofile.updateUserRealname(g.uid)
    elif request.method == "PUT":
        """修改个人资料,包含:基本资料、密码、头像、社交账号绑定"""
        Action = request.args.get("Action")
        if Action == "profile":
            data = {k: v for k, v in request.form.iteritems() if k in ("nick_name", "domain_name", "birthday", "location", "gender", "signature")}
            res = g.api.userprofile.updateUserProfile(uid=g.uid, **data)
            if res["code"] == 0:
                # 同步基本资料
                g.api.usersso.clientsConSync(g.api.userapp.getUserApp, g.uid, dict(CallbackType="user_profile", CallbackData=data))
        elif Action == "password":
            nowpass = request.form.get("nowpass")
            newpass = request.form.get("newpass")
            repass = request.form.get("repass")
            res = g.api.userprofile.updateUserPassword(uid=g.uid, nowpass=nowpass, newpass=newpass, repass=repass)
    logger.info(res)
    return jsonify(dfr(res))
Пример #9
0
    def RollingUpgrade(self, serviceFlag, tag):
        """ 服务滚动升级 """

        res = {"msg": None, "code": 0}
        logger.info("Update service flag(id/name) is %s, tag is %s" %
                    (serviceFlag, tag))

        #check params
        if not serviceFlag:
            logger.warn("service id/name is empty")
            res.update(msg="service id/name is empty", code=60000)
            logger.info(res)
            return res

        if not tag:
            res.update(msg="tag error", code=60001)
            logger.info(res)
            return res

        #check leader
        if not self.leader:
            res.update(msg="No active swarm", code=-1000)
            logger.info(res)
            return res

        data = self.GET(service=serviceFlag, core=True,
                        core_convert=False).get("data")[0]
        Image = "{}:{}".format(data.get("Image").split(":")[0], tag)
        res.update(self.PUT(serviceFlag, image=Image))
        logger.info(res)
        return res
Пример #10
0
 def oauth2_signUp(self, openid, register_ip):
     """OAuth直接登录时注册入系统
     @param openid str: 加密的openid,用以获取缓存中数据userinfo,格式是:
         userinfo dict: 用户信息,必须包含`openid`,`identity_type`,`avatar`,`nick_name`
     @param register_ip str: 注册IP地址
     """
     res = dict(msg=None, success=False)
     userinfo = self.__oauth2_getUserinfo(openid)
     logger.debug(userinfo)
     logger.debug(type(userinfo))
     if userinfo and isinstance(userinfo, dict) and "avatar" in userinfo and "nick_name" in userinfo and "openid" in userinfo and "access_token" in userinfo and "identity_type" in userinfo:
         openid = userinfo["openid"]
         access_token = userinfo["access_token"]
         identity_type = int(userinfo["identity_type"])
         avatar = userinfo["avatar"]
         nick_name = userinfo["nick_name"]
         gender = int(userinfo.get("gender") or 2)
         signature = userinfo.get("signature") or ""
         location = userinfo.get("location") or ""
         expire_time = userinfo.get("expire_time") or 0
         guid = gen_uniqueId()
         logger.debug("check test: guid length: {}, identifier: {}, identity_type:{}, identity_type: {}, certificate: {}".format(len(guid), openid, identity_type, type(identity_type), access_token))
         define_profile_sql = "INSERT INTO user_profile (uid, register_source, register_ip, nick_name, gender, signature, avatar, location, ctime, is_realname, is_admin) VALUES ('%s', %d, '%s', '%s', %d, '%s', '%s', '%s', %d, %d, %d)" % (guid, identity_type, register_ip, nick_name, gender, signature, avatar, location, get_current_timestamp(), 0, 0)
         upts = self.__signUp_transacion(guid=guid, identifier=openid, identity_type=identity_type, certificate=access_token, verified=1, register_ip=register_ip, expire_time=expire_time, define_profile_sql=define_profile_sql)
         res.update(upts)
         if res["success"]:
             self.__oauth2_delUserinfo(openid)
             res.update(identity_type=identity_type, uid=guid)
     else:
         res.update(msg="Check failed")
     logger.info(res)
     return res
Пример #11
0
def usermsg():
    res = dict(msg=None, code=1)
    Action = request.args.get("Action")
    if request.method == "POST":
        if Action == "addMessage":
            res = g.api.usermsg.push_message(
                g.uid, request.form.get("msgContent"),
                request.form.get("msgType", "system"))
        elif Action == "markMessage":
            res = g.api.usermsg.markstatus_message(g.uid,
                                                   request.form.get("msgId"))
    elif request.method == "GET":
        if Action == "getCount":
            res = g.api.usermsg.count_message(
                g.uid,
                request.args.get("msgStatus") or 1)
        elif Action == "getList":
            res = g.api.usermsg.pull_message(
                g.uid,
                request.args.get("msgStatus") or 1,
                request.args.get("msgType"),
                True if request.args.get("desc", True) in (True, "True",
                                                           "true") else False)
    elif request.method == "DELETE":
        if Action == "delMessage":
            res = g.api.usermsg.delete_message(g.uid,
                                               request.form.get("msgId"))
        elif Action == "clearMessage":
            res = g.api.usermsg.clear_message(g.uid)
    logger.info(res)
    return jsonify(dfr(res))
Пример #12
0
def userprofile():
    res = dict(msg=None, code=1)
    if request.method == "GET":
        getBind = True if request.args.get("getBind") in ("true", "True",
                                                          True) else False
        res = g.api.userprofile.getUserProfile(g.uid, getBind)
    elif request.method == "PUT":
        """修改个人资料,包含:基本资料、密码、头像、社交账号绑定"""
        Action = request.args.get("Action")
        if Action == "profile":
            data = {
                k: v
                for k, v in request.form.iteritems()
                if k in ("nick_name", "domain_name", "birthday", "location",
                         "gender", "signature")
            }
            res = g.api.userprofile.updateUserProfile(uid=g.uid, **data)
            if res["code"] == 0:
                # 同步基本资料
                g.api.usersso.clientsConSync(
                    g.api.userapp.getUserApp, g.uid,
                    dict(CallbackType="user_profile", CallbackData=data))
        elif Action == "password":
            nowpass = request.form.get("nowpass")
            newpass = request.form.get("newpass")
            repass = request.form.get("repass")
            res = g.api.userprofile.updateUserPassword(uid=g.uid,
                                                       nowpass=nowpass,
                                                       newpass=newpass,
                                                       repass=repass)
    logger.info(res)
    return jsonify(dfr(res))
Пример #13
0
    def POST(self, swarmName, swarmIp):
        """ add a swarm cluster into current, check, pickle. """

        res = {"msg": None, "code": 0}
        swarmIp = swarmIp.strip()
        swarmName = swarmName.strip()
        logger.debug(
            "post a swarm cluster, name is %s, ip is %s, check ip is %s" %
            (swarmName, swarmIp, ip_check(swarmIp)))

        if not swarmName or not swarmIp or not ip_check(swarmIp):
            res.update(msg="POST: data params error", code=-1020)
        elif self.isMember(swarmName):
            res.update(msg="POST: swarm cluster already exists", code=-1021)
        else:
            #access node ip's info, and get all remote managers
            url = Splice(netloc=swarmIp, port=self.port, path='/info').geturl
            swarm = dict(name=swarmName)
            logger.info(
                "init a swarm cluter named %s, will get swarm ip info, that url is %s"
                % (swarmName, url))
            try:
                nodeinfo = requests.get(url,
                                        timeout=self.timeout,
                                        verify=self.verify).json()
                logger.debug("get swarm ip info, response is %s" % nodeinfo)
                swarm["manager"] = [
                    nodes["Addr"].split(":")[0]
                    for nodes in nodeinfo["Swarm"]["RemoteManagers"]
                ]
            except Exception, e:
                logger.error(e, exc_info=True)
                res.update(msg="POST: access the node ip has exception",
                           code=-1022)
            else:
Пример #14
0
 def __init__(self, port=2375, timeout=2, ActiveSwarm=None):
     self.port      = port
     self.timeout   = timeout
     self.verify    = False
     self.swarm     = ActiveSwarm
     self.leader    = self._checkSwarmLeader(self.swarm) if self.swarm != {} else None
     logger.info("Network Api Init, ActiveSwarm is %s, the leader is %s" %(self.swarm, self.leader))
Пример #15
0
 def oauth2_bindLogin(self, openid, account, password):
     """OAuth绑定账号并登录系统
     @param openid str: 加密的openid
     @param account str: 同`signIn`中account
     @param password str: 同`signIn`中password
     """
     res = dict(msg=None, success=False)
     userinfo = self.__oauth2_getUserinfo(openid)
     logger.debug(userinfo)
     logger.debug(type(userinfo))
     if userinfo and isinstance(userinfo, dict) and "avatar" in userinfo and "nick_name" in userinfo and "openid" in userinfo and "access_token" in userinfo and "identity_type" in userinfo:
         res = self.signIn(account, password)
         openid = userinfo["openid"]
         logger.debug(res)
         if res["success"] is True:
             # 登录成功,即可绑定openid到uid,无需校验(goto_signUp已经校验)
             uid = res["uid"]
             access_token = userinfo["access_token"]
             identity_type = int(userinfo["identity_type"])
             expire_time = userinfo.get("expire_time") or 0
             upts = self.__signUp_transacion(guid=uid, identifier=openid, identity_type=identity_type, certificate=access_token, verified=1, expire_time=expire_time, use_profile_sql=False)
             res.update(upts)
             if res["success"] is True:
                 self.__oauth2_delUserinfo(openid)
     else:
         res.update(msg="Check failed")
     logger.info(res)
     return res
Пример #16
0
def misc_getDownTime():
    """Vaptcha宕机模式
    like: ?data=request&_t=1516092685906
    """
    data = request.args.get("data")
    logger.info("vaptcha into downtime, get data: {}, query string: {}".format(
        data, request.args.to_dict()))
    return jsonify(json.loads(vaptcha.downtime(data)))
Пример #17
0
 def callback(result):
     logger.info(result)
     if result["sender"] == "up2local":
         result["src"] = url_for("static",
                                 filename=join(UPLOAD_FOLDER,
                                               upload_path, filename),
                                 _external=True)
     data.append(dfr(result))
Пример #18
0
    def post(self):
        """ 创建网络 """

        ip = request.form.get("ip")
        role = request.form.get("role", "Worker")
        logger.info(request.form)

        return g.node.POST(ip=ip, role=role)
Пример #19
0
 def __signUp_transacion(self, guid, identifier, identity_type, certificate, verified, register_ip="", expire_time=0, use_profile_sql=True, define_profile_sql=None):
     ''' begin的方式使用事务注册账号,
     参数:
         @param guid str: 系统账号唯一标识
         @param identifier str: 手机号、邮箱或第三方openid
         @param identity_type int: 账号类型,参见`oauth2_name2type`函数
         @param certificate str: 加盐密码或第三方access_token
         @param verified int: 是否已验证 0-未验证 1-已验证
         @param register_ip str: 注册IP地址
         @param expire_time int: 特指OAuth过期时间戳,暂时保留
         @param use_profile_sql bool: 定义是否执行define_profile_sql
         @param define_profile_sql str: 自定义写入`user_profile`表的sql(需要完整可直接执行SQL)
     流程:
         1、写入`user_auth`表
         2、写入`user_profile`表
     返回字典:
         success bool 表示注册是否成功;
         msg str 表示提示信息。
     '''
     res = dict(success=False, msg=None)
     # 校验
     if guid and identifier and \
             identity_type and \
             certificate and \
             verified and \
             isinstance(guid, (str, unicode)) and \
             len(guid) == 22 and \
             identity_type in (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) and \
             verified in (1, 0):
         ctime = get_current_timestamp()
         try:
             logger.debug("transaction, start")
             self.db._db.begin()
             try:
                 sql_1 = "INSERT INTO user_auth (uid, identity_type, identifier, certificate, verified, status, ctime, etime) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)"
                 info = self.db.insert(sql_1, guid, identity_type, identifier, certificate, verified, 1, ctime, expire_time)
             except IntegrityError:
                 res.update(msg="Account already exists")
             except Exception, e:
                 logger.error(e, exc_info=True)
                 res.update(msg="System is abnormal")
             else:
                 if use_profile_sql is True:
                     if define_profile_sql:
                         sql_2 = define_profile_sql
                         logger.info("execute define_profile_sql: {}".format(sql_2))
                         try:
                             info = self.db.execute(sql_2)
                         except:
                             raise
                     else:
                         sql_2 = "INSERT INTO user_profile (uid, register_source, register_ip, ctime, is_realname, is_admin) VALUES (%s, %s, %s, %s, %s, %s)"
                         try:
                             info = self.db.insert(sql_2, guid, identity_type, register_ip, ctime, 0, 0)
                         except:
                             raise
                 logger.debug('transaction, commit')
                 self.db._db.commit()
Пример #20
0
def before_request():
    g.requestId = gen_requestId()
    g.username = request.cookies.get("username", "")
    g.sessionId = request.cookies.get("sessionId", "")
    g.expires = request.cookies.get("time", "")
    g.credential = '.'.join([g.username, g.expires, g.sessionId])
    g.signin = isLogged_in(g.credential)
    logger.info("Start Once Access, this requestId is %s, signin:%s" %
                (g.requestId, g.signin))
Пример #21
0
    def _list_repository_tag(self, ImageName):
        """ 列出某个镜像所有标签 """

        ReqUrl = self._baseUrl + "/repositories/{}/tags".format(ImageName) if self.version == 1 else self._baseUrl + "/{}/tags/list".format(ImageName)
        logger.info("_list_repository_tag for url {}".format(ReqUrl))
        try:
            Tags = requests.get(ReqUrl, timeout=self.timeout, verify=self.verify).json()
        except Exception,e:
            logger.error(e, exc_info=True)
            return {}
Пример #22
0
    def _list_imageId_ancestry(self, ImageId):
        """ 列出某个镜像所有父镜像 """

        ReqUrl = self._baseUrl + "/images/{}/ancestry".format(ImageId)
        logger.info("_list_imageId_ancestry for url {}".format(ReqUrl))
        try:
            ImageIds = requests.get(ReqUrl, timeout=self.timeout, verify=self.verify).json()
        except Exception,e:
            logger.error(e, exc_info=True)
            return False
Пример #23
0
 def __init__(self, timeout=2, Registry={}):
     self.timeout   = timeout
     self.verify    = False
     #Base Registry info
     self._url  = Registry["RegistryAddr"]
     self._ver  = Registry["RegistryVersion"]
     self._auth = Registry["RegistryAuthentication"]
     #Instantiation the registry
     self._baseUrl = SpliceURL.Modify(self._url, path="/v1").geturl if int(self._ver) == 1 else SpliceURL.Modify(self._url, path="/v2").geturl
     logger.info("Registry API Init, registry is {}, status is {}, _baseUrl is {}".format(self._url, self.status, self._baseUrl))
Пример #24
0
    def _delete_repository(self, ImageName):
        """ 删除一个镜像 """

        ReqUrl = self._baseUrl + "/repositories/{}/".format(ImageName)
        logger.info("_delete_repository for url {}".format(ReqUrl))
        try:
            delete_repo_result = requests.delete(ReqUrl, timeout=self.timeout, verify=self.verify).json()
        except Exception,e:
            logger.error(e, exc_info=True)
            return False
Пример #25
0
    def _search_all_repository(self, q):
        """ 搜索私有仓所有镜像 """

        ReqUrl = self._baseUrl + "/search" if self.version == 1 else self._baseUrl + "/_catalog"
        logger.info("_search_all_repository for url {}".format(ReqUrl))
        try:
            Images = requests.get(ReqUrl, timeout=self.timeout, verify=self.verify, params={"q": q}).json()
        except Exception,e:
            logger.error(e, exc_info=True)
            return []
Пример #26
0
 def post(self):
     username = request.form.get("username", "")
     sessionId = request.form.get("sessionId", "")
     expires = request.form.get("time", "")
     logger.debug(g.username)
     logger.debug(g.sessionId)
     logger.debug(g.expires)
     signin = isLogged_in('.'.join([username, expires, sessionId]))
     logger.info("CREATE SSO %s" % signin)
     return {"success": signin}
Пример #27
0
def authorized():
    """ Client SSO 单点登录、注销入口, 根据`Action`参数判断是`ssoLogin`还是`ssoLogout` """
    Action = request.args.get("Action")
    if Action == "ssoLogin":
        # 单点登录
        ticket = request.args.get("ticket")
        if request.method == "GET" and ticket and g.signin == False:
            resp = sso_request("{}/sso/validate".format(sso_server), dict(Action="validate_ticket"), dict(ticket=ticket, app_name=SSO["app_name"], get_userinfo=True, get_userbind=False))
            logger.debug("SSO check ticket resp: {}".format(resp))
            if resp and isinstance(resp, dict) and "success" in resp and "uid" in resp:
                if resp["success"] is True:
                    uid = resp["uid"]
                    sid = resp["sid"]
                    expire = int(resp["expire"])
                    # 获取用户信息,若不需要,可将get_userinfo=True改为False,并注释下两行
                    g.userinfo = resp["userinfo"].get("data") or dict()
                    set_userinfo(uid, g.userinfo, expire)
                    logger.debug(g.userinfo)
                    # 授权令牌验证通过,设置局部会话,允许登录
                    sessionId = set_sessionId(uid=uid, seconds=expire, sid=sid)
                    response = make_response(redirect(get_redirect_url("front.index")))
                    response.set_cookie(key="sessionId", value=sessionId, max_age=expire, httponly=True, secure=False if request.url_root.split("://")[0] == "http" else True)
                    return response
    elif Action == "ssoLogout":
        # 单点注销
        ReturnUrl = request.args.get("ReturnUrl") or get_referrer_url() or url_for("front.index", _external=True)
        NextUrl   = "{}/signOut?ReturnUrl={}".format(sso_server, ReturnUrl)
        app_name  = request.args.get("app_name")
        if request.method == "GET" and NextUrl and app_name and g.signin == True and app_name == SSO["app_name"]:
            response = make_response(redirect(NextUrl))
            response.set_cookie(key="sessionId", value="", expires=0)
            return response
    elif Action == "ssoConSync":
        # 数据同步:参数中必须包含大写的hmac_sha256(app_name:app_id:app_secret)的signature值
        signature = request.args.get("signature")
        if request.method == "POST" and signature and signature == hmac_sha256("{}:{}:{}".format(SSO["app_name"], SSO["app_id"], SSO["app_secret"])).upper():
            try:
                data = json.loads(request.form.get("data"))
                ct = data["CallbackType"]
                cd = data["CallbackData"]
                uid = data["uid"]
                token = data["token"]
            except Exception,e:
                logger.warning(e)
            else:
                logger.info("ssoConSync with uid: {} -> {}: {}".format(uid, ct, cd))
                resp = sso_request("{}/sso/validate".format(sso_server), dict(Action="validate_sync"), dict(token=token, uid=uid))
                if resp and isinstance(resp, dict) and resp.get("success") is True:
                    # 之后根据不同类型的ct处理cd
                    logger.debug("ssoConSync is ok")
                    if ct == "user_profile":
                        g.userinfo.update(cd)
                    elif ct == "user_avatar":
                        g.userinfo["avatar"] = cd
                    return jsonify(msg="Synchronization completed", success=set_userinfo(uid, g.userinfo), app_name=SSO["app_name"])
Пример #28
0
def UserAuth_Login(username, password):

    sql = " SELECT lauth_username, lauth_password FROM user_lauth WHERE lauth_username=%s"
    data= mysql.get(sql, username)
    logger.debug("mysql data is %s, request %s:%s" %(data, username, md5(password)))
    if data and username == data.get("lauth_username") and md5(password) == data.get("lauth_password"):
        logger.info("%s Sign in successfully" %username)
        return True
    else:
        logger.info("%s Sign in failed" %username)
        return False
Пример #29
0
    def _checkSwarmManager(self, ip):
        """ 查询节点的Manager """

        url   = Splice(netloc=ip, port=self.port, path='/info').geturl
        logger.info("Get or Update swarm manager, that url is %s" %url)
        try:
            nodeinfo = requests.get(url, timeout=self.timeout, verify=self.verify).json()
            logger.debug("Get or Update swarm manager, response is %s" %nodeinfo)
            managers = [ nodes["Addr"].split(":")[0] for nodes in nodeinfo["Swarm"]["RemoteManagers"] ]
        except Exception,e:
            logger.error(e, exc_info=True)
            return []
Пример #30
0
 def __init__(self, port=2375, timeout=2, ActiveSwarm={}):
     self.port = port
     self.verify = False
     self.timeout = timeout
     self.swarm = ActiveSwarm
     self.leader = self._checkSwarmLeader(
         self.swarm) if self.swarm != {} else None
     self.commaConvert = lambda string: [
         l for l in re.split(comma_Pat, string) if l
     ]
     logger.info("Service Api Init, ActiveSwarm is %s, the leader is %s" %
                 (self.swarm, self.leader))