Example #1
0
async def add_receive_role_if_exists(client, member, survey_id):
    if (receive_role :=
            db.get_survey_receive_role_or_none(survey_id)) is not None:
        survey_receive_role = get_role(client, receive_role)
        logging.info(
            f"Adding role ({survey_receive_role.name}) to user {member_to_string(member)}"
        )
        await member.add_roles(survey_receive_role)
Example #2
0
def night_quotes(update, context):
    """
    Fill the db with the new quotes for all leagues.
    """

    if utl.get_role(update) == 'Admin':
        cfg.JOB_QUEUE.run_once(jobs.job_night_quotes, when=3)
    else:
        chat_id = update.message.chat_id
        return context.bot.send_message(chat_id=chat_id,
                                        text='Fatti i cazzi tuoi')
Example #3
0
def payload_handler(obj):
    if "payload" in obj:
        data = loads(obj.payload)
        user = bot.get_object(obj.from_id)
        chat = bot.get_chat(obj.peer_id)
        
        if "action" in data and "tag" in data:
            action = data["action"]
            tag = data["tag"]
            if action == "club":
                bot.cmd.commands["club"].exec(user, chat, [tag], obj)
            elif action == "members":
                club = brawl.get_club(tag)
                members= club.get("members")
                msg = "{} {} [{}/100]\n".format(bot.get_messages("btn-club"), club.get("name"), len(members))
                for k in range(0, len(members)):
                    msg += bot.get_messages("member",
                        role=get_role(members[k]["role"]),
                        t=members[k]["trophies"],
                        name=members[k]["name"],
                        tag=members[k]["tag"],
                        n=k+1
                        )
                    msg += "\n"
                chat.sendMessage(msg)
            elif action == "brawlers":
                player = brawl.get_player(tag)
                brawlers = player.get("brawlers")
                msg = "{} {} ({}):\n".format(bot.get_messages("btn-player"), player.get("name"), len(brawlers))
                for k in range(0, len(brawlers)):
                    msg += bot.get_messages("brawler",
                        trophies=brawlers[k]["trophies"],
                        power=brawlers[k]["power"],
                        name=brawlers[k]["name"],
                        rank=brawlers[k]["rank"],
                        n=k+1
                        )
                    msg += "\n"
                chat.sendMessage(msg)
        elif "command" in data and data["command"] == "start":
            chat.sendMessage("{}, привет!".format(user.getName(True)))
            bot.cmd.commands["help"].exec(user, chat, [], obj)
Example #4
0
def set_topic():
    user = VkApi(token=bot.get_settings("admin_token"), api_version=bot.vk.api_version)
    members = brawl.get_club_members("#R020J99L").response["items"]
    msg = "Список участников [{}/100]\n".format(len(members))
    for k in range(0, len(members)):
        msg += bot.get_messages("member",
            role=get_role(members[k]["role"]),
            t=members[k]["trophies"],
            name=members[k]["name"],
            tag=members[k]["tag"],
            n=k+1
            )
        msg += "\n"
        
    try:
        user.method("board.editComment", {
            "group_id": bot.lp.group_id,
            "comment_id": 2,
            "topic_id": 41459579,
            "message": msg
            })
    except:
        bot.log_exception()
Example #5
0
 def test_role_ops(self):
     test_role = get_random_string()
     assert utils.create_role(test_role)
     assert utils.get_role(test_role) != None
     assert utils.delete_role(test_role)
     assert utils.get_role(test_role) == None
