summaryrefslogtreecommitdiff
path: root/tools/generate_token.py
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain.pocentek@objectif-libre.com>2017-12-17 10:33:15 +0100
committerGauvain Pocentek <gauvain.pocentek@objectif-libre.com>2017-12-17 10:33:15 +0100
commit8ad4a76a90817a38becc80d212264c91b961565b (patch)
treee99a346d221f1d229a6dab58027a3bc94c67d4d9 /tools/generate_token.py
parent5a5cd74f34faa5a9f06a6608b139ed08af05dc9f (diff)
downloadgitlab-8ad4a76a90817a38becc80d212264c91b961565b.tar.gz
Update testing tools for /session removal
Diffstat (limited to 'tools/generate_token.py')
-rwxr-xr-xtools/generate_token.py67
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()