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}
+