Example #6
0
def main():
    f = open('log_test_values_cider.txt', 'w')
    original = sys.stdout
    sys.stdout = utils.Tee(sys.stdout, f)

    token = 0
    domain_id, production_project_id, cms_project_id, atlas_project_id = (
        0, ) * 4
    computing_project_id, visualisation_project_id, services_project_id = (
        0, ) * 3
    operations_project_id = 0
    try:
        token_json = utils.default_token_json('admin', 'demo')
        token = utils.get_token(token_json)
        print '======================================================================='
        print 'This script will use the follow hierarchy to validate the quota values'
        print 'related to Nested Quotas on Cinder'
        print '======================================================================='
        print 'Hierarchy:'
        print '                            Domain_X          '
        print '                               |'
        print '                          ProductionIT - Mike'
        print '                     /                  \ '
        print '          Jay - CMS                       ATLAS - John'
        print '             /       \                   /       \ '
        print '      Computing   Visualisation   Operations   Services  '
        print '       Walter        Duncan          Eric         Xing'
        print ''
        print 'Actors:'
        print ''
        print 'Mike - Cloud Admin (i.e. role:cloud-admin) of ProductionIT'
        print 'Jay - Manager (i.e. role: project-admin) of Project CMS'
        print 'John - Manager (i.e. role: project-admin) of Project ATLAS'
        print 'Eric - Manager (i.e. role: project-admin) of Project Operations'
        print 'Xing - Manager (i.e. role: project-admin) of Project Services'
        print 'Walter - Manager (i.e. role: project-admin) of Project Computing'
        print 'Duncan - Manager (i.e. role: project-admin) of Project Visualisation'
        print '======================================================================='

        # Create a new domain
        print 'Creating the domain...'
        domain = utils.domain_json()
        domain_id = utils.create_domain(domain, token)
        print 'Domain created: %s' % domain_id
        print '======================================================================='
        print 'Creating the projects...'

        # Create project ProductionIT
        production_project_json = utils.project_json('ProductionIT', domain_id)
        production_project_id = utils.create_project(production_project_json,
                                                     token)
        print "ProductionIT created: %s" % production_project_id
        print '======================================================================='

        # Create Project CMS
        cms_project_json = utils.project_json('CMS', domain_id,
                                              production_project_id)
        cms_project_id = utils.create_project(cms_project_json, token)
        print "CMS created: %s" % cms_project_id
        print '======================================================================='

        # Create Project Atlas
        atlas_project_json = utils.project_json('ATLAS', domain_id,
                                                production_project_id)
        atlas_project_id = utils.create_project(atlas_project_json, token)
        print "ATLAS created: %s" % atlas_project_id
        print '======================================================================='

        # Create Project computing
        computing_project_json = utils.project_json('computing', domain_id,
                                                    cms_project_id)
        computing_project_id = utils.create_project(computing_project_json,
                                                    token)
        print "Computing created: %s" % computing_project_id
        print '======================================================================='

        # Create Project visualisation
        visual_project_json = utils.project_json('visualisation', domain_id,
                                                 cms_project_id)
        visualisation_project_id = utils.create_project(
            visual_project_json, token)
        print "Visualisation created: %s" % visualisation_project_id
        print '======================================================================='

        # Create Project services
        services_project_json = utils.project_json('services', domain_id,
                                                   atlas_project_id)
        services_project_id = utils.create_project(services_project_json,
                                                   token)
        print "Services created: %s" % services_project_id
        print '======================================================================='

        # Create Project operations
        operations_project_json = utils.project_json('operations', domain_id,
                                                     atlas_project_id)
        operations_project_id = utils.create_project(operations_project_json,
                                                     token)
        print "Operations created: %s" % operations_project_id
        print '======================================================================='

        admin_role = utils.get_role(token, 'admin')
        # Creating users
        # Creating and grant admin role to mike in production
        print 'Creating the users...'
        mike = utils.create_user(token, 'Mike', domain_id)
        print "Mike: %s" % mike
        utils.grant_user_role(token, mike, admin_role, [production_project_id])
        print '======================================================================='

        # Creating and grant admin role to jay in cms
        jay = utils.create_user(token, 'Jay', domain_id)
        print "Jay: %s" % jay
        utils.grant_user_role(token, jay, admin_role, [cms_project_id])
        print '======================================================================='

        # Creating and grant admin role to john in atlas
        john = utils.create_user(token, 'John', domain_id)
        print "John: %s" % john
        utils.grant_user_role(token, john, admin_role, [atlas_project_id])
        print '======================================================================='

        # Creating and grant admin role to eric in operations
        eric = utils.create_user(token, 'Eric', domain_id)
        print "Eric: %s" % eric
        utils.grant_user_role(token, eric, admin_role, [operations_project_id])
        print '======================================================================='

        # Creating and grant admin role to xing in services
        xing = utils.create_user(token, 'Xing', domain_id)
        print "Xing: %s" % xing
        utils.grant_user_role(token, xing, admin_role, [services_project_id])
        print '======================================================================='

        # Creating and grant admin role to walter in computing
        walter = utils.create_user(token, 'Walter', domain_id)
        print "Walter: %s" % walter
        utils.grant_user_role(token, walter, admin_role,
                              [computing_project_id])
        print '======================================================================='

        # Creating and grant admin role to duncan in visualisation
        duncan = utils.create_user(token, 'Duncan', domain_id)
        print "Ducnan: %s" % duncan
        utils.grant_user_role(token, duncan, admin_role,
                              [visualisation_project_id])
        print '======================================================================='
        print 'Now, we will get a token for Mike in ProductionIT (root project)'
        print 'and show that the quota calculation in the hierarchy works well.'
        print '======================================================================='
        # Get a token for Mike in ProductionIT
        mike_token_json = utils.get_token_json('Mike', production_project_id)
        mike_token = utils.get_token(mike_token_json)
        print 'Token for mike: %s' % mike_token
        print '======================================================================='

        # Update the Prduction Quota to 100
        print 'Updating the ProductionIT quota for 100...'
        quota_value = 100
        production_quota = utils.update_quota(mike_token,
                                              production_project_id,
                                              production_project_id,
                                              quota_value)
        quota_show_production = utils.quota_show(mike_token,
                                                 production_project_id,
                                                 production_project_id)
        print '======================================================================='
        print "Production Quota: %s" % quota_show_production
        print '======================================================================='
        # Update the CMS Quota to 40
        print 'Updating the CMS quota for 40...'
        quota_value = 40
        cms_quota = utils.update_quota(mike_token, production_project_id,
                                       cms_project_id, quota_value)
        quota_show_production = utils.quota_show(mike_token,
                                                 production_project_id,
                                                 production_project_id)
        quota_show_cms = utils.quota_show(mike_token, production_project_id,
                                          cms_project_id)
        print 'Verify that allocated ProductionIT quota was updated to 40'
        print "Production Quota: %s" % quota_show_production
        print "CMS Quota: %s" % quota_show_cms
        print '======================================================================='
        # Update the Atlas Quota to 30
        print 'Updating the Atlas quota for 30...'
        quota_value = 30
        atlas_quota = utils.update_quota(mike_token, production_project_id,
                                         atlas_project_id, quota_value)
        quota_show_production = utils.quota_show(mike_token,
                                                 production_project_id,
                                                 production_project_id)
        quota_show_atlas = utils.quota_show(mike_token, production_project_id,
                                            atlas_project_id)
        print 'Verify that allocated ProductionIT quota was updated to 70'
        print "Production Quota: %s" % quota_show_production
        print "Atlas Quota: %s" % quota_show_atlas
        print '======================================================================='

        # Update the Computing Quota to 15
        print 'Updating the Computing quota for 15...'
        quota_value = 15
        computing_quota = utils.update_quota(mike_token, production_project_id,
                                             computing_project_id, quota_value)
        quota_show_cms = utils.quota_show(mike_token, production_project_id,
                                          cms_project_id)
        quota_show_computing = utils.quota_show(mike_token,
                                                production_project_id,
                                                computing_project_id)
        print 'Verify that allocated CMS quota was updated to 15'
        print "CMS Quota: %s" % quota_show_cms
        print "Computing Quota: %s" % quota_show_computing
        print '======================================================================='

        # Update the visualisaton Quota to 15
        print 'Updating the Visualisation quota for 15...'
        quota_value = 15
        visualisation_quota = utils.update_quota(mike_token,
                                                 production_project_id,
                                                 visualisation_project_id,
                                                 quota_value)
        quota_show_cms = utils.quota_show(mike_token, production_project_id,
                                          cms_project_id)
        quota_show_visualisation = utils.quota_show(mike_token,
                                                    production_project_id,
                                                    visualisation_project_id)
        print 'Verify that allocated CMS quota was updated to 30'
        print "CMS Quota: %s" % quota_show_cms
        print "Visualisation Quota: %s" % quota_show_visualisation
        print '======================================================================='

        print 'Updating the Services quota for 10...'
        # Update the services Quota to 10
        quota_value = 10
        services_quota = utils.update_quota(mike_token, production_project_id,
                                            services_project_id, quota_value)
        quota_show_atlas = utils.quota_show(mike_token, production_project_id,
                                            atlas_project_id)
        quota_show_services = utils.quota_show(mike_token,
                                               production_project_id,
                                               services_project_id)
        print 'Verify that allocated Atlas quota was updated to 10'
        print "Atlas Quota: %s" % quota_show_atlas
        print "Service Quota: %s" % quota_show_services
        print '======================================================================='

        # Update the operations Quota to 10
        quota_value = 10
        operations_quota = utils.update_quota(mike_token,
                                              production_project_id,
                                              operations_project_id,
                                              quota_value)
        quota_show_atlas = utils.quota_show(mike_token, production_project_id,
                                            atlas_project_id)
        quota_show_operations = utils.quota_show(mike_token,
                                                 production_project_id,
                                                 operations_project_id)
        print 'Verify that allocated Atlas quota was updated to 20'
        print "Atlas Quota: %s" % quota_show_atlas
        print "Operations Quota: %s" % quota_show_operations
        print '======================================================================='
        # Update the CMS Quota to 40
        quota_value = 71
        print 'Trying update the CMS quota for 71...'
        cms_quota = utils.update_quota(mike_token, production_project_id,
                                       cms_project_id, quota_value)
        print "Error: %s" % cms_quota
        print '======================================================================='
        print "Creating 10 Volumes in CMS..."
        # Get a token for Jay in CMS
        jay_token_json = utils.get_token_json('Jay', cms_project_id)
        jay_token = utils.get_token(jay_token_json)

        for i in range(0, 10):
            utils.create_volume(jay_token, cms_project_id)
        quota_show_cms = utils.quota_show(jay_token, cms_project_id,
                                          cms_project_id)
        print "CMS Quota: %s" % quota_show_cms
        print 'Now, we dont have free quota in CMS'
        print '======================================================================='
        print "Trying update the computing quota to 16 (subproject for CMS)..."
        quota_value = 16
        computing_quota = utils.update_quota(mike_token, production_project_id,
                                             computing_project_id, quota_value)
        print "Error: %s" % computing_quota
        print '======================================================================='
        print 'Clean up...'

    except Exception as e:
        print 'Error'
        tear_down(token, [
            production_project_id, cms_project_id, atlas_project_id,
            computing_project_id, visualisation_project_id,
            services_project_id, operations_project_id
        ], domain_id)
        f.close()
        print e
    tear_down(token, [
        production_project_id, cms_project_id, atlas_project_id,
        computing_project_id, visualisation_project_id, services_project_id,
        operations_project_id
    ], domain_id)
    f.close()
