Esempio n. 1
0
def test(pea, proto):
    client123 = ACLClient(proto, pea.customHandle, 609)
    session = client123.login('aa', '1231')

    client = templClient(proto, pea.customHandle, 607)

    with open('tests/master-public.pem') as f:
        publicKey1 = f.read()
    with open('tests/master-private.pem') as f:
        privateKey1 = f.read()
    with open('tests/ghost-public.pem') as f:
        publicKey2 = f.read()
    with open('tests/ghost-private.pem') as f:
        privateKey2 = f.read()

    def success(msg):
        print "success"
    def failed(msg):
        print "failed"

    # client.upContent(session, 'OrderType::type','1.2',"enum OrderType::type\n\n{\nOTGFD = 0,\nSIMULATION = 1,\nIOC = 2,\nPOTF = 3\n};\n\n").then(
    #     success).catch(failed)
    # client.jsonRelation(session, 'IStrategy', '1.3').then(
    #     success).catch(failed)
    # client.baseCheck(session, 'Automaton', '1.0').then(
    #     success).catch(failed)
    # client.downLoad(session, 'OrderType::type', '1.2').then(
    #     success).catch(failed)
    # client.getJsonCon(session, 'OrderType::type', '1.2').then(
    #     success).catch(failed)
    # client.grantAuthority(session, '12').then(
    #       success).catch(failed)
    client.templMerge(session).then(
          success).catch(failed)
Esempio n. 2
0
def test(pea, proto):
    client123 = ACLClient(proto, pea.customHandle, 609)
    session = client123.login('aa', '1231')

    client = templClient(proto, pea.customHandle, 607)

    with open('tests/master-public.pem') as f:
        publicKey1 = f.read()
    with open('tests/master-private.pem') as f:
        privateKey1 = f.read()
    with open('tests/ghost-public.pem') as f:
        publicKey2 = f.read()
    with open('tests/ghost-private.pem') as f:
        privateKey2 = f.read()

    def success(msg):
        print "success"

    def failed(msg):
        print "failed"

    # client.upContent(session, 'OrderType::type','1.2',"enum OrderType::type\n\n{\nOTGFD = 0,\nSIMULATION = 1,\nIOC = 2,\nPOTF = 3\n};\n\n").then(
    #     success).catch(failed)
    # client.jsonRelation(session, 'IStrategy', '1.3').then(
    #     success).catch(failed)
    # client.baseCheck(session, 'Automaton', '1.0').then(
    #     success).catch(failed)
    # client.downLoad(session, 'OrderType::type', '1.2').then(
    #     success).catch(failed)
    # client.getJsonCon(session, 'OrderType::type', '1.2').then(
    #     success).catch(failed)
    # client.grantAuthority(session, '12').then(
    #       success).catch(failed)
    client.templMerge(session).then(success).catch(failed)
Esempio n. 3
0
 def onConnectionOpened(self, proto):
     try:
         self.securityClient = SecClient(proto, self.mesgHandle, 609)
         print '----securityClient connected successfully'
         self.aclClient = ACLClient(proto, self.mesgHandle, 609)
         print '----ACLClient connected successfully'
     except Exception as e:
         print e
Esempio n. 4
0
 def onConnectionOpened(self, proto):
     print '----begin login-----'
     self.aclClient = ACLClient(proto, self.mesgHandle, 609)
     self.securityClient = SecClient(proto, self.mesgHandle, 609)
     self.session = self.aclClient.login('bb', '1232')
     if 0 == self.session.userId and 0 == self.session.seqId:
         print '----login failed-----'
     else:
         print '----login success----'
Esempio n. 5
0
 def onConnectionOpened(self, proto):
     try:
         self.securityClient = SecClient(proto, self.mesgHandle, 609)
         print '----securityClient connected successfully'
         self.aclClient = ACLClient(proto, self.mesgHandle, 609)
         print '----ACLClient connected successfully'
     except Exception as e:
         print e
Esempio n. 6
0
 def onConnectionOpened(self, proto):
     print '----begin login-----'
     self.aclClient = ACLClient(proto, self.mesgHandle, 609)
     self.securityClient = SecClient(proto, self.mesgHandle, 609)
     self.session = self.aclClient.login('bb', '1232')
     if 0 == self.session.userId and 0 == self.session.seqId:
         print '----login failed-----'
     else:
         print '----login success----'
Esempio n. 7
0
def user(nickname):
    if nickname != session["uname"]:
        flash("you should login with acount: {0} firstly".format(nickname))
        return redirect(url_for("login"))

    user = dict()

    def myInformationSuccess(a):
        for k, v in a.items():
            user[k] = v

    def myInformationFailed(errMesg):
        print 'b'

    global userClientBasket
    aclClient = userClientBasket.getClient(session, "aclClient")
    loginSession = userClientBasket.getClient(session, "session")
    aclClient.myInformation(loginSession, [1, 3, 2, 4, 8])\
            .then(myInformationSuccess).catch(myInformationFailed).wait()

    form = EditForm()
    if form.validate_on_submit():
        userUpdate = dict()
        userUpdate[1] = form.username.data
        userUpdate[3] = form.email.data
        userUpdate[2] = form.telephone.data
        userUpdate[4] = form.introduction.data
        userUpdate[4] = userUpdate[4].encode('utf-8')

        def changeMyInformationSuccess(a):
            print a

        def changeMyInformationFailed(errMesg):
            print errMesg

        aclClient = ACLClient(app.proto, app.pea.customHandle, 609)
        aclClient.changeMyInformation(loginSession, userUpdate)\
            .then(changeMyInformationSuccess).catch(changeMyInformationFailed).wait()
        flash('Your changes have been saved.')
        return redirect(url_for('user', nickname=user['name']))
    else:
        user['intro'] = user['intro'].decode('utf-8')
        return render_template('user.html', user=user, form=form)
Esempio n. 8
0
def user(nickname):
    if nickname != session["uname"]:
        flash("you should login with acount: {0} firstly".format(nickname))
        return redirect(url_for("login"))

    user = dict()
    
    def myInformationSuccess(a):
        for k,v in a.items():
            user[k] = v
    
    def myInformationFailed(errMesg):
        print 'b'
    global userClientBasket
    aclClient = userClientBasket.getClient(session, "aclClient")
    loginSession = userClientBasket.getClient(session,"session")
    aclClient.myInformation(loginSession, [1, 3, 2, 4, 8])\
            .then(myInformationSuccess).catch(myInformationFailed).wait()

    form = EditForm()
    if form.validate_on_submit():
        userUpdate = dict()
        userUpdate[1] = form.username.data
        userUpdate[3] = form.email.data
        userUpdate[2] = form.telephone.data
        userUpdate[4] = form.introduction.data
        userUpdate[4] = userUpdate[4].encode('utf-8')

        def changeMyInformationSuccess(a):
            print a

        def changeMyInformationFailed(errMesg):
            print errMesg

        aclClient = ACLClient(app.proto, app.pea.customHandle, 609)
        aclClient.changeMyInformation(loginSession, userUpdate)\
            .then(changeMyInformationSuccess).catch(changeMyInformationFailed).wait()
        flash('Your changes have been saved.')
        return redirect(url_for('user',nickname = user['name']))
    else:
        user['intro'] = user['intro'].decode('utf-8')
        return render_template('user.html', user = user, form=form )
Esempio n. 9
0
def login():
    form = LoginForm()
    if form.validate_on_submit():
        uname = form.username.data
        pwd = form.password.data
        aclClient = ACLClient(app.proto, app.pea.customHandle, 609)
        configClient = ConfigureObjectClient(app.proto, app.pea.customHandle, 612)
        loginResult = aclClient.login(uname, pwd)

        if loginResult is not None and loginResult.seqId > 0:
            session['uname'] = form.username.data
            session['seqId'] = loginResult.seqId
            session['userId'] = loginResult.userId
            global userClientBasket
            userClientBasket.registClient(session, aclClient, "aclClient")
            userClientBasket.registClient(session, loginResult, "session")
            userClientBasket.registClient(session, configClient, "configClient")

            return redirect(url_for("index"))

        flash('Invalid username or password!')
    return render_template('login.html', title='Sign In', form=form)
Esempio n. 10
0
def login():
    form = LoginForm()
    if form.validate_on_submit():
        uname = form.username.data
        pwd = form.password.data
        aclClient = ACLClient(app.proto, app.pea.customHandle, 609)
        configClient = ConfigureObjectClient(app.proto, app.pea.customHandle,
                                             612)
        loginResult = aclClient.login(uname, pwd)

        if loginResult is not None and loginResult.seqId > 0:
            session['uname'] = form.username.data
            session['seqId'] = loginResult.seqId
            session['userId'] = loginResult.userId
            global userClientBasket
            userClientBasket.registClient(session, aclClient, "aclClient")
            userClientBasket.registClient(session, loginResult, "session")
            userClientBasket.registClient(session, configClient,
                                          "configClient")

            return redirect(url_for("index"))

        flash('Invalid username or password!')
    return render_template('login.html', title='Sign In', form=form)
Esempio n. 11
0
def test(pea, proto):
    client = ACLClient(proto, pea.customHandle, 609)

    session = client.login('bb', '1232')
    print 'login %s'% session
    # from twisted.internet import reactor, defer

    # def changeMyInformationSuccess(information):
    #     print 'changeMyInformationSuccess : %s ' % information
    # def changeMyInformationFailed(errMesg):
    #     print 'changeMyInformation  failed:%s' % ( errMesg)
    # client.changeMyInformation(session,{6: 'fas123123',2:'12312312331'})\
    #         .then(changeMyInformationSuccess).catch(changeMyInformationFailed)




    # def myInformationSuccess(information):
    #     for k,v in information.items():
    #         print 'myInformationSuccess : %s-%s' % (k,v)
    # def myInformationFailed(errMesg):
    #     print 'myInformationFailed :%s' % ( errMesg)
    # client.myInformation(session,[1,2,3,4,5,6,7]).then(myInformationSuccess).catch(myInformationFailed)

    # def myInformationSuccess(information):
    #     for k,v in information.items():
    #         print 'myInformationSuccess : %s-%s' % (k,v)
    # def myInformationFailed(errMesg):
    #     print 'myInformationFailed :%s' % ( errMesg)
    # client.otherInformation(session,[1,2,3,4,5,6,7,8,9],1).then(myInformationSuccess).catch(myInformationFailed)


    # def myInformationSuccess(information):
    #     for k in information:
    #         print 'myInformationSuccess : %s' % (k)
    # def myInformationFailed(errMesg):
    #     print 'myInformationFailed :%s' % ( errMesg)
    # client.allUserInformation(session,[1,2,3,4,5,6,7,8,9]).then(myInformationSuccess).catch(myInformationFailed)

    # def myInformationSuccess(information):
    #     for k in information:
    #         print 'myInformationSuccess : %s' % (k)
    #
    # def myInformationFailed(errMesg):
    #     print 'myInformationFailed :%s' % (errMesg)
    #
    # client.allResourceInformation(session).then(myInformationSuccess).catch(
    #     myInformationFailed)






    # def addResourceTypeSuccess( id):
    #     print 'addResourceType success:%d' % ( id)
    # def addResourceTypeFailed( errMesg):
    #     print 'addaddResourceType %s failed:%s' % ( errMesg)
    # client.addResourceType( session,'reqq','qq',(['q','qq'],))\
    #         .then(addResourceTypeSuccess).catch(addResourceTypeFailed)
    #
    #
    def addResourceSuccess( id):
        print 'addResource success: %d' % ( id)
    def addResourceFailed( errMesg):
        print 'addResource  failed:%s' % ( errMesg)

    client.addResource( session,3,'zzz','zzzz')\
            .then(addResourceSuccess).catch(addResourceFailed)
    #
    #
    # def addRoleSuccess( id):
    #     print 'addRole %s success: %d' % ( id)
    # def addroleFailed( errMesg):
    #     print 'addRole %s failed: %s' % (errMesg)
    # client.addRole( session,'trader',((5,(8,14)),))\
    #         .then(addRoleSuccess).catch(addroleFailed)
    #
    # def addUserSuccess( id):
    #     print 'addUser  success: %d' % ( id)
    # def addUserFailed( errMesg):
    #     print 'addUser %s failed: %s' % ( errMesg)
    # client.addUser( session,'qq','12345678912','sdfs12','sdf12','sdf123')\
    #         .then(addUserSuccess).catch(addUserFailed)
    #
    # def grantRoleSuccess(a):
    #     print 'grantRole to userId=%s success'
    # def grantRoleFailed(errMesg):
    #     print 'grantRole to userId=%s failed: %s' % ( errMesg)
    # client.grantRole( session,4,1)\
    #         .then(grantRoleSuccess).catch(grantRoleFailed)
    #
    # def changePasswordSuccess():
    #     print 'changePassword  success'
    # def changePasswordFailed( errMesg):
    #     print 'changePassword %s failed: %s' % ( errMesg)
    # client.changePassword( session,'1232')\
    #         .then(changePasswordSuccess).catch(changePasswordFailed)
    #
    # def listResourceSuccess(resources):
    #     print 'listResource  success :'
    #     for i in  resources:
    #         print i
    # def listResourceFailed(errMesg):
    #     print 'listResource  failed: %s' % ( errMesg)
    # client.listResource( session)\
    #         .then(listResourceSuccess).catch(listResourceFailed)
    #
    #
    # def listOtherResourceSuccess(resources):
    #     print 'listotherResource   success: '
    #     for i in  resources:
    #         print i
    # def listOtherResourceFailed( errMesg):
    #     print 'listotherResource  failed: %s' % ( errMesg)
    # client.listOtherResource( session,1)\
    #         .then(listOtherResourceSuccess).catch(listOtherResourceFailed)
    #
    # def grantPermissionSuccess(a):
    #     print 'grantPermission to roleId success'
    # def grantPermissionFailed(errMesg):
    #     print 'grantPermission to  failed: %s' % ( errMesg)
    # client.grantPermission( session,2,1,2)\
    #         .then(grantPermissionSuccess).catch(grantPermissionFailed)
    #
    #
    # def listRoleSuccess(roles):
    #     print 'listRole  success :'
    #     for i in  roles:
    #         print i
    # def listRoleFailed(errMesg):
    #     print 'listRole failed: %s' % ( errMesg)
    # client.listRole(  session)\
    #         .then(listRoleSuccess).catch(listRoleFailed)
    #
    # def listUserSuccess(users):
    #     print 'listUser  success :'
    #     for i in  users:
    #         print i
    # def listUserFailed(errMesg):
    #     print 'listUser failed: %s' % ( errMesg)
    # client.listUser( session)\
    #         .then(listUserSuccess).catch(listUserFailed)
    #
    #
    # def listPermissionSuccess(permissions):
    #     print 'listPermission  success :'
    #     for i in  permissions:
    #         print i
    # def listPermissionFailed(errMesg):
    #     print 'listPermission failed: %s' % ( errMesg)
    # client.listPermission( session)\
    #         .then(listPermissionSuccess).catch(listPermissionFailed)
    #
    # def listOtherPermissionSuccess(permissions):
    #     print 'list roleId Permission  success :'
    #     for i in  permissions:
    #         print i
    # def listOtherPermissionFailed( errMesg):
    #     print 'list roleId Permission failed: %s' % ( errMesg)
    # client.listOtherPermission( session,2)\
    #         .then(listOtherPermissionSuccess).catch(listOtherPermissionFailed)
    #
    # def changeUserNameSuccess(a):
    #     print 'changeUserName  success'
    # def changeUserNameFailed( errMesg):
    #     print 'changeUserName  failed: %s' % ( errMesg)
    # client.changeUserName(session,'bb')\
    #         .then(changeUserNameSuccess).catch(changeUserNameFailed)
    #
    # def changeRoleNameSuccess(a):
    #     print 'changeRoleName  success'
    # def changeRoleNameFailed( errMesg):
    #     print 'changeRoleName failed: %s' % ( errMesg)
    # client.changeRoleName( session,3,'ad')\
    #         .then(changeRoleNameSuccess).catch(changeRoleNameFailed)
    #
    #
    # def changePublicKeySuccess(a):
    #     print 'changePublicKey success'
    # def changePublicKeyFailed( errMesg):
    #     print 'changePublicKey %s failed: %s' % ( errMesg)
    # client.changePublicKey( session,'adddddddddd234')\
    #         .then(changePublicKeySuccess).catch(changePublicKeyFailed)
    #
    #
    #
    # def changePrivateKeySuccess(a):
    #     print 'changePrivateKey  success'
    # def changePrivateKeyFailed( errMesg):
    #     print 'changePrivateKey failed: %s'  % errMesg
    # client.changePrivateKey( session,'adddddddddd234')\
    #         .then(changePrivateKeySuccess).catch(changePrivateKeyFailed)
    #
    # def deleteResourceSuccess(a):
    #     print 'deleteResource success'
    # def deleteResourceFailed( errMesg):
    #     print 'deleteResource  failed: %s' % ( errMesg)
    # client.deleteResource( session,4)\
    #         .then(deleteResourceSuccess).catch(deleteResourceFailed)
    #
    #
    # def deleteUserSuccess(a):
    #     print 'deleteUser  success'
    # def deleteUserFailed( errMesg):
    #     print 'deleteUser  failed: %s' % ( errMesg)
    # client.deleteUser( session,5)\
    #         .then(deleteUserSuccess).catch(deleteUserFailed)
    #
    #
    # def deleteRoleSuccess(a):
    #     print 'deleteRole  success'
    # def deleteRoleFailed( errMesg):
    #     print 'deleteRole  failed: %s' % ( errMesg)
    # client.deleteRole( session,5)\
    #         .then(deleteRoleSuccess).catch(deleteRoleFailed)
    #
    #
    # def listLoginSuccess(Logins):
    #     print 'listLogin  success :'
    #     for i in  Logins:
    #         print i
    # def listLoginFailed(errMesg):
    #     print 'listLogin failed: %s' % ( errMesg)
    # client.listLogin( session)\
    #         .then(listLoginSuccess).catch(listLoginFailed)
    #
    # def inheritPermissionSuccess():
    #     print 'inheritPermission from roleId  success :'
    # def inheritPermissionFailed( errMesg):
    #     print 'inheritPermission from roleId   failed: %s' % ( errMesg)
    # client.inheritPermission( session,2,3)\
    #         .then(inheritPermissionSuccess).catch(inheritPermissionFailed)
    #
    #
    # def releaseRoleSuccess():
    #     print 'releaseRole  success '
    # def releaseRoleFailed( errMesg):
    #     print 'releaseRole  failed: %s' % ( errMesg)
    # client.releaseRole(session,4)\
    #         .then(releaseRoleSuccess).catch(releaseRoleFailed)
    #
    #
    # def myRoleSuccess(roles):
    #     print 'myRoleId-name  is %s -%s '% (roles[0],roles[1])
    # def myRoleFailed( errMesg):
    #     print 'myRole failed: %s' % ( errMesg)
    # client.myRole( session)\
    #         .then(myRoleSuccess).catch(myRoleFailed)
    #
    #
    # def listResourceTypeSuccess(ResourceTypes):
    #     print 'listResourceType  success :'
    #     for i in  ResourceTypes:
    #         print i.name
    # def listResourceTypeFailed(errMesg):
    #     print 'listResourceType failed: %s' % ( errMesg)
    # client.listResourceType( session)\
    #         .then(listResourceTypeSuccess).catch(listResourceTypeFailed)
    #
    #
    # def hasPermissionSuccess( result):
    #     print 'hasPermission  id is %s '% (result)
    # def hasPermissionFailed( errMesg):
    #     print 'hasPermission  id failed: %s' % ( errMesg)
    # client.hasPermission( session, 1,1,1)\
    #         .then(hasPermissionSuccess).catch(hasPermissionFailed)
    #
    # def listTypeResourceSuccess(id,resources):
    #     print 'list TypeId= %s  success :' % id
    #     for i in  resources:
    #         print i
    # def listTypeResourceFailed(id, errMesg):
    #     print 'list TypeId= %s failed: %s' % (id, errMesg)
    # client.listTypeResource(session,4)\
    #         .then(listTypeResourceSuccess).catch(listTypeResourceFailed)
    print "begin logout"
    client.logout(session)

    print 'ACLClient test success!!! '
