diff --git a/runbot/models/repo.py b/runbot/models/repo.py index f55ead02..973d74f0 100644 --- a/runbot/models/repo.py +++ b/runbot/models/repo.py @@ -211,6 +211,58 @@ class Remote(models.Model): else: raise + def check_token(self): + if not self.user_has_groups('runbot.group_runbot_admin'): + raise UserError('This action is restricted to admin users') + token_results = {} + for repo in self: + session = _make_github_session(repo.token) + if repo.token not in token_results: + token_results[repo.token] = session.get("https://api.github.com/user") + response = token_results[repo.token] + try: + limit_total = response.headers['X-RateLimit-Limit'] + limit_used = response.headers['X-RateLimit-Used'] + limit_remaining = response.headers['X-RateLimit-Remaining'] + limit_reset = datetime.datetime.fromtimestamp(int(response.headers['X-RateLimit-Reset'])) + json = response.json() + login = json['login'] + user_id = json['id'] + html_url = json['html_url'] + avatar_url = json['avatar_url'] + repo_access_response = session.get(f'https://api.github.com/repos/{repo.owner}/{self.repo_name}/collaborators/{login}/permission') + if repo_access_response.status_code == 200: + repo_access = repo_access_response.json() + permission = repo_access['permission'] + permissions = repo_access['user']['permissions'] + response + access_info = f''' +Permissions: {permission}
+