Example #7
0
def main():
    f = open('log_test_authorization_cider.txt', 'w')
    original = sys.stdout
    sys.stdout = utils.Tee(sys.stdout, f)

    token = 0
    domain_id, production_project_id, cms_project_id, atlas_project_id = (
        0, ) * 4
    computing_project_id, visualisation_project_id, services_project_id = (
        0, ) * 3
    operations_project_id = 0
    try:
        token_json = utils.default_token_json('admin', 'demo')
        token = utils.get_token(token_json)
        print '======================================================================='
        print 'This script will use the follow hierarchy to validate the authorization'
        print 'actions related to Nested Quotas on Cinder'
        print '======================================================================='
        print 'Hierarchy:'
        print '                            Domain_X          '
        print '                               |'
        print '                          ProductionIT - Mike'
        print '                     /                  \ '
        print '          Jay - CMS                       ATLAS - John'
        print '             /       \                   /       \ '
        print '      Computing   Visualisation   Operations   Services  '
        print '       Walter        Duncan          Eric         Xing'
        print ''
        print 'Actors:'
        print ''
        print 'Mike - Cloud Admin (i.e. role:cloud-admin) of ProductionIT'
        print 'Jay - Manager (i.e. role: project-admin) of Project CMS'
        print 'John - Manager (i.e. role: project-admin) of Project ATLAS'
        print 'Eric - Manager (i.e. role: project-admin) of Project Operations'
        print 'Xing - Manager (i.e. role: project-admin) of Project Services'
        print 'Walter - Manager (i.e. role: project-admin) of Project Computing'
        print 'Duncan - Manager (i.e. role: project-admin) of Project Visualisation'
        print '======================================================================='
        admin_role = utils.get_role(token, 'admin')
        # Create a new domain
        print 'Creating the domain...'
        domain = utils.domain_json()
        domain_id = utils.create_domain(domain, token)
        print 'Domain created: %s' % domain_id
        print '======================================================================='
        print 'Creating the projects...'
        # Create project ProductionIT
        production_project_json = utils.project_json('ProductionIT', domain_id)
        production_project_id = utils.create_project(production_project_json,
                                                     token)
        print "ProductionIT created: %s" % production_project_id
        print '======================================================================='

        # Create Project CMS
        cms_project_json = utils.project_json('CMS', domain_id,
                                              production_project_id)
        cms_project_id = utils.create_project(cms_project_json, token)
        print "CMS created: %s" % cms_project_id
        print '======================================================================='

        # Create Project Atlas
        atlas_project_json = utils.project_json('ATLAS', domain_id,
                                                production_project_id)
        atlas_project_id = utils.create_project(atlas_project_json, token)
        print "ATLAS created: %s" % atlas_project_id
        print '======================================================================='

        # Create Project computing
        computing_project_json = utils.project_json('computing', domain_id,
                                                    cms_project_id)
        computing_project_id = utils.create_project(computing_project_json,
                                                    token)
        print "Computing created: %s" % computing_project_id
        print '======================================================================='

        # Create Project visualisation
        visual_project_json = utils.project_json('visualisation', domain_id,
                                                 cms_project_id)
        visualisation_project_id = utils.create_project(
            visual_project_json, token)
        print "Visualisation created: %s" % visualisation_project_id
        print '======================================================================='

        # Create Project services
        services_project_json = utils.project_json('services', domain_id,
                                                   atlas_project_id)
        services_project_id = utils.create_project(services_project_json,
                                                   token)
        print "Services created: %s" % services_project_id
        print '======================================================================='

        # Create Project operations
        operations_project_json = utils.project_json('operations', domain_id,
                                                     atlas_project_id)
        operations_project_id = utils.create_project(operations_project_json,
                                                     token)
        print "Operations created: %s" % operations_project_id
        print '======================================================================='

        # Creating users
        # Creating and grant admin role to mike in production
        print 'Creating the users...'
        mike = utils.create_user(token, 'Mike', domain_id)
        print "Mike: %s" % mike
        utils.grant_user_role(token, mike, admin_role, [production_project_id])

        print '======================================================================='
        # Creating and grant admin role to jay in cms
        jay = utils.create_user(token, 'Jay', domain_id)
        print "Jay: %s" % jay
        utils.grant_user_role(token, jay, admin_role, [cms_project_id])

        print '======================================================================='
        # Creating and grant admin role to john in atlas
        john = utils.create_user(token, 'John', domain_id)
        print "John: %s" % john
        utils.grant_user_role(token, john, admin_role, [atlas_project_id])

        print '======================================================================='
        # Creating and grant admin role to eric in operations
        eric = utils.create_user(token, 'Eric', domain_id)
        print "Eric: %s" % eric
        utils.grant_user_role(token, eric, admin_role, [operations_project_id])

        print '======================================================================='
        # Creating and grant admin role to xing in services
        xing = utils.create_user(token, 'Xing', domain_id)
        print "Xing: %s" % xing
        utils.grant_user_role(token, xing, admin_role, [services_project_id])

        print '======================================================================='
        # Creating and grant admin role to walter in computing
        walter = utils.create_user(token, 'Walter', domain_id)
        print "Walter: %s" % walter
        utils.grant_user_role(token, walter, admin_role,
                              [computing_project_id])
        print '======================================================================='

        # Creating and grant admin role to duncan in visualisation
        duncan = utils.create_user(token, 'Duncan', domain_id)
        print "Ducnan: %s" % duncan
        utils.grant_user_role(token, duncan, admin_role,
                              [visualisation_project_id])
        print '======================================================================='
        print 'Now, we will get a token for Mike in ProductionIT (root project)'
        print 'and show that Mike can update the quota for the root project.'
        print '======================================================================='
        # Get a token for Mike in ProductionIT
        mike_token_json = utils.get_token_json('Mike', production_project_id)
        mike_token = utils.get_token(mike_token_json)
        print 'Token for mike: %s' % mike_token
        print '======================================================================='

        # Update the Production Quota to 100
        print 'Updating the ProductionIT quota for 100...'
        quota_value = 100
        production_quota = utils.update_quota(mike_token,
                                              production_project_id,
                                              production_project_id,
                                              quota_value)
        print "Mike updating Production Quota: %s" % production_quota
        print '======================================================================='

        print 'Trying get the default quota for CMS...'
        # Verify that the default quotas for CMS is zero
        cms_quota = utils.get_quota(mike_token, production_project_id,
                                    cms_project_id)
        print "Mike getting CMS Quota: %s" % cms_quota
        print '======================================================================='

        print 'Trying update the CMS quota for 45...'
        # Update the CMS Quota to 45
        quota_value = 45
        new_cms_quota = utils.update_quota(mike_token, production_project_id,
                                           cms_project_id, quota_value)
        print "Mike updating CMS Quota: %s" % new_cms_quota
        print '======================================================================='

        print 'Now, we get a token for Jay in CMS and we will try update the CMS Quota'
        print '======================================================================='
        # Get a token for Jay in CMS
        jay_token_json = utils.get_token_json('Jay', cms_project_id)
        jay_token = utils.get_token(jay_token_json)
        print 'Token for Jay: %s ' % jay_token
        print '======================================================================='

        # Raise a exception when try update the CMS Quota with
        # only a project_admin
        print 'Trying update the CMS quota for 50'
        quota_value = 50
        forbidden_error = 403
        new_cms_quota = utils.update_quota(jay_token, cms_project_id,
                                           cms_project_id, quota_value)
        if new_cms_quota == forbidden_error:
            print 'Error: Cannot update the quota for CMS with user Jay'

        print '======================================================================='
        # Verify that the default quotas for Visualisation is zero
        cms_quota = utils.get_quota(jay_token, cms_project_id, cms_project_id)
        print "Trying get the CMS Quota: %s" % cms_quota

        print '======================================================================='
        # Raise a exception when try update the Visualisation Quota with a
        # project_admin in a non-root project
        print 'Trying update the Visualisation Quota with Jay'
        quota_value = 10
        new_visualisation_quota = utils.update_quota(jay_token, cms_project_id,
                                                     visualisation_project_id,
                                                     quota_value)
        if new_visualisation_quota == forbidden_error:
            print 'Error: Cannot update the quota for Visualisation with user Jay'
        else:
            print 'New Visualisation Quota: %s ' % new_visualisation_quota
        print '======================================================================='

        # Raise a exception when try get the Visualisation Quota with a
        # project_admin in a non-root project
        print 'Trying get the Visualisation Quota with Jay'
        visualisation_quota = utils.get_quota(jay_token, cms_project_id,
                                              visualisation_project_id)
        if visualisation_quota == forbidden_error:
            print 'Error: Cannot get the quota for Visualisation with user Jay'
        else:
            print 'Get Visualisation Quota: %s ' % new_visualisation_quota
        print '======================================================================='
        # Raise a exception when try get the Atlas Quota with a project_admin
        # in a non-root project
        atlas_quota = utils.get_quota(jay_token, cms_project_id,
                                      atlas_project_id)
        if atlas_quota == forbidden_error:
            print 'Error: Cannot get the quota for Atlas with user Jay'
        print '======================================================================='

        # Get a token for Duncan in Visualisation
        duncan_token_json = utils.get_token_json('Duncan',
                                                 visualisation_project_id)
        duncan_token = utils.get_token(duncan_token_json)

        print 'Get a token for Duncan in Visualisation: %s ' % duncan_token
        # Raise a exception when try get the Atlas Quota with a project_admin
        # in a subproject
        cms_quota = utils.get_quota(duncan_token, visualisation_project_id,
                                    cms_project_id)
        if cms_quota == forbidden_error:
            print 'Error: Cannot get the quota for CMS with user Duncan'
        print '======================================================================='

        # Raise a exception when try update the Visualisation Quota
        # with a project_admin in a non-root project
        quota_value = 10
        new_visualisation_quota = utils.update_quota(duncan_token,
                                                     visualisation_project_id,
                                                     visualisation_project_id,
                                                     quota_value)
        if new_visualisation_quota == forbidden_error:
            print('Cannot update the quota for Visualisation with user Duncan')
        print '======================================================================='

        # Verify that the default quotas for Visualisation is zero
        visual_quota = utils.get_quota(duncan_token, visualisation_project_id,
                                       visualisation_project_id)
        print('Duncan getting the Visualisation Quota: %s' % visual_quota)
        print '======================================================================='
        print 'Clean up...'

    except Exception as e:
        print 'Error'
        tear_down(token, [
            production_project_id, cms_project_id, atlas_project_id,
            computing_project_id, visualisation_project_id,
            services_project_id, operations_project_id
        ], domain_id)
        f.close()
        print e
    tear_down(token, [
        production_project_id, cms_project_id, atlas_project_id,
        computing_project_id, visualisation_project_id, services_project_id,
        operations_project_id
    ], domain_id)
    f.close()