Esempio n. 12
0
class ConfigureObjectServer(MessagePlugin):

    conn = psycopg2.connect(database="config3",
                            user="******",
                            password="******",
                            host="127.0.0.1",
                            port="5432")
    configsql3 = ConfigureObjectSql(conn)

    def __init__(self, messageHandle):
        super(ConfigureObjectServer, self).__init__(messageHandle)

        self.handle('createconfigure:configureobjectproto', True,
                    self.onCreateConfigure)
        self.handle('deleteconfigure:configureobjectproto', True,
                    self.onDeleteConfigure)
        self.handle('createcollection:configureobjectproto', True,
                    self.onCreateCollection)
        self.handle('deletecollection:configureobjectproto', True,
                    self.onDeleteCollection)
        self.handle('getconfigure:configureobjectproto', True,
                    self.onGetConfigure)
        self.handle('getcollection:configureobjectproto', True,
                    self.onGetCollection)
        self.handle('grantcollection:configureobjectproto', True,
                    self.onGrantCollection)
        self.handle('revokecollection:configureobjectproto', True,
                    self.onRevokeCollection)
        self.handle('granconfigure:configureobjectproto', True,
                    self.onGrantConfigure)
        self.handle('revokeConfigure:configureobjectproto', True,
                    self.onRevokeCollection)
        self.handle('listcollections:configureobjectproto', True,
                    self.onListCollections)
        self.handle('listauthoritysharers:configureobjectproto', True,
                    self.onListAuthoritySharers)

    def onConnectionOpened(self, proto):
        try:
            self.securityClient = SecClient(proto, self.mesgHandle, 609)
            print '----securityClient connected successfully'
            self.aclClient = ACLClient(proto, self.mesgHandle, 609)
            print '----ACLClient connected successfully'
        except Exception as e:
            print e

    #@staticmethod
    def checkPermission(resourceId, permission):
        def decorator(func):
            def wrapper(self, proto, spec, message, body):
                def successCheckPermission(hasP):
                    if hasP:
                        func(self, proto, spec, message, body)
                    else:
                        (responseSpec,
                         failedResponse) = self.create(spec.messageName, False)
                        failedResponse.status = 1
                        failedResponse.message = '<User: {0}> has no permission to {1}'.format(
                            body.session.userId, func.__name__)
                        self.write_log('error', body.session.userId,
                                       failedResponse.message)
                        self.send(message.getSource(), proto, responseSpec,
                                  failedResponse, message.getRequestId())

                def FailedCheckPermission(hasP):
                    (responseSpec,
                     failedResponse) = self.create(spec.messageName, False)
                    failedResponse.status = 1
                    failedResponse.message = hasP
                    self.write_log('error', body.session.userId,
                                   failedResponse.message)
                    self.send(message.getSource(), proto, responseSpec,
                              failedResponse, message.getRequestId())

                self.aclClient.hasPermission(body.session, resourceId, permission)\
                    .then(successCheckPermission)\
                    .catch(FailedCheckPermission)

            return wrapper

        return decorator

    def write_log(self, log_type, userId, message, operation):
        logger = '\n用户ID:%s\n错误信息:%s\n%s\n执行操作:%s\n' % (userId, message,
                                                        operation, '-' * 50)
        if log_type == 'error':
            logging.error(logger)

    def onCreateConfigure(self, proto, spec, message, body):
        try:
            print '-------------begin Delete Configure In Grid---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                                 body.session.seqId)
            print 'Configure: {0}'.format(body.Configure)
            print 'Object: {0}'.format(body.CollectionList)

            secIdList = [
                self.configsql3.getCollection(elem.Name, elem.Date,
                                              elem.Version, elem.TemplateName,
                                              elem.CollectionName)[1]
                for elem in body.CollectionList
            ]

            IsCreateConfigureInstance = self.configsql3.createConfigure(
                json.dumps(secIdList), body.Configure.Name,
                body.Configure.Version, body.Configure.Date)
            if IsCreateConfigureInstance[0]:
                (responseSpec, successResponse) = self.create(
                    "createconfigure:configureobjectproto", False)
                successResponse.status = 0
                successResponse.message = IsCreateConfigureInstance[1]
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())
            else:
                (responseSpec, failedResponse) = self.create(
                    "createconfigure:configureobjectproto", False)
                failedResponse.status = 1
                failedResponse.message = IsCreateConfigureInstance[1]
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())
            print '---------------end Delete Configure In Grid---------------'
        except Exception as e:
            print e

    def onDeleteConfigure(self, proto, spec, message, body):
        try:
            print '-------------begin Delete Configure In Grid---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                                 body.session.seqId)
            print 'Configure: {0}'.format(body.Configure)

            IsDeleteConfigureInstanceMapping = self.configsql3.deleteConfigure(
                body.Configure.Name, body.Configure.Date,
                body.Configure.Version)
            if IsDeleteConfigureInstanceMapping[0]:
                (responseSpec, successResponse) = self.create(
                    "deleteconfigure:configureobjectproto", False)
                successResponse.status = 0
                successResponse.message = IsDeleteConfigureInstanceMapping[1]
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())
            else:
                (responseSpec, failedResponse) = self.create(
                    "deleteconfigure:configureobjectproto", False)
                failedResponse.status = 1
                failedResponse.message = IsDeleteConfigureInstanceMapping[1]
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())
            print '---------------end Delete Configure In Grid---------------'
        except Exception as e:
            print e

    def onCreateCollection(self, proto, spec, message, body):
        try:
            print '-------------begin Create  Object---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                                 body.session.seqId)

            def getkey():
                passwd = string.join(
                    random.sample(list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-+'), 16)) \
                    .replace(" ", "")
                return passwd

            secList = [[
                "-".join([
                    body.Collection.Name, body.Collection.Date,
                    body.Collection.Version, body.Collection.Category,
                    body.Collection.TemplateName
                ]), body.Collection.Content,
                getkey()
            ]]

            def putContentSuccess(nameIdDict):
                self.registCollectionInT_Collection(message, proto, body,
                                                    nameIdDict)

            def putContentFailed(errMesg):
                print 'putSeriesContent failed: %s' % errMesg
            self.securityClient.putSeriesContent(body.session, secList, body.publicKey)\
                .then(putContentSuccess)\
                .catch(putContentFailed)

            print '---------------end Create Configure Object---------------'
        except Exception as e:
            print 'error: {0}'.format(e)
            (responseSpec, failedResponse) = self.create(
                "createcollection:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = e
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def registCollectionInT_Collection(self, message, proto, body, nameIdDict):
        try:
            idName = self.configsql3.createCollection(nameIdDict)
            if idName[0]:
                resource = {}

                def addResourceSuccess(resourceId):
                    resource["data"] = resourceId

                def addResourceFailed(ErrMsg):
                    pass

                self.aclClient.addResource(body.session, idName[1], body.ResourceTypeId, idName[0],0)\
                    .then(addResourceSuccess).catch(addResourceFailed).wait()

                (responseSpec, successResponse) = self.create(
                    "createcollection:configureobjectproto", False)
                successResponse.status = 0
                successResponse.message = 'ok'
                successResponse.resourceId = resource["data"]
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())
            else:
                (responseSpec, failedResponse) = self.create(
                    "createcollection:configureobjectproto", False)
                failedResponse.status = 1
                failedResponse.message = IsCreateObject[1]
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())

        except Exception as e:
            print e
            (responseSpec, failedResponse) = self.create(
                "createcollection:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def onDeleteCollection(self, proto, spec, message, body):
        try:
            print '-------------begin Delete Configure Object---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                                 body.session.seqId)
            print 'Configure Object Name: {0}'.format(body.Collections)

            secIdList = [
                self.configsql3.getCollection(elem.Name, elem.Date,
                                              elem.Version, elem.Category,
                                              elem.TemplateName)[1]
                for elem in body.Collections
            ]

            def deleteContentSuccess(successMsg):
                self.deleteCollectionInT_Collection(message, proto, secIdList)

            def deleteContentFailed(errMsg):
                print errMsg + 'delete Content is Faild!!!'
            self.securityClient.deleteContent(body.session, secIdList)\
                .then(deleteContentSuccess).catch(deleteContentFailed)
            print '---------------end Create Configure Object---------------'
        except Exception as e:
            (responseSpec, failedResponse) = self.create(
                "deletecollection:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = 'error: {0}'.format(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def deleteCollectionInT_Collection(self, message, proto, secIdList):
        IsDeleteObject = self.configsql3.deleteCollection(secIdList)
        if IsDeleteObject[0]:
            (responseSpec, successResponse) = self.create(
                "deletecollection:configureobjectproto", False)
            successResponse.status = 0
            successResponse.message = IsDeleteObject[1]
            self.send(message.getSource(), proto, responseSpec,
                      successResponse, message.getRequestId())
        else:
            (responseSpec, failedResponse) = self.create(
                "deleteconfigureobject:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = IsDeleteObject[1]
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    # @checkPermission(38, 'GETOBJECTS')
    def onGetCollection(self, proto, spec, message, body):
        print '-------------Begin To Get Object---------------'
        print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                             body.session.seqId)
        print 'Configure Object Id: {0}'.format(body.Collections)
        try:
            secIdList = [[
                "-".join([
                    elem.Name, elem.Date, elem.Version, elem.Category,
                    elem.TemplateName
                ]),
                self.configsql3.getCollection(elem.Name, elem.Date,
                                              elem.Version, elem.Category,
                                              elem.TemplateName)[1]
            ] for elem in body.Collections]
            if len(secIdList) == 0:
                raise Exception("Error: getting Object {0} is failed".format(
                    body.ObjectName))

            (responseSpec, successResponse) = self.create(
                "getcollection:configureobjectproto", False)

            def getContentSuccess(Content):
                successResponse.status = 0
                successResponse.message = "get object successfully!!!"
                successResponse.Content = Content
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())

            def getContentFailed(errMsg):
                print 'put content of object is failed!!!'

            self.securityClient.getSeriesContent(body.session, secIdList, body.privateKey)\
                .then(getContentSuccess)\
                .catch(getContentFailed)
            print '---------------end Query Get Collection---------------'
        except Exception as e:
            print "Error: {0}".format(e)
            (responseSpec, failedResponse) = self.create(
                "getcollection:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = 'Error: get Collection, Detail: {0}'.format(
                e)
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def onGetConfigure(self, proto, spec, message, body):
        print '-------------Begin Get Object---------------'
        print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                             body.session.seqId)
        print 'Collection Name: {0}'.format(body.Configure)

        try:
            objectList = self.configsql3.getConfigure(body.Configure.Name,
                                                      body.Configure.Date,
                                                      body.Configure.Version)
            if not objectList[0]:
                raise Exception(objectList[1])

            secList = [[
                "-".join(self.configsql3.getObjectById(elem)[1][1:]), elem
            ] for elem in json.loads(objectList[0])]

            if len(secList) == 0:
                raise Exception(
                    "Error: getting Configure "
                    "<Name: {0}, Date: {1}, Version: {2}> is failed".format(
                        body.Configure.Name, body.Configure.Date,
                        body.Configure.Version))

            (responseSpec, successResponse) = self.create(
                "getconfigure:configureobjectproto", False)

            def getContentSuccess(Content):
                successResponse.status = 0
                successResponse.message = "get configure successfully!!!"
                successResponse.Content = Content
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())

            def getContentFailed(errMsg):
                print 'put content of configure is failed!!!'

            self.securityClient.getSeriesContent(body.session, secList, body.privateKey) \
                .then(getContentSuccess) \
                .catch(getContentFailed)
            print '---------------end Query Configure---------------'
        except Exception as e:
            print "Error: {0}".format(e)
            (responseSpec,
             failedResponse) = self.create("getconfigure:configureobjectproto",
                                           False)
            failedResponse.status = 1
            failedResponse.message = 'Error: getting Configure is failed!!!\n,Detail: {0}'.format(
                e)
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def onGrantCollection(self, proto, spec, message, body):
        try:
            print '---------------Begin Grant Object To Others---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                                 body.session.seqId)
            print 'Object Name: {0}'.format(body.ResourceIds)
            print 'Object OthersId: {0}'.format(body.RoleId)
            print '---------------end Query Configure Object---------------'

            secIdDict = {
                "-".join([
                    elem.Name, elem.Date, elem.Version, elem.Category,
                    elem.TemplateName
                ]): self.configsql3.getCollection(elem.Name, elem.Date,
                                                  elem.Version, elem.Category,
                                                  elem.TemplateName)[1]
                for elem in body.CollectionList
            }

            if len(secIdDict) == 0:
                raise Exception(
                    "Objects <{0}> is not exist when query the database".
                    format(body.Collection))

            (responseSpec, successResponse) = self.create(
                "grantcollection:configureobjectproto", False)

            def grantOtherSuccess(Msg):
                successResponse.status = 0
                successResponse.message = "Grant object to other is successfully!!!"
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())

            (responseSpec, failedResponse) = self.create(
                "grantcollection:configureobjectproto", False)

            def grantOtherFailed(errMsg):
                failedResponse.status = 1
                failedResponse.message = 'Error: grant objects to others is failed!!!'
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())

            self.securityClient.grantSeriesToOther(
                body.session, secIdDict, body.OthersId, body.privateKey,
                body.othersPublicKey).then(grantOtherSuccess).catch(
                    grantOtherFailed)
        except Exception as e:
            (responseSpec, failedResponse) = self.create(
                "grantcollection:configureobjectproto", False)
            print "Error: {0}".format(e)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def onRevokeCollection(self, proto, spec, message, body):
        try:
            print '---------------Begin Ungrant Object To Others---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                                 body.session.seqId)
            print 'Object Name: {0}'.format(body.CollectionList)
            print 'Object OthersId: {0}'.format(body.OthersId)
            print '---------------end Ungrant Configure Object---------------'

            secIdDict = {
                "-".join([
                    elem.Name, elem.Date, elem.Version, elem.Category,
                    elem.TemplateName
                ]): self.configsql3.getCollection(elem.Name, elem.Date,
                                                  elem.Version, elem.Category,
                                                  elem.TemplateName)[1]
                for elem in body.CollectionList
            }

            if len(secIdDict) == 0:
                raise Exception(
                    "Objects <{0}> is not exist when query the database".
                    format(body.ObjectList))

            (responseSpec, successResponse) = self.create(
                "revokecollection:configureobjectproto", False)

            def revokeSuccess(Msg):
                successResponse.status = 0
                successResponse.message = "Ungrant object to other is successfully!!!"
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())

            (responseSpec, failedResponse) = self.create(
                "revokecollection:configureobjectproto", False)

            def revokeFailed(errMsg):
                failedResponse.status = 1
                failedResponse.message = 'Error: Ungrant objects to others is failed!!!'
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())

            self.securityClient.revokeGrant(
                body.session,
                secIdDict,
                body.OthersId,
            ).then(revokeSuccess).catch(revokeFailed)
        except Exception as e:
            (responseSpec, failedResponse) = self.create(
                "revokecollection:configureobjectproto", False)
            print "Error: {0}".format(e)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def onGrantConfigure(self, proto, spec, message, body):
        try:
            print '---------------Begin Grant Object To Others---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                                 body.session.seqId)
            print 'Object OthersId: {0}'.format(body.OthersId)
            print 'Configure: {0}'.format(body.ConfigureList)
            print '---------------end Query Configure Object---------------'

            def getUnionList(lli, rli):
                return list(set(lli).union(set(rli)))

            temp = [
                json.loads(
                    self.configsql3.getConfigure(elem.Name, elem.Date,
                                                 elem.Version)[0])
                for elem in body.ConfigureList
            ]

            secIdDict = {
                "-".join(self.configsql3.getObjectById(elem)[1][1:]): elem
                for elem in reduce(getUnionList, temp)
            }

            if len(secIdDict) == 0:
                raise Exception(
                    "The Configure <Name: {0}, Date: {1}, Version: {2}> "
                    "which is going to be granted is not exist!!!".format(
                        body.Configure.Name, body.Configure.Date,
                        body.Configure.Version))

            (responseSpec, successResponse) = self.create(
                "grantconfigure:configureobjectproto", False)

            def grantOtherSuccess(Msg):
                successResponse.status = 0
                successResponse.message = "Grant configure to other is successfully!!!"
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())

            (responseSpec, failedResponse) = self.create(
                "granconfigure:configureobjectproto", False)

            def grantOtherFailed(Msg):
                failedResponse.status = 1
                failedResponse.message = 'Error: grant configure object to others is failed!!!'
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())

            self.securityClient.grantSeriesToOther(
                body.session, secIdDict, body.OthersId, body.privateKey,
                body.othersPublicKey).then(grantOtherSuccess).catch(
                    grantOtherFailed)
        except Exception as e:
            (responseSpec, failedResponse) = self.create(
                "granconfigure:configureobjectproto", False)
            print "Error: {0}".format(e)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def onUnGrantConfigure(self, proto, spec, message, body):
        try:
            print '---------------Begin Revoke Grant Object To Others---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                                 body.session.seqId)
            print 'Object OthersId: {0}'.format(body.OthersId)
            print 'Configure: {0}'.format(body.ConfigureList)
            print '---------------end Query Configure Object---------------'

            def getUnionList(lli, rli):
                return list(set(lli).union(set(rli)))

            temp = [
                json.loads(
                    self.configsql3.getConfigure(elem.Name, elem.Date,
                                                 elem.Version)[0])
                for elem in body.ConfigureList
            ]

            secIdDict = {
                "-".join(self.configsql3.getObjectById(elem)[1][1:]): elem
                for elem in reduce(getUnionList, temp)
            }

            if len(secIdDict) == 0:
                raise Exception(
                    "The Configure <Name: {0}, Date: {1}, Version: {2}> "
                    "which is going to be ungranted is not exist!!!".format(
                        body.Configure.Name, body.Configure.Date,
                        body.Configure.Version))

            (responseSpec, successResponse) = self.create(
                "revokeConfigure:configureobjectproto", False)

            def grantOtherSuccess(Msg):
                successResponse.status = 0
                successResponse.message = "Ungrant configure<{0}> to other is successfully!!!".format(
                    body.ConfigureList)
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())

            (responseSpec, failedResponse) = self.create(
                "revokeConfigure:configureobjectproto", False)

            def grantOtherFailed(Msg):
                failedResponse.status = 1
                failedResponse.message = 'Error: Ungrant configure<{0}> object to others is failed!!!'.format(
                    body.ConfigureList)
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())

            self.securityClient.revokeGrant(
                body.session,
                secIdDict,
                body.OthersId,
            ).then(grantOtherSuccess).catch(grantOtherFailed)
        except Exception as e:
            (responseSpec, failedResponse) = self.create(
                "revokeConfigure:configureobjectproto", False)
            print "Error: {0}".format(e)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def onListCollections(self, proto, spec, message, body):
        try:
            print '---------------Begin List Object To Others---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                                 body.session.seqId)

            def listCollectionsSuccess(contentIdList):
                self.__getListCollection(proto, message, contentIdList)

            (responseSpec, failedResponse) = self.create(
                "listcollections:configureobjectproto", False)

            def listCollectionsFailed(Msg):
                failedResponse.status = 1
                failedResponse.message = 'Error: listting object is failed!!!'
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())

            self.securityClient.listContent(body.session).then(
                listCollectionsSuccess).catch(listCollectionsFailed)
            print '---------------end List Object---------------'

        except Exception as e:
            print "Error: {0}".format(e)
            (responseSpec, failedResponse) = self.create(
                "listcollections:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def __getListCollection(self, proto, message, contentIdList):
        contentIdList = [e.contentId for e in contentIdList]
        categoryDict = self.configsql3.getAll(contentIdList)
        if categoryDict[0]:
            (responseSpec, successResponse) = self.create(
                "listcollections:configureobjectproto", False)
            temp = {}
            for key, val in categoryDict[1].items():
                temp[key] = []
                for elem in val:
                    col = self.createGeneric("collection:ConfigureObjectProto")
                    col.Name = elem[0]
                    col.Date = elem[1]
                    col.Version = elem[2]
                    col.Category = elem[3]
                    col.TemplateName = elem[4]
                    temp[key].append(col)
            successResponse.collections = temp
            successResponse.status = 0
            successResponse.message = "list objects successfully!!!"
            self.send(message.getSource(), proto, responseSpec,
                      successResponse, message.getRequestId())
        else:
            (responseSpec, failedResponse) = self.create(
                "listcollections:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = categoryDict[1]
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def onListAuthoritySharers(self, proto, spec, message, body):
        try:
            print '---------------Begin List Authority Sharers---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId,
                                                 body.session.seqId)
            print 'Object: <{0}>'.format(body.Collection)
            print '--------------- End List Authority Sharers---------------'

            isGetObject = self.configsql3.getCollection(
                body.Collection.Name, body.Collection.Date,
                body.Collection.Version, body.Collection.Category,
                body.Collection.TemplateName)[1]

            if isGetObject:
                secId = isGetObject[0]

                def getSharersSuccess(sharersDict):
                    (responseSpec, successResponse) = self.create(
                        "getauthoritysharers:configureobjectproto", False)
                    successResponse.SharerList = [elem for elem in sharersDict]
                    successResponse.status = 0
                    successResponse.message = "Get sharer list {} successfully!!!".format(
                        str(successResponse.SharerList))
                    self.send(message.getSource(), proto, responseSpec,
                              successResponse, message.getRequestId())

                def getSharersFailed(Msg):
                    (responseSpec, failedResponse) = self.create(
                        "getauthoritysharers:configureobjectproto", False)
                    failedResponse.status = 1
                    failedResponse.message = "Error: Getting sharer list is failed!!!"
                    self.send(message.getSource(), proto, responseSpec,
                              failedResponse, message.getRequestId())

                self.securityClient.checkSharer(
                    body.session,
                    secId).then(getSharersSuccess).catch(getSharersFailed)

            else:
                (responseSpec, failedResponse) = self.create(
                    "getauthoritysharers:configureobjectproto", False)
                failedResponse.status = 1
                failedResponse.message = "Error: Getting sharer list is failed!!!"
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())

        except Exception as e:
            (responseSpec, failedResponse) = self.create(
                "getauthoritysharers:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())
Esempio n. 13
0
def test(pea, proto):
    client = ACLClient(proto, pea.customHandle, 609)

    session = client.login('bb', '1232')
    print 'login %s'% session
    # from twisted.internet import reactor, defer

    def changePasswordSuccess():
        print 'changePassword  success'

    def changePasswordFailed( errMesg):
        print 'changePassword %s failed: %s' % (errMesg)
    client.changePassword( session,'1232')\
            .then(changePasswordSuccess).catch(changePasswordFailed)

    def changeUserNameSuccess(a):
        print 'changeUserName  success'

    def changeUserNameFailed( errMesg):
        print 'changeUserName  failed: %s' % (errMesg)

    client.changeUserName(session,'bb')\
            .then(changeUserNameSuccess).catch(changeUserNameFailed)

    def changeRoleNameSuccess(a):
        print 'changeRoleName  success'

    def changeRoleNameFailed(errMesg):
        print 'changeRoleName failed: %s' % (errMesg)

    client.changeRoleName(session,3,'ad')\
            .then(changeRoleNameSuccess).catch(changeRoleNameFailed)

    def changePublicKeySuccess(a):
        print 'changePublicKey success'

    def changePublicKeyFailed( errMesg):
        print 'changePublicKey %s failed: %s' % (errMesg)

    client.changePublicKey( session,'adddddddddd234')\
            .then(changePublicKeySuccess).catch(changePublicKeyFailed)
 
    def changePrivateKeySuccess(a):
        print 'changePrivateKey  success'

    def changePrivateKeyFailed( errMesg):
        print 'changePrivateKey failed: %s'  % errMesg

    client.changePrivateKey( session,'adddddddddd234')\
            .then(changePrivateKeySuccess).catch(changePrivateKeyFailed)

    def myRoleSuccess(roles):
        print 'myRoleId-name  is %s -%s '% (roles[0],roles[1])

    def myRoleFailed( errMesg):
        print 'myRole failed: %s' % (errMesg)

    client.myRole(session)\
            .then(myRoleSuccess).catch(myRoleFailed)

    print "begin logout"
    client.logout(session)

    print 'ACLClient test success!!! '
Esempio n. 14
0
def test(pea, proto):
    client123 = ACLClient(proto, pea.customHandle, 609)
    session = client123.login('bb', '1232')

    client = SecClient(proto, pea.customHandle, 609)

    #两对密钥对
    with open('tests/master-public.pem') as f:
        publicKey1 = f.read()
    with open('tests/master-private.pem') as f:
        privateKey1 = f.read()
    with open('tests/ghost-public.pem') as f:
        publicKey2 = f.read()
    with open('tests/ghost-private.pem') as f:
        privateKey2 = f.read()

    # t = "zhang hai xu 1234567890"
    # def putContentSeriesSuccess( result ):
    #     for k in result:
    #         print 'putSeriesContent success:name=%s : %s' % (k, result[k])
    # def putSeriesContentFailed(errMesg):
    #     print 'putSeriesContent  %s failed: %s' % (t, errMesg)
    # client.putSeriesContent( session, [['one',t, '1234567812345678'],['two',t, '1234567812345678']],publicKey1)\
    #         .then(putContentSeriesSuccess).catch(putSeriesContentFailed)

    # def getSeriesContentSuccess( content ):
    #     for k,v in content.items():
    #          print k,v
    #
    # def getSeriesContentFailed( errMesg):
    #     print 'GetsssContent failed: %s' % ( errMesg)
    # id=[['a',24],['b',25]]
    # client.getSeriesContent( session, id, privateKey1 )\
    #     .then(getSeriesContentSuccess).catch(getSeriesContentFailed)
    #
    #
    #
    #
    # contentIds={'a':27,'b':28,}
    # def getkeysuccess(a):
    #     print 'get key success'
    # def getKeyFailed(errMesg):
    #     print 'get key failed %s' % errMesg
    # def grantSeriesToOtherSuccess( keyId ):
    #     print 'grant contentId  to other Success success '
    # def grantSeriesToOtherFailed(errMesg):
    #     print 'grant  to other  failed: %s' % (errMesg)
    # client.grantSeriesToOther( session, contentIds, 1, privateKey1, publicKey2)\
    #         .then(getkeysuccess).catch(getKeyFailed)\
    #             .then(grantSeriesToOtherSuccess).catch(grantSeriesToOtherFailed)

    #
    # def revokeGrantSuccess( nouse ):
    #     print 'revokeGrant'
    # def revokeGrantFailed( errMesg):
    #     print 'revokeGrant failed: %s' % ( errMesg)
    # id={'a':27,'b':28}
    # otherUserId=1
    # client.revokeGrant( session, id, otherUserId )\
    #     .then(revokeGrantSuccess).catch(revokeGrantFailed)

    def revokeGrantSuccess(nouse):
        print 'revokeGrant'

    def revokeGrantFailed(errMesg):
        print 'revokeGrant failed: %s' % (errMesg)

    id = {'a': 27, 'b': 28}
    otherUserId = 1
    client.checkSharer(session, 28) \
        .then(revokeGrantSuccess).catch(revokeGrantFailed)

    # #
    # def listContentSuccess( contents ):
    #     print 'ListContent success:'
    #     for i in contents:
    #         print i
    # def listContentFailed(errMesg):
    #     print 'ListContent  failed: %s' % (errMesg[0])
    # client.listContent( session )\
    #     .then(listContentSuccess).catch(listContentFailed)
    #
    # contentId = [24,25]
    # def deleteContentSuccess(nouse ):
    #     print 'deleteContent  success '
    # def deleteContentFailed(errMesg):
    #     print 'deleteContent id= %s failed: %s' % (contentId, errMesg)
    # client.deleteContent(session, contentId )\
    #         .then(deleteContentSuccess).catch(deleteContentFailed)

    ######## 此线以上程序测试通过
    ##############################################################################

    # t = "zhang hai xu 1234567890"
    # def putContentSuccess( result ):
    #     print 'putContent  %s success:contentId=%d,keyId=%s' % (t, result[0], result[1])
    #     return client.putContent( session, t, '1234567812345678',publicKey1)
    # def putContentFailed( errMesg):
    #     print 'putContent  %s failed: %s' % (t, errMesg)
    # def put1Success(x):
    #     print 'haha:%d%d' % tuple(x)
    #     client.putContent(session, t, '1234567812345678',publicKey1)\
    #     .then(putContentSuccess).catch(putContentFailed)\
    #     .then(put1Success)
    #
    # contentId = 20
    # def deleteContentSuccess( ):
    #     print 'deleteContent id= %s success ' % (contentId)
    # def deleteContentFailed(errMesg):
    #     print 'deleteContent id= %s failed: %s' % (contentId, errMesg)
    # client.deleteContent(session, contentId )\
    #         .then(deleteContentSuccess).catch(deleteContentFailed)
    #
    #
    # id = 1
    # def getContentSuccess( content ):
    #     print 'GetContent %d  success:content = %s' % (id, content)
    # def getContentFailed( errMesg):
    #     print 'GetContent failed: %s' % ( errMesg)
    # client.getContent( session, id, privateKey1 )\
    #     .then(getContentSuccess).catch(getContentFailed)
    #
    #
    #
    # def listContentSuccess( contents ):
    #     print 'ListContent success:'
    #     for i in contents:
    #         print i
    # def listContentFailed(errMesg):
    #     print 'ListContent  failed: %s' % (errMesg[0])
    # client.listContent( session )\
    #     .then(listContentSuccess).catch(listContentFailed)
    #
    #
    # contentId = 1
    # def getkeysuccess(a):
    #     print 'get key success'
    # def getKeyFailed(errMesg):
    #     print 'get key failed %s' % errMesg
    #
    #
    # def grantToOtherSuccess( keyId ):
    #     print 'grant contentId =%s to other Success success: newKeyId= %s' % (contentId,keyId)
    # def grantToOtherFailed(errMesg):
    #     print 'grant contentId = %s to other  failed: %s' % (contentId, errMesg)
    # client.grantToOther( session, contentId, 1, privateKey1, publicKey2)\
    #         .then(getkeysuccess).catch(getKeyFailed)\
    #             .then(grantToOtherSuccess).catch(grantToOtherFailed)

    print 'SecClient test seccess!!!'
Esempio n. 15
0
def test(pea, proto):
    client = ACLClient(proto, pea.customHandle, 609)

    session = client.login('bb', '1232')
    print 'login %s' % session

    # from twisted.internet import reactor, defer

    def changePasswordSuccess():
        print 'changePassword  success'

    def changePasswordFailed(errMesg):
        print 'changePassword %s failed: %s' % (errMesg)
    client.changePassword( session,'1232')\
            .then(changePasswordSuccess).catch(changePasswordFailed)

    def changeUserNameSuccess(a):
        print 'changeUserName  success'

    def changeUserNameFailed(errMesg):
        print 'changeUserName  failed: %s' % (errMesg)

    client.changeUserName(session,'bb')\
            .then(changeUserNameSuccess).catch(changeUserNameFailed)

    def changeRoleNameSuccess(a):
        print 'changeRoleName  success'

    def changeRoleNameFailed(errMesg):
        print 'changeRoleName failed: %s' % (errMesg)

    client.changeRoleName(session,3,'ad')\
            .then(changeRoleNameSuccess).catch(changeRoleNameFailed)

    def changePublicKeySuccess(a):
        print 'changePublicKey success'

    def changePublicKeyFailed(errMesg):
        print 'changePublicKey %s failed: %s' % (errMesg)

    client.changePublicKey( session,'adddddddddd234')\
            .then(changePublicKeySuccess).catch(changePublicKeyFailed)

    def changePrivateKeySuccess(a):
        print 'changePrivateKey  success'

    def changePrivateKeyFailed(errMesg):
        print 'changePrivateKey failed: %s' % errMesg

    client.changePrivateKey( session,'adddddddddd234')\
            .then(changePrivateKeySuccess).catch(changePrivateKeyFailed)

    def myRoleSuccess(roles):
        print 'myRoleId-name  is %s -%s ' % (roles[0], roles[1])

    def myRoleFailed(errMesg):
        print 'myRole failed: %s' % (errMesg)

    client.myRole(session)\
            .then(myRoleSuccess).catch(myRoleFailed)

    print "begin logout"
    client.logout(session)

    print 'ACLClient test success!!! '
Esempio n. 16
0
class ConfigureObjectServer(MessagePlugin):

    conn = psycopg2.connect(database="config3", user="******", password="******", host="127.0.0.1", port="5432")
    configsql3 = ConfigureObjectSql(conn)

    def __init__(self, messageHandle):
        super(ConfigureObjectServer, self).__init__(messageHandle)

        self.handle('createconfigure:configureobjectproto', True, self.onCreateConfigure)
        self.handle('deleteconfigure:configureobjectproto', True, self.onDeleteConfigure)
        self.handle('createcollection:configureobjectproto', True, self.onCreateCollection)
        self.handle('deletecollection:configureobjectproto', True, self.onDeleteCollection)
        self.handle('getconfigure:configureobjectproto', True, self.onGetConfigure)
        self.handle('getcollection:configureobjectproto', True, self.onGetCollection)
        self.handle('grantcollection:configureobjectproto', True, self.onGrantCollection)
        self.handle('revokecollection:configureobjectproto', True, self.onRevokeCollection)
        self.handle('granconfigure:configureobjectproto', True, self.onGrantConfigure)
        self.handle('revokeConfigure:configureobjectproto', True, self.onRevokeCollection)
        self.handle('listcollections:configureobjectproto', True, self.onListCollections)
        self.handle('listauthoritysharers:configureobjectproto', True, self.onListAuthoritySharers)

    def onConnectionOpened(self, proto):
        try:
            self.securityClient = SecClient(proto, self.mesgHandle, 609)
            print '----securityClient connected successfully'
            self.aclClient = ACLClient(proto, self.mesgHandle, 609)
            print '----ACLClient connected successfully'
        except Exception as e:
            print e

    #@staticmethod
    def checkPermission(resourceId, permission):
        def decorator(func):
            def wrapper(self, proto, spec, message, body):
                def successCheckPermission(hasP):
                    if hasP:
                        func(self, proto, spec, message, body)
                    else:
                        (responseSpec, failedResponse) = self.create(spec.messageName, False)
                        failedResponse.status = 1
                        failedResponse.message = '<User: {0}> has no permission to {1}'.format(
                            body.session.userId, func.__name__)
                        self.write_log('error', body.session.userId, failedResponse.message)
                        self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

                def FailedCheckPermission(hasP):
                    (responseSpec, failedResponse) = self.create(spec.messageName, False)
                    failedResponse.status = 1
                    failedResponse.message = hasP
                    self.write_log('error', body.session.userId, failedResponse.message)
                    self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

                self.aclClient.hasPermission(body.session, resourceId, permission)\
                    .then(successCheckPermission)\
                    .catch(FailedCheckPermission)
            return wrapper
        return decorator

    def write_log(self, log_type, userId, message, operation):
        logger = '\n用户ID:%s\n错误信息:%s\n%s\n执行操作:%s\n' % (userId, message, operation, '-' * 50)
        if log_type == 'error':
            logging.error(logger)

    def onCreateConfigure(self, proto, spec, message, body):
        try:
            print '-------------begin Delete Configure In Grid---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
            print 'Configure: {0}'.format(body.Configure)
            print 'Object: {0}'.format(body.CollectionList)

            secIdList = [self.configsql3.getCollection(elem.Name,
                                                       elem.Date,
                                                       elem.Version,
                                                       elem.TemplateName,
                                                       elem.CollectionName)[1] for elem in body.CollectionList]

            IsCreateConfigureInstance = self.configsql3.createConfigure(json.dumps(secIdList),
                                                                        body.Configure.Name,
                                                                        body.Configure.Version,
                                                                        body.Configure.Date)
            if IsCreateConfigureInstance[0]:
                (responseSpec, successResponse) = self.create("createconfigure:configureobjectproto", False)
                successResponse.status = 0
                successResponse.message = IsCreateConfigureInstance[1]
                self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())
            else:
                (responseSpec, failedResponse) = self.create("createconfigure:configureobjectproto", False)
                failedResponse.status = 1
                failedResponse.message = IsCreateConfigureInstance[1]
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())
            print '---------------end Delete Configure In Grid---------------'
        except Exception as e:
            print e

    def onDeleteConfigure(self, proto, spec, message, body):
        try:
            print '-------------begin Delete Configure In Grid---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
            print 'Configure: {0}'.format(body.Configure)

            IsDeleteConfigureInstanceMapping = self.configsql3.deleteConfigure(body.Configure.Name,
                                                                               body.Configure.Date,
                                                                               body.Configure.Version)
            if IsDeleteConfigureInstanceMapping[0]:
                (responseSpec, successResponse) = self.create("deleteconfigure:configureobjectproto", False)
                successResponse.status = 0
                successResponse.message = IsDeleteConfigureInstanceMapping[1]
                self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())
            else:
                (responseSpec, failedResponse) = self.create("deleteconfigure:configureobjectproto", False)
                failedResponse.status = 1
                failedResponse.message = IsDeleteConfigureInstanceMapping[1]
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())
            print '---------------end Delete Configure In Grid---------------'
        except Exception as e:
            print e

    def onCreateCollection(self, proto, spec, message, body):
        try:
            print '-------------begin Create  Object---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
            
            def getkey():
                passwd = string.join(
                    random.sample(list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-+'), 16)) \
                    .replace(" ", "")
                return passwd
            secList = [["-".join([body.Collection.Name, body.Collection.Date, body.Collection.Version, body.Collection.Category, body.Collection.TemplateName]),
                        body.Collection.Content, getkey()]]

            def putContentSuccess(nameIdDict):
                self.registCollectionInT_Collection(message, proto, body,nameIdDict)

            def putContentFailed(errMesg):
                print 'putSeriesContent failed: %s' % errMesg
            self.securityClient.putSeriesContent(body.session, secList, body.publicKey)\
                .then(putContentSuccess)\
                .catch(putContentFailed)

            print '---------------end Create Configure Object---------------'
        except Exception as e:
            print 'error: {0}'.format(e)
            (responseSpec, failedResponse) = self.create("createcollection:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = e
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    def registCollectionInT_Collection(self, message, proto, body, nameIdDict):
        try:
            idName = self.configsql3.createCollection(nameIdDict)
            if idName[0]:
                resource = {}
                def addResourceSuccess(resourceId):
                    resource["data"] = resourceId

                def addResourceFailed(ErrMsg):
                    pass

                self.aclClient.addResource(body.session, idName[1], body.ResourceTypeId, idName[0],0)\
                    .then(addResourceSuccess).catch(addResourceFailed).wait()

                (responseSpec, successResponse) = self.create("createcollection:configureobjectproto", False)
                successResponse.status = 0
                successResponse.message = 'ok'
                successResponse.resourceId = resource["data"]
                self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())
            else:
                (responseSpec, failedResponse) = self.create("createcollection:configureobjectproto", False)
                failedResponse.status = 1
                failedResponse.message = IsCreateObject[1]
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

        except Exception as e:
            print e
            (responseSpec, failedResponse) = self.create("createcollection:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    def onDeleteCollection(self, proto, spec, message, body):
        try:
            print '-------------begin Delete Configure Object---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
            print 'Configure Object Name: {0}'.format(body.Collections)
    
            secIdList = [self.configsql3.getCollection(elem.Name,
                                                       elem.Date,
                                                       elem.Version,
                                                       elem.Category,
                                                       elem.TemplateName)[1] for elem in body.Collections]
    
            def deleteContentSuccess(successMsg):
                self.deleteCollectionInT_Collection(message, proto, secIdList)
    
            def deleteContentFailed(errMsg):
                print errMsg+'delete Content is Faild!!!'
            self.securityClient.deleteContent(body.session, secIdList)\
                .then(deleteContentSuccess).catch(deleteContentFailed)
            print '---------------end Create Configure Object---------------'
        except Exception as e:
            (responseSpec, failedResponse) = self.create("deletecollection:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = 'error: {0}'.format(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())
    
    def deleteCollectionInT_Collection(self, message, proto, secIdList):
        IsDeleteObject = self.configsql3.deleteCollection(secIdList)
        if IsDeleteObject[0]:
            (responseSpec, successResponse) = self.create("deletecollection:configureobjectproto", False)
            successResponse.status = 0
            successResponse.message = IsDeleteObject[1]
            self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())
        else:
            (responseSpec, failedResponse) = self.create("deleteconfigureobject:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = IsDeleteObject[1]
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    # @checkPermission(38, 'GETOBJECTS')
    def onGetCollection(self, proto, spec, message, body):
        print '-------------Begin To Get Object---------------'
        print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
        print 'Configure Object Id: {0}'.format(body.Collections)
        try:
            secIdList = [["-".join([elem.Name, elem.Date, elem.Version, elem.Category, elem.TemplateName]),
                          self.configsql3.getCollection(elem.Name, elem.Date, elem.Version, elem.Category, elem.TemplateName)[1]]
                         for elem in body.Collections]
            if len(secIdList) == 0:
                raise Exception("Error: getting Object {0} is failed".format(body.ObjectName))
            
            (responseSpec, successResponse) = self.create("getcollection:configureobjectproto", False)

            def getContentSuccess(Content):
                successResponse.status = 0
                successResponse.message = "get object successfully!!!"
                successResponse.Content = Content
                self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())
                
            def getContentFailed(errMsg):
                print 'put content of object is failed!!!'

            self.securityClient.getSeriesContent(body.session, secIdList, body.privateKey)\
                .then(getContentSuccess)\
                .catch(getContentFailed)
            print '---------------end Query Get Collection---------------'
        except Exception as e:
            print "Error: {0}".format(e)
            (responseSpec, failedResponse) = self.create("getcollection:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = 'Error: get Collection, Detail: {0}'.format(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    def onGetConfigure(self, proto, spec, message, body):
        print '-------------Begin Get Object---------------'
        print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
        print 'Collection Name: {0}'.format(body.Configure)
        
        try:
            objectList = self.configsql3.getConfigure(body.Configure.Name,
                                                      body.Configure.Date,
                                                      body.Configure.Version)
            if not objectList[0]:
                raise Exception(objectList[1])

            secList = [["-".join(self.configsql3.getObjectById(elem)[1][1:]), elem]
                       for elem in json.loads(objectList[0])]

            if len(secList) == 0:
                raise Exception("Error: getting Configure "
                                "<Name: {0}, Date: {1}, Version: {2}> is failed".format(body.Configure.Name, body.Configure.Date, body.Configure.Version))

            (responseSpec, successResponse) = self.create("getconfigure:configureobjectproto", False)

            def getContentSuccess(Content):
                successResponse.status = 0
                successResponse.message = "get configure successfully!!!"
                successResponse.Content = Content
                self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())

            def getContentFailed(errMsg):
                print 'put content of configure is failed!!!'

            self.securityClient.getSeriesContent(body.session, secList, body.privateKey) \
                .then(getContentSuccess) \
                .catch(getContentFailed)
            print '---------------end Query Configure---------------'
        except Exception as e:
            print "Error: {0}".format(e)
            (responseSpec, failedResponse) = self.create("getconfigure:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = 'Error: getting Configure is failed!!!\n,Detail: {0}'.format(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    def onGrantCollection(self, proto, spec, message, body):
        try:
            print '---------------Begin Grant Object To Others---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
            print 'Object Name: {0}'.format(body.ResourceIds)
            print 'Object OthersId: {0}'.format(body.RoleId)
            print '---------------end Query Configure Object---------------'


            secIdDict = {"-".join([elem.Name, elem.Date, elem.Version, elem.Category, elem.TemplateName]):
                             self.configsql3.getCollection(elem.Name, elem.Date,
                                                           elem.Version, elem.Category, 
                                                           elem.TemplateName)[1] for elem in body.CollectionList}

            if len(secIdDict) == 0:
                raise Exception("Objects <{0}> is not exist when query the database".format(body.Collection))

            (responseSpec, successResponse) = self.create("grantcollection:configureobjectproto", False)

            def grantOtherSuccess(Msg):
                successResponse.status = 0
                successResponse.message = "Grant object to other is successfully!!!"
                self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())

            (responseSpec, failedResponse) = self.create("grantcollection:configureobjectproto", False)

            def grantOtherFailed(errMsg):
                failedResponse.status = 1
                failedResponse.message = 'Error: grant objects to others is failed!!!'
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

            self.securityClient.grantSeriesToOther(body.session,
                                                   secIdDict,
                                                   body.OthersId,
                                                   body.privateKey,
                                                   body.othersPublicKey).then(grantOtherSuccess).catch(grantOtherFailed)
        except Exception as e:
            (responseSpec, failedResponse) = self.create("grantcollection:configureobjectproto", False)
            print "Error: {0}".format(e)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    def onRevokeCollection(self, proto, spec, message, body):
        try:
            print '---------------Begin Ungrant Object To Others---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
            print 'Object Name: {0}'.format(body.CollectionList)
            print 'Object OthersId: {0}'.format(body.OthersId)
            print '---------------end Ungrant Configure Object---------------'

            secIdDict = {"-".join([elem.Name, elem.Date, elem.Version, elem.Category, elem.TemplateName]):
                             self.configsql3.getCollection(elem.Name, elem.Date,
                                                           elem.Version, elem.Category, elem.TemplateName)[1] for elem in body.CollectionList}

            if len(secIdDict) == 0:
                raise Exception("Objects <{0}> is not exist when query the database".format(body.ObjectList))

            (responseSpec, successResponse) = self.create("revokecollection:configureobjectproto", False)

            def revokeSuccess(Msg):
                successResponse.status = 0
                successResponse.message = "Ungrant object to other is successfully!!!"
                self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())

            (responseSpec, failedResponse) = self.create("revokecollection:configureobjectproto", False)

            def revokeFailed(errMsg):
                failedResponse.status = 1
                failedResponse.message = 'Error: Ungrant objects to others is failed!!!'
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

            self.securityClient.revokeGrant(body.session,
                                            secIdDict,
                                            body.OthersId,
                                            ).then(revokeSuccess).catch(revokeFailed)
        except Exception as e:
            (responseSpec, failedResponse) = self.create("revokecollection:configureobjectproto", False)
            print "Error: {0}".format(e)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    def onGrantConfigure(self, proto, spec, message, body):
        try:
            print '---------------Begin Grant Object To Others---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
            print 'Object OthersId: {0}'.format(body.OthersId)
            print 'Configure: {0}'.format(body.ConfigureList)
            print '---------------end Query Configure Object---------------'

            def getUnionList(lli, rli):
                return list(set(lli).union(set(rli)))

            temp = [json.loads(self.configsql3.getConfigure(elem.Name,
                                                            elem.Date,
                                                            elem.Version)[0]) for elem in body.ConfigureList]

            secIdDict = {"-".join(self.configsql3.getObjectById(elem)[1][1:]): elem for elem in reduce(getUnionList, temp)}

            if len(secIdDict) == 0:
                raise Exception("The Configure <Name: {0}, Date: {1}, Version: {2}> "
                                "which is going to be granted is not exist!!!".format(body.Configure.Name,
                                                                                      body.Configure.Date,
                                                                                      body.Configure.Version))

            (responseSpec, successResponse) = self.create("grantconfigure:configureobjectproto", False)

            def grantOtherSuccess(Msg):
                successResponse.status = 0
                successResponse.message = "Grant configure to other is successfully!!!"
                self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())

            (responseSpec, failedResponse) = self.create("granconfigure:configureobjectproto", False)

            def grantOtherFailed(Msg):
                failedResponse.status = 1
                failedResponse.message = 'Error: grant configure object to others is failed!!!'
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

            self.securityClient.grantSeriesToOther(body.session,
                                                   secIdDict,
                                                   body.OthersId,
                                                   body.privateKey,
                                                   body.othersPublicKey).then(grantOtherSuccess).catch(grantOtherFailed)
        except Exception as e:
            (responseSpec, failedResponse) = self.create("granconfigure:configureobjectproto", False)
            print "Error: {0}".format(e)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    def onUnGrantConfigure(self, proto, spec, message, body):
        try:
            print '---------------Begin Revoke Grant Object To Others---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
            print 'Object OthersId: {0}'.format(body.OthersId)
            print 'Configure: {0}'.format(body.ConfigureList)
            print '---------------end Query Configure Object---------------'

            def getUnionList(lli, rli):
                return list(set(lli).union(set(rli)))

            temp = [json.loads(self.configsql3.getConfigure(elem.Name,
                                                            elem.Date,
                                                            elem.Version)[0]) for elem in body.ConfigureList]

            secIdDict = {"-".join(self.configsql3.getObjectById(elem)[1][1:]): elem for elem in reduce(getUnionList, temp)}

            if len(secIdDict) == 0:
                raise Exception("The Configure <Name: {0}, Date: {1}, Version: {2}> "
                                "which is going to be ungranted is not exist!!!".format(body.Configure.Name,
                                                                                        body.Configure.Date,
                                                                                        body.Configure.Version))

            (responseSpec, successResponse) = self.create("revokeConfigure:configureobjectproto", False)

            def grantOtherSuccess(Msg):
                successResponse.status = 0
                successResponse.message = "Ungrant configure<{0}> to other is successfully!!!".format(body.ConfigureList)
                self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())

            (responseSpec, failedResponse) = self.create("revokeConfigure:configureobjectproto", False)

            def grantOtherFailed(Msg):
                failedResponse.status = 1
                failedResponse.message = 'Error: Ungrant configure<{0}> object to others is failed!!!'.format(body.ConfigureList)
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

            self.securityClient.revokeGrant(body.session,
                                            secIdDict,
                                            body.OthersId,
                                            ).then(grantOtherSuccess).catch(grantOtherFailed)
        except Exception as e:
            (responseSpec, failedResponse) = self.create("revokeConfigure:configureobjectproto", False)
            print "Error: {0}".format(e)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    def onListCollections(self, proto, spec, message, body):
        try:
            print '---------------Begin List Object To Others---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)

            def listCollectionsSuccess(contentIdList):
                self.__getListCollection(proto, message, contentIdList)

            (responseSpec, failedResponse) = self.create("listcollections:configureobjectproto", False)

            def listCollectionsFailed(Msg):
                failedResponse.status = 1
                failedResponse.message = 'Error: listting object is failed!!!'
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

            self.securityClient.listContent(body.session).then(listCollectionsSuccess).catch(listCollectionsFailed)
            print '---------------end List Object---------------'

        except Exception as e:
            print "Error: {0}".format(e)
            (responseSpec, failedResponse) = self.create("listcollections:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    def __getListCollection(self, proto, message, contentIdList):
        contentIdList = [e.contentId for e in contentIdList]
        categoryDict = self.configsql3.getAll(contentIdList)
        if categoryDict[0]:
            (responseSpec, successResponse) = self.create("listcollections:configureobjectproto", False)
            temp = {}
            for key, val in categoryDict[1].items():
                temp[key] = []
                for elem in val:
                    col = self.createGeneric("collection:ConfigureObjectProto")
                    col.Name = elem[0]
                    col.Date = elem[1]
                    col.Version = elem[2]
                    col.Category = elem[3]
                    col.TemplateName = elem[4]
                    temp[key].append(col)
            successResponse.collections = temp
            successResponse.status = 0
            successResponse.message = "list objects successfully!!!"
            self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())
        else:
            (responseSpec, failedResponse) = self.create("listcollections:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = categoryDict[1]
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

    def onListAuthoritySharers(self, proto, spec, message, body):
        try:
            print '---------------Begin List Authority Sharers---------------'
            print 'userId-seqId: {0}-{1}'.format(body.session.userId, body.session.seqId)
            print 'Object: <{0}>'.format(body.Collection)
            print '--------------- End List Authority Sharers---------------'

            isGetObject = self.configsql3.getCollection(body.Collection.Name,
                                                        body.Collection.Date,
                                                        body.Collection.Version,
                                                        body.Collection.Category,
                                                        body.Collection.TemplateName)[1]

            if isGetObject:
                secId = isGetObject[0]

                def getSharersSuccess(sharersDict):
                    (responseSpec, successResponse) = self.create("getauthoritysharers:configureobjectproto", False)
                    successResponse.SharerList = [elem for elem in sharersDict]
                    successResponse.status = 0
                    successResponse.message = "Get sharer list {} successfully!!!".format(str(successResponse.SharerList))
                    self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())

                def getSharersFailed(Msg):
                    (responseSpec, failedResponse) = self.create("getauthoritysharers:configureobjectproto", False)
                    failedResponse.status = 1
                    failedResponse.message = "Error: Getting sharer list is failed!!!"
                    self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

                self.securityClient.checkSharer(body.session, secId).then(getSharersSuccess).catch(getSharersFailed)

            else:
                (responseSpec, failedResponse) = self.create("getauthoritysharers:configureobjectproto", False)
                failedResponse.status = 1
                failedResponse.message = "Error: Getting sharer list is failed!!!"
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

        except Exception as e:
            (responseSpec, failedResponse) = self.create("getauthoritysharers:configureobjectproto", False)
            failedResponse.status = 1
            failedResponse.message = str(e)
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())
Esempio n. 17
0
class templServer(MessagePlugin):
    conn = psycopg2.connect(database="MyDb",
                            user="******",
                            password="******",
                            host="127.0.0.1",
                            port="5432")
    templdb = mydb(conn)

    def __init__(self, messageHandle):
        super(templServer, self).__init__(messageHandle)

        logging.basicConfig(filename=os.path.join(
            os.getcwd(),
            time.strftime('%Y-%m-%d-') + 'log.txt'),
                            level=logging.ERROR,
                            filemode='a',
                            format='错误时间:%(asctime)s  %(message)s',
                            datefmt='%a, %d %b %Y %H:%M:%S')
        #按照下面的顺序将函数写入

        self.handle('upcontent:templ_json', True, self.onUpContent)
        self.handle('jsonrelation:templ_json', True, self.onJsonRelation)
        self.handle('basecheck:templ_json', True, self.onBaseCheck)
        self.handle('download:templ_json', True, self.onDownLoad)
        self.handle('getjsoncon:templ_json', True, self.onGetJsonCon)
        self.handle('grantauthority:templ_json', True, self.onGrantAuthority)
        self.handle('templmerge:templ_json', True, self.onTemplMerge)
        self.handle('createversion:templ_json', True, self.onCreateVersion)

    def onConnectionOpened(self, proto):
        print '----begin login-----'
        self.aclClient = ACLClient(proto, self.mesgHandle, 609)
        self.securityClient = SecClient(proto, self.mesgHandle, 609)
        self.session = self.aclClient.login('bb', '1232')
        if 0 == self.session.userId and 0 == self.session.seqId:
            print '----login failed-----'
        else:
            print '----login success----'

    def onConnectionClosed(self, proto, reason):
        print '----begin logout-----'
        if self.session is not None:
            self.aclClient.logout(self.session)
        print '---logout success---'

    def write_log(self, log_type, userId, message, operation):
        logger = '\n用户ID:%s\n错误信息:%s\n%s\n执行操作:%s\n' % (userId, message,
                                                        operation, '-' * 50)
        if log_type == 'error':
            logging.error(logger)

