예제 #1
0
class AddUserBuilder(Builder):
    def __init__(self, config: Config):
        self.client = TenantClient(api_host=config.credentials.api_host,
                                   auth_token=config.credentials.auth_token,
                                   target_org=config.org.id)
        self.email = None

    def from_user(self) -> 'AddUserBuilder':
        try:
            self.email = self._from_user()
        except KeyboardInterrupt:
            pass

        return self

    def _from_user(self) -> str:
        return self.get_input("Email", required=True)

    def build(self) -> Optional[str]:
        if self.email:
            email = self.client.add_user(self.email)
            print("User added to org")
            return email

        return None
예제 #2
0
class OrgBuilder(Builder):
    def __init__(self, credentials: ApiCredentials):
        self.client = TenantClient(api_host=credentials.api_host,
                                   auth_token=credentials.auth_token)
        self.org_name = None

    def from_user(self) -> 'OrgBuilder':
        try:
            self.org_name = self._from_user()
        except KeyboardInterrupt:
            print()

        return self

    def _from_user(self) -> str:
        org_name = self.get_input("Org Name")

        return org_name

    def build(self) -> Optional[CreateOrganizationResponse]:
        if self.org_name:
            org = self.client.org_create(self.org_name)
            print(f"Created org {org.org_name} (id: {org.org_id})")
            return org

        return None
예제 #3
0
    class _RolesCmd(CommandWithList):
        '''Roles - manage and interact with roles'''

        def __init__(self, config: Config, user: User):
            super().__init__()
            self.config = config
            self.user = user
            self.client = TenantClient(
                config.credentials.api_host, config.credentials.auth_token, target_org=config.org.id)

        def get_things(self):
            return sorted(self.client.roles(), key=lambda x: x.name)

        def things_header(self):
            return [("Name", 20), ("Description", 40), ("Active", 6)]

        def format_thing(self, role: Role) -> str:
            enabled = "●" if role.name in self.user.roles else ''
            return f"{role.name.rjust(20)} {role.description.rjust(40)} {colorama.Fore.RED}{enabled.center(6)}{colorama.Style.RESET_ALL}"

        @builder.empty_cmd()
        def _do_list(self):
            '''list org roles'''
            return self._list()

        @builder.cmd(permissions=['admin:roles:read', 'tenant:roles:read', 'roles:read'])
        def do_info(self, idx):
            '''show role details'''
            selected: Role = self.get_thing_by_index(self.arg_as_idx(idx))

            pprint(selected.as_dict())

        @builder.cmd(permissions=['org:user:write'])
        def do_add(self, idx):
            '''add role to user'''
            selected: Role = self.get_thing_by_index(self.arg_as_idx(idx))
            self.client.user_add_role(self.user.email, selected.name)
            print(f"Added {selected.name}")
            self.user = self.client.get_user(self.user.email)

        @builder.cmd(permissions=['org:user:write'])
        def do_del(self, idx):
            '''remove role from user'''
            selected: Role = self.get_thing_by_index(self.arg_as_idx(idx))
            self.client.user_delete_role(self.user.email, selected.name)
            print(f"Removed {selected.name}")
            self.user = self.client.get_user(self.user.email)
예제 #4
0
 def __init__(self, config: Config):
     super().__init__()
     self.config = config
     self.client = TenantClient(config.credentials.api_host,
                                config.credentials.auth_token,
                                target_org=config.org.id)