def main():
    f = open("log_test_authorization_cider.txt", "w")
    original = sys.stdout
    sys.stdout = utils.Tee(sys.stdout, f)

    token = 0
    domain_id, production_project_id, cms_project_id, atlas_project_id = (0,) * 4
    computing_project_id, visualisation_project_id, services_project_id = (0,) * 3
    operations_project_id = 0
    try:
        token_json = utils.default_token_json("admin", "demo")
        token = utils.get_token(token_json)
        print "======================================================================="
        print "This script will use the follow hierarchy to validate the authorization"
        print "actions related to Nested Quotas on Cinder"
        print "======================================================================="
        print "Hierarchy:"
        print "                            Domain_X          "
        print "                               |"
        print "                          ProductionIT - Mike"
        print "                     /                  \ "
        print "          Jay - CMS                       ATLAS - John"
        print "             /       \                   /       \ "
        print "      Computing   Visualisation   Operations   Services  "
        print "       Walter        Duncan          Eric         Xing"
        print ""
        print "Actors:"
        print ""
        print "Mike - Cloud Admin (i.e. role:cloud-admin) of ProductionIT"
        print "Jay - Manager (i.e. role: project-admin) of Project CMS"
        print "John - Manager (i.e. role: project-admin) of Project ATLAS"
        print "Eric - Manager (i.e. role: project-admin) of Project Operations"
        print "Xing - Manager (i.e. role: project-admin) of Project Services"
        print "Walter - Manager (i.e. role: project-admin) of Project Computing"
        print "Duncan - Manager (i.e. role: project-admin) of Project Visualisation"
        print "======================================================================="
        admin_role = utils.get_role(token, "admin")
        # Create a new domain
        print "Creating the domain..."
        domain = utils.domain_json()
        domain_id = utils.create_domain(domain, token)
        print "Domain created: %s" % domain_id
        print "======================================================================="
        print "Creating the projects..."
        # Create project ProductionIT
        production_project_json = utils.project_json("ProductionIT", domain_id)
        production_project_id = utils.create_project(production_project_json, token)
        print "ProductionIT created: %s" % production_project_id
        print "======================================================================="

        # Create Project CMS
        cms_project_json = utils.project_json("CMS", domain_id, production_project_id)
        cms_project_id = utils.create_project(cms_project_json, token)
        print "CMS created: %s" % cms_project_id
        print "======================================================================="

        # Create Project Atlas
        atlas_project_json = utils.project_json("ATLAS", domain_id, production_project_id)
        atlas_project_id = utils.create_project(atlas_project_json, token)
        print "ATLAS created: %s" % atlas_project_id
        print "======================================================================="

        # Create Project computing
        computing_project_json = utils.project_json("computing", domain_id, cms_project_id)
        computing_project_id = utils.create_project(computing_project_json, token)
        print "Computing created: %s" % computing_project_id
        print "======================================================================="

        # Create Project visualisation
        visual_project_json = utils.project_json("visualisation", domain_id, cms_project_id)
        visualisation_project_id = utils.create_project(visual_project_json, token)
        print "Visualisation created: %s" % visualisation_project_id
        print "======================================================================="

        # Create Project services
        services_project_json = utils.project_json("services", domain_id, atlas_project_id)
        services_project_id = utils.create_project(services_project_json, token)
        print "Services created: %s" % services_project_id
        print "======================================================================="

        # Create Project operations
        operations_project_json = utils.project_json("operations", domain_id, atlas_project_id)
        operations_project_id = utils.create_project(operations_project_json, token)
        print "Operations created: %s" % operations_project_id
        print "======================================================================="

        # Creating users
        # Creating and grant admin role to mike in production
        print "Creating the users..."
        mike = utils.create_user(token, "Mike", domain_id)
        print "Mike: %s" % mike
        utils.grant_user_role(token, mike, admin_role, [production_project_id])

        print "======================================================================="
        # Creating and grant admin role to jay in cms
        jay = utils.create_user(token, "Jay", domain_id)
        print "Jay: %s" % jay
        utils.grant_user_role(token, jay, admin_role, [cms_project_id])

        print "======================================================================="
        # Creating and grant admin role to john in atlas
        john = utils.create_user(token, "John", domain_id)
        print "John: %s" % john
        utils.grant_user_role(token, john, admin_role, [atlas_project_id])

        print "======================================================================="
        # Creating and grant admin role to eric in operations
        eric = utils.create_user(token, "Eric", domain_id)
        print "Eric: %s" % eric
        utils.grant_user_role(token, eric, admin_role, [operations_project_id])

        print "======================================================================="
        # Creating and grant admin role to xing in services
        xing = utils.create_user(token, "Xing", domain_id)
        print "Xing: %s" % xing
        utils.grant_user_role(token, xing, admin_role, [services_project_id])

        print "======================================================================="
        # Creating and grant admin role to walter in computing
        walter = utils.create_user(token, "Walter", domain_id)
        print "Walter: %s" % walter
        utils.grant_user_role(token, walter, admin_role, [computing_project_id])
        print "======================================================================="

        # Creating and grant admin role to duncan in visualisation
        duncan = utils.create_user(token, "Duncan", domain_id)
        print "Ducnan: %s" % duncan
        utils.grant_user_role(token, duncan, admin_role, [visualisation_project_id])
        print "======================================================================="
        print "Now, we will get a token for Mike in ProductionIT (root project)"
        print "and show that Mike can update the quota for the root project."
        print "======================================================================="
        # Get a token for Mike in ProductionIT
        mike_token_json = utils.get_token_json("Mike", production_project_id)
        mike_token = utils.get_token(mike_token_json)
        print "Token for mike: %s" % mike_token
        print "======================================================================="

        # Update the Production Quota to 100
        print "Updating the ProductionIT quota for 100..."
        quota_value = 100
        production_quota = utils.update_quota(mike_token, production_project_id, production_project_id, quota_value)
        print "Mike updating Production Quota: %s" % production_quota
        print "======================================================================="

        print "Trying get the default quota for CMS..."
        # Verify that the default quotas for CMS is zero
        cms_quota = utils.get_quota(mike_token, production_project_id, cms_project_id)
        print "Mike getting CMS Quota: %s" % cms_quota
        print "======================================================================="

        print "Trying update the CMS quota for 45..."
        # Update the CMS Quota to 45
        quota_value = 45
        new_cms_quota = utils.update_quota(mike_token, production_project_id, cms_project_id, quota_value)
        print "Mike updating CMS Quota: %s" % new_cms_quota
        print "======================================================================="

        print "Now, we get a token for Jay in CMS and we will try update the CMS Quota"
        print "======================================================================="
        # Get a token for Jay in CMS
        jay_token_json = utils.get_token_json("Jay", cms_project_id)
        jay_token = utils.get_token(jay_token_json)
        print "Token for Jay: %s " % jay_token
        print "======================================================================="

        # Raise a exception when try update the CMS Quota with
        # only a project_admin
        print "Trying update the CMS quota for 50"
        quota_value = 50
        forbidden_error = 403
        new_cms_quota = utils.update_quota(jay_token, cms_project_id, cms_project_id, quota_value)
        if new_cms_quota == forbidden_error:
            print "Error: Cannot update the quota for CMS with user Jay"

        print "======================================================================="
        # Verify that the default quotas for Visualisation is zero
        cms_quota = utils.get_quota(jay_token, cms_project_id, cms_project_id)
        print "Trying get the CMS Quota: %s" % cms_quota

        print "======================================================================="
        # Raise a exception when try update the Visualisation Quota with a
        # project_admin in a non-root project
        print "Trying update the Visualisation Quota with Jay"
        quota_value = 10
        new_visualisation_quota = utils.update_quota(jay_token, cms_project_id, visualisation_project_id, quota_value)
        if new_visualisation_quota == forbidden_error:
            print "Error: Cannot update the quota for Visualisation with user Jay"
        else:
            print "New Visualisation Quota: %s " % new_visualisation_quota
        print "======================================================================="

        # Raise a exception when try get the Visualisation Quota with a
        # project_admin in a non-root project
        print "Trying get the Visualisation Quota with Jay"
        visualisation_quota = utils.get_quota(jay_token, cms_project_id, visualisation_project_id)
        if visualisation_quota == forbidden_error:
            print "Error: Cannot get the quota for Visualisation with user Jay"
        else:
            print "Get Visualisation Quota: %s " % new_visualisation_quota
        print "======================================================================="
        # Raise a exception when try get the Atlas Quota with a project_admin
        # in a non-root project
        atlas_quota = utils.get_quota(jay_token, cms_project_id, atlas_project_id)
        if atlas_quota == forbidden_error:
            print "Error: Cannot get the quota for Atlas with user Jay"
        print "======================================================================="

        # Get a token for Duncan in Visualisation
        duncan_token_json = utils.get_token_json("Duncan", visualisation_project_id)
        duncan_token = utils.get_token(duncan_token_json)

        print "Get a token for Duncan in Visualisation: %s " % duncan_token
        # Raise a exception when try get the Atlas Quota with a project_admin
        # in a subproject
        cms_quota = utils.get_quota(duncan_token, visualisation_project_id, cms_project_id)
        if cms_quota == forbidden_error:
            print "Error: Cannot get the quota for CMS with user Duncan"
        print "======================================================================="

        # Raise a exception when try update the Visualisation Quota
        # with a project_admin in a non-root project
        quota_value = 10
        new_visualisation_quota = utils.update_quota(
            duncan_token, visualisation_project_id, visualisation_project_id, quota_value
        )
        if new_visualisation_quota == forbidden_error:
            print ("Cannot update the quota for Visualisation with user Duncan")
        print "======================================================================="

        # Verify that the default quotas for Visualisation is zero
        visual_quota = utils.get_quota(duncan_token, visualisation_project_id, visualisation_project_id)
        print ("Duncan getting the Visualisation Quota: %s" % visual_quota)
        print "======================================================================="
        print "Clean up..."

    except Exception as e:
        print "Error"
        tear_down(
            token,
            [
                production_project_id,
                cms_project_id,
                atlas_project_id,
                computing_project_id,
                visualisation_project_id,
                services_project_id,
                operations_project_id,
            ],
            domain_id,
        )
        f.close()
        print e
    tear_down(
        token,
        [
            production_project_id,
            cms_project_id,
            atlas_project_id,
            computing_project_id,
            visualisation_project_id,
            services_project_id,
            operations_project_id,
        ],
        domain_id,
    )
    f.close()