#上传模板成功后(不管是更新,还是新建),该模板需要转换成json存储到t_jsonattr表中,还需要将该表的关系更新至t_baserelation中

    def Templ2Field(self, templcontent):  #将模板转为json字段存储
        ################判断是否只有一个模板##################
        templcon = templcontent.split('};')
        c = None
        ob = []
        for ii in range(len(templcon)):
            templob = []
            templcon[ii] = templcon[ii].strip()
            templcon[ii] = templcon[ii].splitlines()  #按行分割
            for ii0 in range(len(templcon[ii])):  #去除空行
                if templcon[ii][ii0] != '':
                    templob.append(templcon[ii][ii0])
            if templob != []:
                templob = TemplToJson.TemplObject(templob)
                if templob.islegal == None:
                    ob.append(templob)
                else:
                    c = templob.islegal
                    break
        if c == None:
            return ob
        else:
            return c

    # @checkLogin
    # @checkPermission
    def onUpContent(self, proto, spec, message, body):
        print '------Begin Upload Content------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'template name:%s' % body.name
        print 'version:%s' % body.version
        print 'contents:%s' % body.contents
        print '------End Upload Content--------'
        with open('tests/master-public.pem') as f:
            publicKey1 = f.read()
        checkcontent = self.Templ2Field(body.contents)
        (responseSpec, failedResponse) = self.create("upcontent:templ_json",
                                                     False)
        if checkcontent != [] and checkcontent != None and isinstance(
                checkcontent, str) == False:
            # 获取密钥
            passcontent = []
            passorigin = []
            passwd = string.join(
                random.sample(
                    list(
                        'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-+'
                    ), 16)).replace(" ", "")
            passorigin.append('origin' + body.name + body.version)
            passorigin.append(body.contents)
            passorigin.append(passwd)
            passcontent.append(passorigin)
            for ii in range(len(checkcontent)):
                jsoncontent = []
                passwd = string.join(
                    random.sample(
                        list(
                            'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-+'
                        ), 16)).replace(" ", "")
                jsoncontent.append('json' + checkcontent[ii].TemplName +
                                   body.version)
                m = json.dumps(checkcontent[ii],
                               cls=TemplToJson.MyEncoder,
                               indent=4)
                jsoncontent.append(m)  # putcontent->初始内容
                jsoncontent.append(passwd)
                passcontent.append(jsoncontent)

            def putContentSuccess(originContentId):
                option = 'update'
                self.passcontent(message, proto, originContentId, checkcontent,
                                 publicKey1, body, option)

            def putContentFailed(errMesg):
                print 'putSeriesContent failed: %s' % errMesg
                failedResponse.status = 1
                failedResponse.message = 'error:put content failed'
                failedResponse.name = body.name
                failedResponse.isLegal = True
                failedResponse.version = body.version
                failedResponse.isVersionIn = True
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())

            try:
                self.securityClient.putSeriesContent(
                    self.session, passcontent,
                    publicKey1).then(putContentSuccess).catch(putContentFailed)
            except Exception as e:
                print 'error:%s' % e
        else:
            failedResponse.status = 1
            failedResponse.message = 'contents is not legal:%s' % checkcontent
            failedResponse.name = body.name
            failedResponse.isLegal = False
            failedResponse.version = body.version
            failedResponse.isVersionIn = False
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())
            print failedResponse

    def passcontent(self, message, proto, originContentId, checkcontent,
                    publicKey1, body, option):
        security_cid = originContentId['origin' + body.name + body.version]
        ######################################
        (responseSpec, Response) = self.create("upcontent:templ_json", False)
        for iii in range(len(checkcontent)):
            security_jid = originContentId['json' +
                                           checkcontent[iii].TemplName +
                                           body.version]
            checkv = templServer.templdb.CheckVersion(body.name, body.version)
            if checkv != False and checkv != None and option == 'update':  # 该version在数据库内,执行update该version的函数
                # try:
                update = templServer.templdb.UpDateJsonAttr(
                    checkcontent[iii].TemplName, body.version,
                    checkcontent[iii].BaseName, security_cid, security_jid,
                    'false', publicKey1, checkcontent[iii].TemplType)

                if update == True:  # update成功
                    Response.status = 0
                    Response.message = 'update content successful'
                    Response.name = checkcontent[iii].TemplName
                    Response.isLegal = True
                    Response.version = body.version
                    Response.isVersionIn = True
                    print Response
                    if "::" not in checkcontent[iii].TemplName:
                        upRela = templServer.templdb.UpdateRelation(
                            checkcontent[iii].TemplName, body.version,
                            checkcontent[iii].BaseName)
                        if upRela == True:
                            print 'base relation update success'
                        else:
                            print 'error:123456'
                else:
                    Response.status = 1
                    Response.message = 'error: cannot update content'
                    Response.name = checkcontent[iii].TemplName
                    Response.isLegal = True
                    Response.version = body.version
                    Response.isVersionIn = False
                    print Response
                    self.write_log('error', body.session.userId,
                                   Response.message, '更新文件')
            elif checkv == None and option == 'create':  # 该version不在数据库内,执行创建该version的函数

                upversion = templServer.templdb.CreateJsonAttr(
                    checkcontent[iii].TemplName, body.version,
                    checkcontent[iii].BaseName, security_cid, security_jid,
                    'false', publicKey1, checkcontent[iii].TemplType)
                if upversion == True:
                    Response.status = 0
                    Response.message = 'creat a new version of this name'
                    Response.name = checkcontent[iii].TemplName
                    Response.isLegal = True
                    Response.version = body.version
                    Response.isVersionIn = False
                    print Response
                    upRela = templServer.templdb.UpdateRelation(
                        checkcontent[iii].TemplName, body.version,
                        checkcontent[iii].BaseName)
                    if upRela == True:
                        print 'base relation update success'
                    else:
                        print 'error:12345678'
                else:
                    Response.status = 2
                    Response.message = 'error:cannot create a new version'
                    Response.name = checkcontent[iii].TemplName
                    Response.isLegal = True
                    Response.version = body.version
                    Response.isVersionIn = False
                    print Response
            else:  # 否则返回错误信息
                Response.status = 3
                Response.message = 'cannot upload content'
                Response.name = checkcontent[iii].TemplName
                Response.isLegal = True
                Response.version = body.version
                Response.isVersionIn = False
                print Response
                self.write_log('error', body.session.userId, Response.message,
                               '上传文件')

        self.send(message.getSource(), proto, responseSpec, Response,
                  message.getRequestId())

    def onJsonRelation(self, proto, spec, message, body):  #请求Json relationship
        cur = self.conn.cursor()
        print '------Begin ask Json relationship------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'JsonRelationName:%s' % body.JsonRelationName
        print 'version:%s' % body.version
        print '------End ask Json relationship--------'
        # try:
        RelCheck = templServer.templdb.CheckRelVersion(body.JsonRelationName,
                                                       body.version)
        (responseSpec,
         successResponse) = self.create("jsonrelation:templ_json", False)
        (responseSpec, failedResponse) = self.create("jsonrelation:templ_json",
                                                     False)

        if RelCheck != False and RelCheck != None:
            JsonRelation = templServer.templdb.JsonRelation(
                body.JsonRelationName, body.version)
            if JsonRelation != False and JsonRelation != None:
                successResponse.status = 0
                successResponse.message = 'show json relationship successful'
                successResponse.JsonRelationName = body.JsonRelationName
                successResponse.version = body.version
                successResponse.JRelation = '%s' % JsonRelation
                print successResponse
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())
            elif JsonRelation == None:
                successResponse.status = 2
                successResponse.message = ' json relationship is empty'
                successResponse.JsonRelationName = body.JsonRelationName
                successResponse.version = body.version
                successResponse.JRelation = 'None'
                print successResponse
                self.send(message.getSource(), proto, responseSpec,
                          successResponse)
            else:
                failedResponse.status = 1
                failedResponse.message = 'error:cannot show json relationship'
                print failedResponse
                self.write_log('error', body.session.userId,
                               failedResponse.message, '返回Json relationship信息')
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())
        elif RelCheck == None:
            successResponse.status = 2
            successResponse.message = 'the jsonrelationship of this name&version does not exist'
            successResponse.JsonRelationName = body.JsonRelationName
            successResponse.version = body.version
            successResponse.JRelation = 'None'
            print successResponse
            self.send(message.getSource(), proto, responseSpec,
                      successResponse, message.getRequestId())
        else:
            failedResponse.status = 1
            failedResponse.message = 'error:something is wrong!'
            print failedResponse
            self.write_log('error', body.session.userId,
                           failedResponse.message, '请求Json relationship')

    def onBaseCheck(self, proto, spec, message, body):  #基类查看
        cur = self.conn.cursor()
        print '------Begin Base Check------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'base name:%s' % body.BaseName
        print 'version:%s' % body.version
        print '------End Base Check--------'
        # try:
        base = templServer.templdb.CheckRelVersion(body.BaseName, body.version)
        (responseSpec, successResponse) = self.create("basecheck:templ_json",
                                                      False)
        (responseSpec, failedResponse) = self.create("basecheck:templ_json",
                                                     False)

        if base != False and base != None:
            baserel = templServer.templdb.BaseCheck(body.BaseName,
                                                    body.version)
            if baserel != False and baserel != None:
                successResponse.status = 0
                successResponse.BaseName = 'base check successful'
                successResponse.BaseName = body.BaseName
                successResponse.version = body.version
                successResponse.BRelation = '%s:%s' % (body.BaseName, baserel)
                print successResponse
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())
            elif baserel == None:
                successResponse.status = 2
                successResponse.message = ' this base does not have base template'
                successResponse.BaseName = body.BaseName
                successResponse.version = body.version
                successResponse.BRelation = 'None'
                print successResponse
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())
            else:
                successResponse.status = 1
                successResponse.message = 'error:cannot show json relationship'
                self.write_log('error', body.session.userId,
                               successResponse.message,
                               '返回Json relationship信息')
                print successResponse
                self.send(message.getSource(), proto, responseSpec,
                          successResponse, message.getRequestId())
        elif base == None:
            failedResponse.status = 3
            failedResponse.message = 'error:cannot find the base'
            failedResponse.BaseName = body.BaseName
            failedResponse.version = body.version
            failedResponse.BRelation = 'None'
            print failedResponse
            self.send(message.getSource(), proto, responseSpec,
                      successResponse, message.getRequestId())
        else:
            failedResponse.status = 4
            failedResponse.message = 'error:something is wrong!'
            print failedResponse
            self.write_log('error', body.session.userId, failedResponse,
                           '基类查看')

    def onDownLoad(self, proto, spec, message, body):  #下载
        print '------Begin download------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'template name:%s' % body.TemplName
        print 'version:%s' % body.version
        print '------End download--------'
        with open('tests/master-private.pem') as f:
            privateKey1 = f.read()
        # try:
        download = templServer.templdb.CheckVersion(body.TemplName,
                                                    body.version)
        (responseSpec, successResponse) = self.create("download:templ_json",
                                                      False)
        (responseSpec, failedResponse) = self.create("download:templ_json",
                                                     False)

        if download != False and download != None:
            #添加下载模板函数,连接数据库
            downT = templServer.templdb.download(body.TemplName, body.version)
            if downT != None and downT != False:

                def GetTContentSuccess(TContent):
                    successResponse.status = 0
                    successResponse.message = 'template check successful'
                    successResponse.TemplName = body.TemplName
                    successResponse.version = body.version
                    tcontent = TContent[body.TemplName].split('\n')
                    successResponse.contents = 'contents:\n%s' % tcontent[0]
                    print 'status:%s' % successResponse.status
                    print 'message:%s' % successResponse.message
                    print 'TemplName:%s' % successResponse.TemplName
                    print 'version:%s' % successResponse.version
                    print successResponse.contents
                    for ii in range(1, len(tcontent)):
                        print tcontent[ii]
                    self.send(message.getSource(), proto, responseSpec,
                              successResponse, message.getRequestId())

                def GetTContentFailed(errMesg):
                    print 'getSeriesContent failed: %s' % errMesg
                    failedResponse.status = 1
                    failedResponse.message = 'error:getcontent failed'
                    failedResponse.TemplName = body.TemplName
                    failedResponse.version = body.version
                    failedResponse.contents = None
                    self.send(message.getSource(), proto, responseSpec,
                              successResponse, message.getRequestId())

                try:
                    self.securityClient.getSeriesContent(
                        self.session,
                        [[body.TemplName, int(downT[0])]], privateKey1).then(
                            GetTContentSuccess).catch(GetTContentFailed)
                except Exception as e:
                    print 'error:%s' % e
                    self.send(message.getSource(), proto, responseSpec,
                              successResponse, message.getRequestId())
            ########################
            else:
                return False
        elif download == None:
            successResponse.status = 2
            successResponse.message = 'this template does not exist'
            successResponse.TemplName = body.TemplName
            successResponse.version = body.version
            successResponse.contents = None
            print successResponse
            self.send(message.getSource(), proto, responseSpec,
                      successResponse, message.getRequestId())
        else:
            failedResponse.status = 1
            failedResponse.message = 'error:cannot download the template'
            failedResponse.TemplName = body.TemplName
            failedResponse.version = body.version
            failedResponse.contents = None
            print failedResponse
            self.write_log('error', body.session.userId,
                           failedResponse.message, '下载')
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def onGetJsonCon(self, proto, spec, message, body):  #请求json内容
        cur = self.conn.cursor()
        print '------Begin ask json content------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'json name:%s' % body.JsonAttrName
        print 'version:%s' % body.version
        print '-------End ask json content-------'
        with open('tests/master-private.pem') as f:
            privateKey1 = f.read()
        # try:
        checkrel = templServer.templdb.CheckVersion(body.JsonAttrName,
                                                    body.version)
        (responseSpec, successResponse) = self.create("getjsoncon:templ_json",
                                                      False)
        (responseSpec, failedResponse) = self.create("getjsoncon:templ_json",
                                                     False)
        if checkrel != False and checkrel != None:
            #添加json属性字段查找函数,连接数据库
            gattr = templServer.templdb.GetAttr(body.JsonAttrName,
                                                body.version)
            if gattr != False and gattr != None:

                def GetContentSuccess(JsonContent):
                    successResponse.status = 0
                    successResponse.message = 'json check successful'
                    successResponse.version = body.version
                    Jcontent = JsonContent[body.JsonAttrName].split('\n')
                    successResponse.JsonAttr = '%s:%s' % (body.JsonAttrName,
                                                          Jcontent[0])
                    print 'status:%s' % successResponse.status
                    print 'message:%s' % successResponse.message
                    print 'JsonContent:%s' % successResponse.JsonAttr
                    for ii in range(1, len(Jcontent)):
                        print Jcontent[ii]
                    self.send(message.getSource(), proto, responseSpec,
                              successResponse, message.getRequestId())

                def GetContentFailed(errMesg):
                    print 'getSeriesContent failed: %s' % errMesg
                    failedResponse.status = 1
                    failedResponse.message = 'error:getJsonContent failed'
                    failedResponse.version = body.version
                    failedResponse.JsonAttr = None
                    self.send(message.getSource(), proto, responseSpec,
                              failedResponse, message.getRequestId())

                try:
                    self.securityClient.getSeriesContent(
                        self.session,
                        [[body.JsonAttrName, int(gattr[0])]],
                        privateKey1).then(GetContentSuccess).catch(
                            GetContentFailed)
                except Exception as e:
                    print 'error:%s' % e
                    failedResponse.message = 'error:%s' % e
                    self.send(message.getSource(), proto, responseSpec,
                              failedResponse)
        else:
            (responseSpec,
             failedResponse) = self.create("typeattr:templ_json", False)
            failedResponse.status = 1
            failedResponse.message = 'error:cannot show json attribute'
            print failedResponse
            self.write_log('error', body.session.userId, failedResponse,
                           '请求json内容')
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())

    def onGrantAuthority(self, proto, spec, message, body):  #授权
        print '------Begin Grant Authority------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'userId:%s' % body.userId
        print '-------End Grant Authority-------'
        (responseSpec,
         successResponse) = self.create("grantauthority:templ_json", False)
        successResponse.status = 0
        successResponse.message = "Grant Authority Success"
        self.send(message.getSource(), proto, responseSpec, successResponse,
                  message.getRequestId())

    #######模板合并未编完######
    def onTemplMerge(self, proto, spec, message, body):  #请求模板合并
        print '------Begin ask merge template------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print '-------End ask merge template-------'
        ###################未编完,思路有待考证,版本是否需要check ###
        (responseSpec, successResponse) = self.create("templmerge:templ_json",
                                                      False)
        successResponse.status = 0
        successResponse.message = "Template Merge Success"
        self.send(message.getSource(), proto, responseSpec, successResponse,
                  message.getRequestId())

    def onCreateVersion(self, proto, spec, message, body):
        print '------Begin Create Version------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'templname:%s' % body.name
        print 'version:%s' % body.version
        print 'contents:%s' % body.contents
        print '------End Create Version--------'

        with open('tests/master-public.pem') as f:
            publicKey1 = f.read()
        checkcontent = self.Templ2Field(body.contents)
        (responseSpec, failedResponse) = self.create("creatversion:templ_json",
                                                     False)

        if checkcontent != [] and checkcontent != None and isinstance(
                checkcontent, str) == False:
            # 获取密钥
            passcontent = []
            passorigin = []
            passwd = string.join(
                random.sample(
                    list(
                        'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-+'
                    ), 16)).replace(" ", "")
            passorigin.append('origin' + body.name + body.version)
            passorigin.append(body.contents)
            passorigin.append(passwd)
            passcontent.append(passorigin)
            for ii in range(len(checkcontent)):
                jsoncontent = []
                passwd = string.join(
                    random.sample(
                        list(
                            'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-+'
                        ), 16)).replace(" ", "")
                jsoncontent.append('json' + checkcontent[ii].TemplName +
                                   body.version)
                jsoncontent.append(
                    json.dumps(checkcontent[ii],
                               cls=TemplToJson.MyEncoder,
                               indent=4))  # putcontent->初始内容
                jsoncontent.append(passwd)
                passcontent.append(jsoncontent)

            def putContentSuccess(originContentId):
                option = 'create'
                self.passcontent(message, proto, originContentId, checkcontent,
                                 publicKey1, body, option)

            def putContentFailed(errMesg):
                print 'putSeriesContent failed: %s' % errMesg
                failedResponse.status = 3
                failedResponse.message = 'error:putContentFailed'
                failedResponse.name = body.name
                failedResponse.isLegal = True
                failedResponse.version = body.version
                failedResponse.isVersionIn = True
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())

            try:
                self.securityClient.putSeriesContent(
                    self.session, passcontent,
                    publicKey1).then(putContentSuccess).catch(putContentFailed)
            except Exception as e:
                print 'error:%s' % e
                failedResponse.message = 'error:%s' % e
                self.send(message.getSource(), proto, responseSpec,
                          failedResponse, message.getRequestId())
        else:
            failedResponse.status = 4
            failedResponse.message = 'contents is not legal:%s' % checkcontent
            failedResponse.name = body.name
            failedResponse.isLegal = False
            failedResponse.version = body.version
            failedResponse.isVersionIn = False
            self.send(message.getSource(), proto, responseSpec, failedResponse,
                      message.getRequestId())
            print failedResponse
