diff options
author | Gauvain Pocentek <gauvain.pocentek@objectif-libre.com> | 2017-12-17 10:33:15 +0100 |
---|---|---|
committer | Gauvain Pocentek <gauvain.pocentek@objectif-libre.com> | 2017-12-17 10:33:15 +0100 |
commit | 8ad4a76a90817a38becc80d212264c91b961565b (patch) | |
tree | e99a346d221f1d229a6dab58027a3bc94c67d4d9 /tools/generate_token.py | |
parent | 5a5cd74f34faa5a9f06a6608b139ed08af05dc9f (diff) | |
download | gitlab-8ad4a76a90817a38becc80d212264c91b961565b.tar.gz |
Update testing tools for /session removal
Diffstat (limited to 'tools/generate_token.py')
-rwxr-xr-x | tools/generate_token.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/tools/generate_token.py b/tools/generate_token.py new file mode 100755 index 0000000..ab14188 --- /dev/null +++ b/tools/generate_token.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python + +import sys +try: + from urllib.parse import urljoin +except ImportError: + from urlparse import urljoin + +from bs4 import BeautifulSoup +import requests + +endpoint = "http://localhost:8080" +root_route = urljoin(endpoint, "/") +sign_in_route = urljoin(endpoint, "/users/sign_in") +pat_route = urljoin(endpoint, "/profile/personal_access_tokens") + +login = "root" +password = "5iveL!fe" + + +def find_csrf_token(text): + soup = BeautifulSoup(text, "lxml") + token = soup.find(attrs={"name": "csrf-token"}) + param = soup.find(attrs={"name": "csrf-param"}) + data = {param.get("content"): token.get("content")} + return data + + +def obtain_csrf_token(): + r = requests.get(root_route) + token = find_csrf_token(r.text) + return token, r.cookies + + +def sign_in(csrf, cookies): + data = { + "user[login]": login, + "user[password]": password, + } + data.update(csrf) + r = requests.post(sign_in_route, data=data, cookies=cookies) + token = find_csrf_token(r.text) + return token, r.history[0].cookies + + +def obtain_personal_access_token(name, csrf, cookies): + data = { + "personal_access_token[name]": name, + "personal_access_token[scopes][]": ["api", "sudo"], + } + data.update(csrf) + r = requests.post(pat_route, data=data, cookies=cookies) + soup = BeautifulSoup(r.text, "lxml") + token = soup.find('input', id='created-personal-access-token').get('value') + return token + + +def main(): + csrf1, cookies1 = obtain_csrf_token() + csrf2, cookies2 = sign_in(csrf1, cookies1) + + token = obtain_personal_access_token('default', csrf2, cookies2) + print(token) + + +if __name__ == "__main__": + main() |