def main():
    f = open('log_test_values_cider.txt', 'w')
    original = sys.stdout
    sys.stdout = utils.Tee(sys.stdout, f)

    token = 0
    domain_id, production_project_id, cms_project_id, atlas_project_id = (0, )*4
    computing_project_id, visualisation_project_id, services_project_id = (0, )*3
    operations_project_id = 0
    try:
	token_json = utils.default_token_json('admin', 'demo')
        token = utils.get_token(token_json)
	print '======================================================================='
        print 'This script will use the follow hierarchy to validate the quota values' 
	print 'related to Nested Quotas on Cinder'
	print '======================================================================='
	print 'Hierarchy:'
	print '                            Domain_X          '
	print '                               |'
	print '                          ProductionIT - Mike' 
	print '                     /                  \ '
	print '          Jay - CMS                       ATLAS - John'
	print '             /       \                   /       \ '
	print '      Computing   Visualisation   Operations   Services  '
	print '       Walter        Duncan          Eric         Xing'
	print ''
	print 'Actors:'
	print ''
	print 'Mike - Cloud Admin (i.e. role:cloud-admin) of ProductionIT'
	print 'Jay - Manager (i.e. role: project-admin) of Project CMS'
	print 'John - Manager (i.e. role: project-admin) of Project ATLAS'
	print 'Eric - Manager (i.e. role: project-admin) of Project Operations'
	print 'Xing - Manager (i.e. role: project-admin) of Project Services'
	print 'Walter - Manager (i.e. role: project-admin) of Project Computing'
	print 'Duncan - Manager (i.e. role: project-admin) of Project Visualisation'
	print '======================================================================='
     
        # Create a new domain
 	print 'Creating the domain...'    
        domain = utils.domain_json()
        domain_id = utils.create_domain(domain, token)
        print 'Domain created: %s' % domain_id
	print '======================================================================='
 	print 'Creating the projects...'    
     
        # Create project ProductionIT
        production_project_json = utils.project_json('ProductionIT', domain_id)
        production_project_id = utils.create_project(production_project_json,
						     token)
        print "ProductionIT created: %s" % production_project_id
	print '======================================================================='
        
        # Create Project CMS 
        cms_project_json = utils.project_json('CMS', domain_id,
					      production_project_id)
        cms_project_id = utils.create_project(cms_project_json, token)
        print "CMS created: %s" % cms_project_id
	print '======================================================================='
        
        # Create Project Atlas
        atlas_project_json = utils.project_json('ATLAS',
					        domain_id,
						production_project_id)
        atlas_project_id = utils.create_project(atlas_project_json, token)
        print "ATLAS created: %s" % atlas_project_id
	print '======================================================================='
        
        # Create Project computing
        computing_project_json = utils.project_json('computing',
						    domain_id,
					            cms_project_id)
        computing_project_id = utils.create_project(computing_project_json,
						    token)
        print "Computing created: %s" % computing_project_id
	print '======================================================================='
     
        # Create Project visualisation
        visual_project_json = utils.project_json('visualisation',
	            			         domain_id,
					         cms_project_id)
        visualisation_project_id = utils.create_project(visual_project_json,
						        token)
        print "Visualisation created: %s" % visualisation_project_id
	print '======================================================================='
     
        # Create Project services
        services_project_json = utils.project_json('services',
						   domain_id,
						   atlas_project_id)
        services_project_id = utils.create_project(services_project_json,
						   token)
        print "Services created: %s" % services_project_id
	print '======================================================================='
     
        # Create Project operations
        operations_project_json = utils.project_json('operations',
						     domain_id,
					             atlas_project_id)
        operations_project_id = utils.create_project(operations_project_json,
						     token)
        print "Operations created: %s" % operations_project_id
	print '======================================================================='
     
	admin_role = utils.get_role(token, 'admin')
        # Creating users
	# Creating and grant admin role to mike in production
 	print 'Creating the users...'    
        mike = utils.create_user(token, 'Mike', domain_id)
	print "Mike: %s" % mike
        utils.grant_user_role(token, mike,
			      admin_role, [production_project_id])
	print '======================================================================='

	# Creating and grant admin role to jay in cms
	jay = utils.create_user(token, 'Jay', domain_id)
	print "Jay: %s" % jay 
        utils.grant_user_role(token, jay,
			      admin_role, [cms_project_id])
	print '======================================================================='

	# Creating and grant admin role to john in atlas
	john = utils.create_user(token, 'John', domain_id)
	print "John: %s" % john 
        utils.grant_user_role(token, john,
			      admin_role, [atlas_project_id])
	print '======================================================================='

	# Creating and grant admin role to eric in operations
	eric = utils.create_user(token, 'Eric', domain_id)
	print "Eric: %s" % eric 
        utils.grant_user_role(token, eric,
			      admin_role, [operations_project_id])
	print '======================================================================='

	# Creating and grant admin role to xing in services
	xing = utils.create_user(token, 'Xing', domain_id)
	print "Xing: %s" % xing 
        utils.grant_user_role(token, xing,
			      admin_role, [services_project_id])
	print '======================================================================='

	# Creating and grant admin role to walter in computing
	walter = utils.create_user(token, 'Walter', domain_id)
	print "Walter: %s" % walter 
        utils.grant_user_role(token, walter,
			      admin_role, [computing_project_id])
	print '======================================================================='

	# Creating and grant admin role to duncan in visualisation
	duncan = utils.create_user(token, 'Duncan', domain_id)
	print "Ducnan: %s" % duncan 
        utils.grant_user_role(token, duncan,
			      admin_role, [visualisation_project_id])
	print '======================================================================='
	print 'Now, we will get a token for Mike in ProductionIT (root project)'
	print 'and show that the quota calculation in the hierarchy works well.'
	print '======================================================================='
	# Get a token for Mike in ProductionIT
	mike_token_json = utils.get_token_json('Mike',
					       production_project_id)
        mike_token = utils.get_token(mike_token_json)
	print 'Token for mike: %s' % mike_token
	print '======================================================================='

	# Update the Prduction Quota to 100
	print 'Updating the ProductionIT quota for 100...'
	quota_value = 100 
	production_quota = utils.update_quota(mike_token, 
					      production_project_id,
					      production_project_id,
					      quota_value)
	quota_show_production = utils.quota_show(mike_token,
						 production_project_id,
						 production_project_id)
	print '======================================================================='
	print "Production Quota: %s" % quota_show_production
	print '======================================================================='
	# Update the CMS Quota to 40
	print 'Updating the CMS quota for 40...'
	quota_value = 40 
	cms_quota = utils.update_quota(mike_token, 
				       production_project_id,
				       cms_project_id,
				       quota_value)
	quota_show_production = utils.quota_show(mike_token,
						 production_project_id, 
						 production_project_id)
	quota_show_cms = utils.quota_show(mike_token, production_project_id, cms_project_id)
	print 'Verify that allocated ProductionIT quota was updated to 40'
	print "Production Quota: %s" % quota_show_production
	print "CMS Quota: %s" % quota_show_cms
	print '======================================================================='
	# Update the Atlas Quota to 30 
	print 'Updating the Atlas quota for 30...'
	quota_value = 30 
	atlas_quota = utils.update_quota(mike_token, 
				         production_project_id,
				         atlas_project_id,
				         quota_value)
	quota_show_production = utils.quota_show(mike_token,
						 production_project_id,
						 production_project_id)
	quota_show_atlas = utils.quota_show(mike_token,
					    production_project_id,
					    atlas_project_id)
	print 'Verify that allocated ProductionIT quota was updated to 70'
	print "Production Quota: %s" % quota_show_production
	print "Atlas Quota: %s" % quota_show_atlas
	print '======================================================================='

	# Update the Computing Quota to 15 
	print 'Updating the Computing quota for 15...'
	quota_value = 15 
	computing_quota = utils.update_quota(mike_token, 
				             production_project_id,
				             computing_project_id,
				             quota_value)
	quota_show_cms = utils.quota_show(mike_token,
					  production_project_id,
					  cms_project_id)
	quota_show_computing = utils.quota_show(mike_token,
					        production_project_id,
					        computing_project_id)
	print 'Verify that allocated CMS quota was updated to 15'
	print "CMS Quota: %s" % quota_show_cms
	print "Computing Quota: %s" % quota_show_computing
	print '======================================================================='

	# Update the visualisaton Quota to 15 
	print 'Updating the Visualisation quota for 15...'
	quota_value = 15 
	visualisation_quota = utils.update_quota(mike_token, 
				            	 production_project_id,
				             	 visualisation_project_id,
				             	 quota_value)
	quota_show_cms = utils.quota_show(mike_token,
					  production_project_id,
					  cms_project_id)
	quota_show_visualisation = utils.quota_show(mike_token,
						    production_project_id,
						    visualisation_project_id)
	print 'Verify that allocated CMS quota was updated to 30'
	print "CMS Quota: %s" % quota_show_cms
	print "Visualisation Quota: %s" % quota_show_visualisation
	print '======================================================================='

	print 'Updating the Services quota for 10...'
	# Update the services Quota to 10 
	quota_value = 10 
	services_quota = utils.update_quota(mike_token, 
				           production_project_id,
				           services_project_id,
				           quota_value)
	quota_show_atlas = utils.quota_show(mike_token,
					    production_project_id,
					    atlas_project_id)
	quota_show_services = utils.quota_show(mike_token,
					       production_project_id,
					       services_project_id)
	print 'Verify that allocated Atlas quota was updated to 10'
	print "Atlas Quota: %s" % quota_show_atlas
	print "Service Quota: %s" % quota_show_services
	print '======================================================================='

	# Update the operations Quota to 10 
	quota_value = 10 
	operations_quota = utils.update_quota(mike_token, 
				           production_project_id,
				           operations_project_id,
				           quota_value)
	quota_show_atlas = utils.quota_show(mike_token,
					    production_project_id,
					    atlas_project_id)
	quota_show_operations = utils.quota_show(mike_token,
						 production_project_id,
						 operations_project_id)
	print 'Verify that allocated Atlas quota was updated to 20'
	print "Atlas Quota: %s" % quota_show_atlas
	print "Operations Quota: %s" % quota_show_operations
	print '======================================================================='
	# Update the CMS Quota to 40
	quota_value = 71 
	print 'Trying update the CMS quota for 71...'
	cms_quota = utils.update_quota(mike_token, 
				       production_project_id,
				       cms_project_id,
				       quota_value)
	print "Error: %s" % cms_quota
	print '======================================================================='
	print "Creating 10 Volumes in CMS..."
	# Get a token for Jay in CMS
	jay_token_json = utils.get_token_json('Jay', cms_project_id)
        jay_token = utils.get_token(jay_token_json)

	for i in range(0,10):
	    utils.create_volume(jay_token, cms_project_id)
	quota_show_cms = utils.quota_show(jay_token, cms_project_id, cms_project_id)
	print "CMS Quota: %s" % quota_show_cms
	print 'Now, we dont have free quota in CMS'
	print '======================================================================='
	print "Trying update the computing quota to 16 (subproject for CMS)..."
	quota_value = 16 
	computing_quota = utils.update_quota(mike_token, 
				       production_project_id,
				       computing_project_id,
				       quota_value)
	print "Error: %s" % computing_quota
	print '======================================================================='
	print 'Clean up...'

    except Exception as e:
	print 'Error'
        tear_down(token, [production_project_id,
	          cms_project_id, 
                  atlas_project_id,
                  computing_project_id,
                  visualisation_project_id,
                  services_project_id,
                  operations_project_id], domain_id)
    	f.close()
        print e 
    tear_down(token, [production_project_id,    
              cms_project_id, 
              atlas_project_id,
	      computing_project_id,
	      visualisation_project_id,
	      services_project_id,
	      operations_project_id], domain_id)
    f.close()