Esempio n. 18
0
class templServer(MessagePlugin):
    conn = psycopg2.connect(database="MyDb", user="******", password="******", host="127.0.0.1", port="5432")
    templdb = mydb(conn)

    def __init__(self, messageHandle):
        super(templServer, self).__init__(messageHandle)

        logging.basicConfig(filename = os.path.join(os.getcwd(), time.strftime('%Y-%m-%d-') + 'log.txt'),
        level = logging.ERROR, filemode = 'a', format = '错误时间:%(asctime)s  %(message)s',datefmt='%a, %d %b %Y %H:%M:%S')
        #按照下面的顺序将函数写入

        self.handle('upcontent:templ_json', True, self.onUpContent)
        self.handle('jsonrelation:templ_json', True, self.onJsonRelation)
        self.handle('basecheck:templ_json', True, self.onBaseCheck)
        self.handle('download:templ_json', True, self.onDownLoad)
        self.handle('getjsoncon:templ_json', True, self.onGetJsonCon)
        self.handle('grantauthority:templ_json', True, self.onGrantAuthority)
        self.handle('templmerge:templ_json', True, self.onTemplMerge)
        self.handle('createversion:templ_json', True, self.onCreateVersion)

    def onConnectionOpened(self, proto):
        print '----begin login-----'
        self.aclClient = ACLClient(proto, self.mesgHandle, 609)
        self.securityClient = SecClient(proto, self.mesgHandle, 609)
        self.session = self.aclClient.login('bb', '1232')
        if 0 == self.session.userId and 0 == self.session.seqId:
            print '----login failed-----'
        else:
            print '----login success----'

    def onConnectionClosed(self, proto, reason):
        print '----begin logout-----'
        if self.session is not None:
            self.aclClient.logout(self.session)
        print '---logout success---'

    def write_log(self,log_type, userId, message, operation):
        logger = '\n用户ID:%s\n错误信息:%s\n%s\n执行操作:%s\n' % (userId, message, operation,'-'*50)
        if log_type == 'error':
            logging.error(logger)