예제 #5
0
    class _UsersCmd(CommandWithList):
        '''Users - manage and interact with users'''
        def __init__(self, config: Config):
            super().__init__()
            self.config = config
            self.client = TenantClient(config.credentials.api_host,
                                       config.credentials.auth_token,
                                       target_org=config.org.id)

        def default(self, line: str) -> Union[bool, CmdResponse]:
            try:
                idx = int(line)
                return self._do_select(idx)
            except IndexError as e:
                print(str(e))
                return False
            except ValueError:
                pass

            return super().default(line)

        @builder.empty_cmd()
        def _do_select(self, idx: int) -> CmdResponse:
            '''change scope into user [idx]'''

            selected = self.get_thing_by_index(idx)

            return NewScopeResponse(UserScope(self.config, selected))

        def get_things(self):
            return sorted(self.client.list_users(), key=lambda x: x.name)

        def things_header(self):
            return [("Name", 20), ("Email", 30)]

        def format_thing(self, user: User) -> str:
            return f"{user.nickname.rjust(20)} {user.email.rjust(30)}"

        @builder.empty_cmd()
        def _do_list(self):
            '''list org users'''
            return self._list()

        @builder.cmd(permissions=['org:user:read'])
        def do_info(self, idx):
            '''show user details'''
            selected: User = self.get_thing_by_index(self.arg_as_idx(idx))

            pprint(selected.as_dict())

        @builder.cmd(permissions=['org:user:write'])
        def do_add(self, _arg):
            '''add user to org'''
            AddUserBuilder(self.config).from_user().build()

        @builder.cmd(permissions=['org:user:delete'])
        def do_del(self, idx):
            '''remove user from org'''
            selected: User = self.get_thing_by_index(self.arg_as_idx(idx))
            if Builder.get_yes_no(
                    f"Really remove user from {self.config.org.org_name}?",
                    default_yes=False):
                self.client.delete_user(selected.email)
예제 #6
0
 def __init__(self, credentials: ApiCredentials):
     super().__init__()
     self.credentials = credentials
     self.client = TenantClient(credentials.api_host,
                                credentials.auth_token)
예제 #7
0
    class _OrgsCmd(CommandWithList):
        '''Orgs - manage and interact with organizations and their configurations'''
        def __init__(self, credentials: ApiCredentials):
            super().__init__()
            self.credentials = credentials
            self.client = TenantClient(credentials.api_host,
                                       credentials.auth_token)

        def default(self, line: str) -> Union[bool, CmdResponse]:
            try:
                idx = int(line)
                return self._do_select(idx)
            except IndexError as e:
                print(str(e))
                return False
            except ValueError:
                pass

            return super().default(line)

        def things_header(self):
            return [("Org", 32), ("Id", 40)]

        def get_things(self):
            return sorted(self.client.org_list(), key=lambda x: x.org_name)

        def format_thing(self, org: Organization) -> str:
            return f"{org.org_name.rjust(32)} {org.id.rjust(40)}"

        @builder.empty_cmd()
        def _do_list(self):
            '''list available orgs'''
            return self._list()

        @builder.empty_cmd()
        def _do_select(self, idx: int) -> Union[bool, CmdResponse]:
            '''change scope into org [idx]'''

            selected = self.get_thing_by_index(idx)

            return NewScopeResponse(
                OrgScope(Config(credentials=self.credentials, org=selected)))

        @builder.cmd(permissions=['admin:orgs:write', 'tenant:orgs:write'])
        def do_add(self, _arg):
            '''add new org'''
            org = OrgBuilder(credentials=self.credentials).from_user().build()

        @builder.cmd(permissions=['admin:orgs:delete', 'tenant:orgs:delete'])
        def do_del(self, idx):
            '''delete org [idx]'''
            selected: Organization = self.get_thing_by_index(
                self.arg_as_idx(idx))
            assert selected.id

            if Builder.get_yes_no(f"Really delete {selected.org_name}?",
                                  default_yes=False):
                self.client.org_delete(selected.id)
                print(f"Deleted {selected.org_name}")

        @builder.cmd(permissions=['admin:orgs:account', 'orgs:account'])
        def do_token(self, idx):
            '''get service account token for [idx]'''
            selected: Organization = self.get_thing_by_index(
                self.arg_as_idx(idx))
            assert selected.id

            print(self.client.svc_token(selected.id))

        @builder.cmd(permissions=['admin:orgs:read', 'orgs:my:read'])
        def do_info(self, idx: int):
            '''retrieve organization details'''
            selected = self.get_thing_by_index(self.arg_as_idx(idx))
            pprint(selected.as_dict())
예제 #8
0
 def __init__(self, config: Config):
     self.client = TenantClient(api_host=config.credentials.api_host,
                                auth_token=config.credentials.auth_token,
                                target_org=config.org.id)
     self.email = None
예제 #9
0
 def __init__(self, credentials: ApiCredentials):
     self.client = TenantClient(api_host=credentials.api_host,
                                auth_token=credentials.auth_token)
     self.org_name = None