#上传模板成功后(不管是更新,还是新建),该模板需要转换成json存储到t_jsonattr表中,还需要将该表的关系更新至t_baserelation中

    def Templ2Field(self,templcontent):#将模板转为json字段存储
        ################判断是否只有一个模板##################
        templcon = templcontent.split('};')
        c = None
        ob = []
        for ii in range(len(templcon)):
            templob = []
            templcon[ii] = templcon[ii].strip()
            templcon[ii] = templcon[ii].splitlines() #按行分割
            for ii0 in range(len(templcon[ii])):#去除空行
                if templcon[ii][ii0] != '':
                    templob.append(templcon[ii][ii0])
            if templob != []:
                templob = TemplToJson.TemplObject(templob)
                if templob.islegal == None:
                    ob.append(templob)
                else:
                    c = templob.islegal
                    break
        if c == None:
            return ob
        else:
            return c
    # @checkLogin
    # @checkPermission
    def onUpContent(self, proto, spec, message, body):
        print '------Begin Upload Content------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'template name:%s' % body.name
        print 'version:%s' % body.version
        print 'contents:%s' % body.contents
        print '------End Upload Content--------'
        with open('tests/master-public.pem') as f:
            publicKey1 = f.read()
        checkcontent = self.Templ2Field(body.contents)
        (responseSpec, failedResponse) = self.create("upcontent:templ_json", False)
        if checkcontent != [] and checkcontent != None and isinstance(checkcontent,str) == False:
            # 获取密钥
            passcontent = []
            passorigin = []
            passwd = string.join(random.sample(list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-+'), 16)).replace(" ","")
            passorigin.append('origin' + body.name + body.version)
            passorigin.append(body.contents)
            passorigin.append(passwd)
            passcontent.append(passorigin)
            for ii in range(len(checkcontent)):
                jsoncontent = []
                passwd = string.join(random.sample(list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-+'), 16)).replace(" ","")
                jsoncontent.append('json' + checkcontent[ii].TemplName + body.version)
                m = json.dumps(checkcontent[ii], cls=TemplToJson.MyEncoder, indent=4)
                jsoncontent.append(m)  # putcontent->初始内容
                jsoncontent.append(passwd)
                passcontent.append(jsoncontent)

            def putContentSuccess(originContentId):
                option = 'update'
                self.passcontent(message,proto,originContentId,checkcontent,publicKey1,body,option)

            def putContentFailed(errMesg):
                print 'putSeriesContent failed: %s' % errMesg
                failedResponse.status = 1
                failedResponse.message = 'error:put content failed'
                failedResponse.name = body.name
                failedResponse.isLegal = True
                failedResponse.version = body.version
                failedResponse.isVersionIn = True
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

            try:
                self.securityClient.putSeriesContent(self.session, passcontent, publicKey1).then(putContentSuccess).catch(putContentFailed)
            except Exception as e:
                print 'error:%s' % e
        else:
            failedResponse.status = 1
            failedResponse.message = 'contents is not legal:%s' % checkcontent
            failedResponse.name = body.name
            failedResponse.isLegal = False
            failedResponse.version = body.version
            failedResponse.isVersionIn = False
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())
            print failedResponse

    def passcontent(self,message, proto,originContentId,checkcontent,publicKey1,body,option):
        security_cid = originContentId['origin' + body.name + body.version]
        ######################################
        (responseSpec, Response) = self.create("upcontent:templ_json", False)
        for iii in range(len(checkcontent)):
            security_jid = originContentId['json' + checkcontent[iii].TemplName + body.version]
            checkv = templServer.templdb.CheckVersion(body.name, body.version)
            if checkv != False and checkv != None and option == 'update':  # 该version在数据库内,执行update该version的函数
                # try:
                update = templServer.templdb.UpDateJsonAttr(checkcontent[iii].TemplName, body.version,
                                                            checkcontent[iii].BaseName, security_cid, security_jid,
                                                            'false',publicKey1, checkcontent[iii].TemplType)

                if update == True:  # update成功
                    Response.status = 0
                    Response.message = 'update content successful'
                    Response.name = checkcontent[iii].TemplName
                    Response.isLegal = True
                    Response.version = body.version
                    Response.isVersionIn = True
                    print Response
                    if "::" not in checkcontent[iii].TemplName:
                        upRela = templServer.templdb.UpdateRelation(checkcontent[iii].TemplName, body.version,checkcontent[iii].BaseName)
                        if upRela==True:
                            print 'base relation update success'
                        else:
                            print 'error:123456'
                else:
                    Response.status = 1
                    Response.message = 'error: cannot update content'
                    Response.name = checkcontent[iii].TemplName
                    Response.isLegal = True
                    Response.version = body.version
                    Response.isVersionIn = False
                    print Response
                    self.write_log('error', body.session.userId, Response.message, '更新文件')
            elif checkv == None and option == 'create':  # 该version不在数据库内,执行创建该version的函数

                upversion = templServer.templdb.CreateJsonAttr(checkcontent[iii].TemplName, body.version,
                                                               checkcontent[iii].BaseName, security_cid, security_jid,
                                                               'false', publicKey1, checkcontent[iii].TemplType)
                if upversion == True:
                    Response.status = 0
                    Response.message = 'creat a new version of this name'
                    Response.name = checkcontent[iii].TemplName
                    Response.isLegal = True
                    Response.version = body.version
                    Response.isVersionIn = False
                    print Response
                    upRela = templServer.templdb.UpdateRelation(checkcontent[iii].TemplName, body.version,checkcontent[iii].BaseName)
                    if upRela==True:
                        print 'base relation update success'
                    else:
                        print 'error:12345678'
                else:
                    Response.status = 2
                    Response.message = 'error:cannot create a new version'
                    Response.name = checkcontent[iii].TemplName
                    Response.isLegal = True
                    Response.version = body.version
                    Response.isVersionIn = False
                    print Response
            else:  # 否则返回错误信息
                Response.status = 3
                Response.message = 'cannot upload content'
                Response.name = checkcontent[iii].TemplName
                Response.isLegal = True
                Response.version = body.version
                Response.isVersionIn = False
                print Response
                self.write_log('error', body.session.userId, Response.message, '上传文件')

        self.send(message.getSource(),proto, responseSpec, Response, message.getRequestId())

    def onJsonRelation(self, proto, spec, message, body):#请求Json relationship
        cur = self.conn.cursor()
        print '------Begin ask Json relationship------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'JsonRelationName:%s' % body.JsonRelationName
        print 'version:%s' % body.version
        print '------End ask Json relationship--------'
        # try:
        RelCheck=templServer.templdb.CheckRelVersion(body.JsonRelationName, body.version)
        (responseSpec, successResponse) = self.create("jsonrelation:templ_json", False)
        (responseSpec, failedResponse) = self.create("jsonrelation:templ_json", False)

        if RelCheck != False and RelCheck != None:
            JsonRelation = templServer.templdb.JsonRelation(body.JsonRelationName, body.version)
            if JsonRelation != False and JsonRelation != None:
                successResponse.status = 0
                successResponse.message = 'show json relationship successful'
                successResponse.JsonRelationName = body.JsonRelationName
                successResponse.version = body.version
                successResponse.JRelation = '%s' % JsonRelation
                print successResponse
                self.send(message.getSource(),proto, responseSpec, successResponse, message.getRequestId())
            elif JsonRelation == None:
                successResponse.status = 2
                successResponse.message = ' json relationship is empty'
                successResponse.JsonRelationName = body.JsonRelationName
                successResponse.version = body.version
                successResponse.JRelation = 'None'
                print successResponse
                self.send(message.getSource(),proto, responseSpec, successResponse)
            else:
                failedResponse.status = 1
                failedResponse.message = 'error:cannot show json relationship'
                print failedResponse
                self.write_log('error', body.session.userId, failedResponse.message, '返回Json relationship信息')
                self.send(message.getSource(),proto, responseSpec, failedResponse, message.getRequestId())
        elif RelCheck == None:
            successResponse.status = 2
            successResponse.message = 'the jsonrelationship of this name&version does not exist'
            successResponse.JsonRelationName = body.JsonRelationName
            successResponse.version = body.version
            successResponse.JRelation = 'None'
            print successResponse
            self.send(message.getSource(),proto, responseSpec, successResponse, message.getRequestId())
        else:
            failedResponse.status = 1
            failedResponse.message = 'error:something is wrong!'
            print failedResponse
            self.write_log('error', body.session.userId, failedResponse.message, '请求Json relationship')

    def onBaseCheck(self, proto, spec, message, body):#基类查看
        cur = self.conn.cursor()
        print '------Begin Base Check------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'base name:%s' % body.BaseName
        print 'version:%s' % body.version
        print '------End Base Check--------'
        # try:
        base=templServer.templdb.CheckRelVersion(body.BaseName, body.version)
        (responseSpec, successResponse) = self.create("basecheck:templ_json", False)
        (responseSpec, failedResponse) = self.create("basecheck:templ_json", False)

        if base != False and base != None:
            baserel = templServer.templdb.BaseCheck(body.BaseName, body.version)
            if baserel != False and baserel != None:
                successResponse.status = 0
                successResponse.BaseName = 'base check successful'
                successResponse.BaseName = body.BaseName
                successResponse.version = body.version
                successResponse.BRelation = '%s:%s'% (body.BaseName,baserel)
                print successResponse
                self.send(message.getSource(),proto, responseSpec, successResponse, message.getRequestId())
            elif baserel == None:
                successResponse.status = 2
                successResponse.message = ' this base does not have base template'
                successResponse.BaseName = body.BaseName
                successResponse.version = body.version
                successResponse.BRelation = 'None'
                print successResponse
                self.send(message.getSource(),proto, responseSpec, successResponse, message.getRequestId())
            else:
                successResponse.status = 1
                successResponse.message = 'error:cannot show json relationship'
                self.write_log('error', body.session.userId, successResponse.message, '返回Json relationship信息')
                print successResponse
                self.send(message.getSource(),proto, responseSpec, successResponse, message.getRequestId())
        elif base == None:
            failedResponse.status = 3
            failedResponse.message = 'error:cannot find the base'
            failedResponse.BaseName = body.BaseName
            failedResponse.version = body.version
            failedResponse.BRelation = 'None'
            print failedResponse
            self.send(message.getSource(),proto, responseSpec, successResponse, message.getRequestId())
        else:
            failedResponse.status = 4
            failedResponse.message = 'error:something is wrong!'
            print failedResponse
            self.write_log('error', body.session.userId, failedResponse, '基类查看')

    def onDownLoad(self, proto, spec, message, body):#下载
        print '------Begin download------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'template name:%s' % body.TemplName
        print 'version:%s' % body.version
        print '------End download--------'
        with open('tests/master-private.pem') as f:
            privateKey1 = f.read()
        # try:
        download=templServer.templdb.CheckVersion(body.TemplName, body.version)
        (responseSpec, successResponse) = self.create("download:templ_json", False)
        (responseSpec, failedResponse) = self.create("download:templ_json", False)

        if download != False and download != None:
            #添加下载模板函数,连接数据库
            downT=templServer.templdb.download(body.TemplName, body.version)
            if downT != None and downT != False:
                def GetTContentSuccess(TContent):
                    successResponse.status = 0
                    successResponse.message = 'template check successful'
                    successResponse.TemplName = body.TemplName
                    successResponse.version = body.version
                    tcontent = TContent[body.TemplName].split('\n')
                    successResponse.contents = 'contents:\n%s'% tcontent[0]
                    print 'status:%s'% successResponse.status
                    print 'message:%s'% successResponse.message
                    print 'TemplName:%s'% successResponse.TemplName
                    print 'version:%s'% successResponse.version
                    print successResponse.contents
                    for ii in range(1,len(tcontent)):
                        print tcontent[ii]
                    self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())

                def GetTContentFailed(errMesg):
                    print 'getSeriesContent failed: %s' % errMesg
                    failedResponse.status = 1
                    failedResponse.message = 'error:getcontent failed'
                    failedResponse.TemplName = body.TemplName
                    failedResponse.version = body.version
                    failedResponse.contents = None
                    self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())
                try:
                    self.securityClient.getSeriesContent(self.session,[[body.TemplName, int(downT[0])]], privateKey1).then(GetTContentSuccess).catch(GetTContentFailed)
                except Exception as e:
                    print 'error:%s' % e
                    self.send(message.getSource(),proto, responseSpec, successResponse, message.getRequestId())
            ########################
            else: return False
        elif download == None:
            successResponse.status = 2
            successResponse.message = 'this template does not exist'
            successResponse.TemplName = body.TemplName
            successResponse.version = body.version
            successResponse.contents = None
            print successResponse
            self.send(message.getSource(),proto, responseSpec, successResponse, message.getRequestId())
        else:
            failedResponse.status = 1
            failedResponse.message = 'error:cannot download the template'
            failedResponse.TemplName = body.TemplName
            failedResponse.version = body.version
            failedResponse.contents = None
            print failedResponse
            self.write_log('error', body.session.userId, failedResponse.message, '下载')
            self.send(message.getSource(),proto, responseSpec, failedResponse, message.getRequestId())

    def onGetJsonCon(self, proto, spec, message, body):#请求json内容
        cur = self.conn.cursor()
        print '------Begin ask json content------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'json name:%s' % body.JsonAttrName
        print 'version:%s' % body.version
        print '-------End ask json content-------'
        with open('tests/master-private.pem') as f:
            privateKey1 = f.read()
        # try:
        checkrel=templServer.templdb.CheckVersion(body.JsonAttrName, body.version)
        (responseSpec, successResponse) = self.create("getjsoncon:templ_json", False)
        (responseSpec, failedResponse) = self.create("getjsoncon:templ_json", False)
        if checkrel != False and checkrel != None:
            #添加json属性字段查找函数,连接数据库
            gattr = templServer.templdb.GetAttr(body.JsonAttrName, body.version)
            if gattr != False and gattr != None:
                def GetContentSuccess(JsonContent):
                    successResponse.status = 0
                    successResponse.message = 'json check successful'
                    successResponse.version = body.version
                    Jcontent = JsonContent[body.JsonAttrName].split('\n')
                    successResponse.JsonAttr = '%s:%s'% (body.JsonAttrName,Jcontent[0])
                    print 'status:%s'% successResponse.status
                    print 'message:%s'% successResponse.message
                    print 'JsonContent:%s'% successResponse.JsonAttr
                    for ii in range(1,len(Jcontent)):
                        print Jcontent[ii]
                    self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())

                def GetContentFailed(errMesg):
                    print 'getSeriesContent failed: %s' % errMesg
                    failedResponse.status = 1
                    failedResponse.message = 'error:getJsonContent failed'
                    failedResponse.version = body.version
                    failedResponse.JsonAttr = None
                    self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

                try:
                    self.securityClient.getSeriesContent(self.session,[[body.JsonAttrName, int(gattr[0])]], privateKey1).then(GetContentSuccess).catch(GetContentFailed)
                except Exception as e:
                    print 'error:%s' % e
                    failedResponse.message = 'error:%s' % e
                    self.send(message.getSource(),proto, responseSpec, failedResponse)
        else:
            (responseSpec, failedResponse) = self.create("typeattr:templ_json", False)
            failedResponse.status = 1
            failedResponse.message = 'error:cannot show json attribute'
            print failedResponse
            self.write_log('error', body.session.userId, failedResponse, '请求json内容')
            self.send(message.getSource(),proto, responseSpec, failedResponse, message.getRequestId())

    def onGrantAuthority(self, proto, spec, message, body):#授权
        print '------Begin Grant Authority------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'userId:%s' % body.userId
        print '-------End Grant Authority-------'
        (responseSpec, successResponse) = self.create("grantauthority:templ_json", False)
        successResponse.status = 0
        successResponse.message = "Grant Authority Success"
        self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())

    #######模板合并未编完######
    def onTemplMerge(self, proto, spec, message, body):#请求模板合并
        print '------Begin ask merge template------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print '-------End ask merge template-------'
        ###################未编完,思路有待考证,版本是否需要check ###
        (responseSpec, successResponse) = self.create("templmerge:templ_json", False)
        successResponse.status = 0
        successResponse.message = "Template Merge Success"
        self.send(message.getSource(), proto, responseSpec, successResponse, message.getRequestId())

    def onCreateVersion(self, proto, spec, message, body):
        print '------Begin Create Version------'
        print 'userId-seqId: %s-%s' % (body.session.userId, body.session.seqId)
        print 'templname:%s' % body.name
        print 'version:%s' % body.version
        print 'contents:%s' % body.contents
        print '------End Create Version--------'

        with open('tests/master-public.pem') as f:
            publicKey1 = f.read()
        checkcontent = self.Templ2Field(body.contents)
        (responseSpec, failedResponse) = self.create("creatversion:templ_json", False)

        if checkcontent != [] and checkcontent != None and isinstance(checkcontent,str) == False:
            # 获取密钥
            passcontent = []
            passorigin = []
            passwd = string.join(random.sample(list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-+'), 16)).replace(" ","")
            passorigin.append('origin' + body.name + body.version)
            passorigin.append(body.contents)
            passorigin.append(passwd)
            passcontent.append(passorigin)
            for ii in range(len(checkcontent)):
                jsoncontent = []
                passwd = string.join(random.sample(list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-+'), 16)).replace(" ","")
                jsoncontent.append('json' + checkcontent[ii].TemplName + body.version)
                jsoncontent.append(json.dumps(checkcontent[ii], cls=TemplToJson.MyEncoder, indent=4))  # putcontent->初始内容
                jsoncontent.append(passwd)
                passcontent.append(jsoncontent)

            def putContentSuccess(originContentId):
                option = 'create'
                self.passcontent(message,proto,originContentId,checkcontent,publicKey1,body,option)

            def putContentFailed(errMesg):
                print 'putSeriesContent failed: %s' % errMesg
                failedResponse.status = 3
                failedResponse.message = 'error:putContentFailed'
                failedResponse.name = body.name
                failedResponse.isLegal = True
                failedResponse.version = body.version
                failedResponse.isVersionIn = True
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())

            try:
                self.securityClient.putSeriesContent(self.session, passcontent, publicKey1).then(putContentSuccess).catch(putContentFailed)
            except Exception as e:
                print 'error:%s' % e
                failedResponse.message = 'error:%s' % e
                self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())
        else:
            failedResponse.status = 4
            failedResponse.message = 'contents is not legal:%s' % checkcontent
            failedResponse.name = body.name
            failedResponse.isLegal = False
            failedResponse.version = body.version
            failedResponse.isVersionIn = False
            self.send(message.getSource(), proto, responseSpec, failedResponse, message.getRequestId())
            print failedResponse
Esempio n. 19
0
def test(pea, proto):
    client123 = ACLClient(proto, pea.customHandle, 609)
    session = client123.login('aa', '1231')

    client = ConfigureObjectClient(proto, pea.customHandle, 612)

    with open('tests/master-public.pem') as f:
        publicKey1 = f.read()
    with open('tests/master-private.pem') as f:
        privateKey1 = f.read()
    with open('tests/ghost-public.pem') as f:
        publicKey2 = f.read()
    with open('tests/ghost-private.pem') as f:
        privateKey2 = f.read()


    def getObjectSuccess(content):
        print content
    def getObjectFailed(errMsg):
        print errMsg
    def success(msg):
        print msg
    def failed(msg):
        print msg

    #client.listCollections(session).then(getObjectSuccess).catch(getObjectFailed)

    # client.deleteObject(session, [['obj6', '20120812', 'v0.2'], ['obj7', '20120812', 'v0.2']]).then(
    #     success).catch(failed)
    # client.getObjects(session, [['obj6', '20120812', 'v0.2'],['obj7', '20120812', 'v0.2']]).then(
    #     success).catch(failed)
    objcontentlist = [
        ['obj1', '20120813', 'v0.2', "signal", "tmpl1", "col1", 'ccc2'],
        ['obj2', '20120813', 'v0.2', "signal","tmpl1","col1",'ccc2'],
        ['obj3', '20120813', 'v0.2', "signal","tmpl1","col1",'ccc2'],
        ['obj4', '20120813', 'v0.2', "signal","tmpl1","col1",'ccc2'],
        ['obj5', '20120813', 'v0.2', "signal","tmpl1","col1",'ccc2'],
        ['obj6', '20120813', 'v0.2', "signal","tmpl1","col1",'ccc2'],
        ['obj7', '20120813', 'v0.2',"signal","tmpl1","col1", 'ccc2'],
        ['obj8', '20120813', 'v0.2', "signal","tmpl1","col1",'ccc2'],
        ['obj1', '20120813', 'v0.3', "signal","tmpl1","col2",'ccc3'],
        ['obj2', '20120813', 'v0.3', "signal","tmpl1","col2",'ccc3'],
        ['obj3', '20120813', 'v0.3', "signal","tmpl1","col2",'ccc3'],
        ['obj4', '20120813', 'v0.3', "signal","tmpl1","col2",'ccc3'],
        ['obj5', '20120813', 'v0.3', "signal","tmpl1","col2",'ccc3'],
        ['obj6', '20120813', 'v0.3', "signal","tmpl1","col2",'ccc3'],
        ['obj7', '20120813', 'v0.3', "signal","tmpl1","col2",'ccc3'],
        ['obj8', '20120813', 'v0.3', "signal","tmpl1","col2",'ccc3'],
        ['obj1', '20120814', 'v0.2', "strategy","tmpl1","col1",'ccc2'],
        ['obj2', '20120814', 'v0.2', "strategy","tmpl1","col1",'ccc2'],
        ['obj3', '20120814', 'v0.2', "strategy","tmpl1","col1",'ccc2'],
        ['obj4', '20120814', 'v0.2', "strategy","tmpl1","col1",'ccc2'],
        ['obj5', '20120814', 'v0.2', "strategy","tmpl1","col1",'ccc2'],
        ['obj6', '20120814', 'v0.2', "strategy","tmpl1","col1",'ccc2'],
        ['obj7', '20120814', 'v0.2', "strategy","tmpl1","col1",'ccc2'],
        ['obj8', '20120814', 'v0.2', "strategy","tmpl1","col1",'ccc2'],
        ['obj1', '20120814', 'v0.3', "strategy","tmpl1","col2",'ccc3'],
        ['obj2', '20120814', 'v0.3', "strategy","tmpl1","col2",'ccc3'],
        ['obj3', '20120814', 'v0.3', "strategy","tmpl1","col2",'ccc3'],
        ['obj4', '20120814', 'v0.3', "strategy","tmpl1","col",'ccc3'],
        ['obj5', '20120814', 'v0.3', "strategy","tmpl1","col1",'ccc3'],
    ]
    objlist = [
        # ['obj1', '20120813', 'v0.2'],
        # ['obj2', '20120813', 'v0.2'],
        # ['obj3', '20120813', 'v0.2'],
        # ['obj4', '20120813', 'v0.2'],
        # ['obj5', '20120813', 'v0.2'],
        # ['obj6', '20120813', 'v0.2'],
        # ['obj7', '20120813', 'v0.2'],
        # ['obj8', '20120813', 'v0.2'],
        # ['obj1', '20120813', 'v0.3'],
        # ['obj2', '20120813', 'v0.3'],
        # ['obj3', '20120813', 'v0.3'],
        # ['obj4', '20120813', 'v0.3'],
        # ['obj5', '20120813', 'v0.3'],
        # ['obj6', '20120813', 'v0.3'],
        # ['obj7', '20120813', 'v0.3'],
        # ['obj8', '20120813', 'v0.3']
        ['obj1', '20120814', 'v0.2'],
        ['obj2', '20120814', 'v0.2'],
        ['obj3', '20120814', 'v0.2'],
        ['obj4', '20120814', 'v0.2'],
        ['obj5', '20120814', 'v0.2'],
        ['obj6', '20120814', 'v0.2'],
        ['obj7', '20120814', 'v0.2'],
        ['obj8', '20120814', 'v0.2'],
        ['obj1', '20120814', 'v0.3'],
        ['obj2', '20120814', 'v0.3'],
        ['obj3', '20120814', 'v0.3'],
        ['obj4', '20120814', 'v0.3'],
        ['obj5', '20120814', 'v0.3'],
        ['obj6', '20120814', 'v0.3'],
        ['obj7', '20120814', 'v0.3'],
        ['obj8', '20120814', 'v0.3']
               ]
    col = []
    client.getCollection(session, '20120813', 'v0.2',"signal","tmpl1","col1").then(success).catch(failed)