|
| 1 | +""" |
| 2 | +GitLab API: |
| 3 | +https://docs.gitlab.com/ce/api/keys.html |
| 4 | +""" |
| 5 | +import base64 |
| 6 | +import hashlib |
| 7 | + |
| 8 | + |
| 9 | +def key_fingerprint(key): |
| 10 | + key_part = key.split()[1] |
| 11 | + decoded = base64.b64decode(key_part.encode("ascii")) |
| 12 | + digest = hashlib.sha256(decoded).digest() |
| 13 | + return "SHA256:" + base64.b64encode(digest).rstrip(b"=").decode("utf-8") |
| 14 | + |
| 15 | + |
| 16 | +def test_keys_ssh(gl, user, SSH_KEY): |
| 17 | + key = user.keys.create({"title": "foo@bar", "key": SSH_KEY}) |
| 18 | + |
| 19 | + # Get key by ID (admin only). |
| 20 | + key_by_id = gl.keys.get(key.id) |
| 21 | + assert key_by_id.title == key.title |
| 22 | + assert key_by_id.key == key.key |
| 23 | + |
| 24 | + fingerprint = key_fingerprint(SSH_KEY) |
| 25 | + # Get key by fingerprint (admin only). |
| 26 | + key_by_fingerprint = gl.keys.get(fingerprint=fingerprint) |
| 27 | + assert key_by_fingerprint.title == key.title |
| 28 | + assert key_by_fingerprint.key == key.key |
| 29 | + |
| 30 | + key.delete() |
| 31 | + |
| 32 | + |
| 33 | +def test_keys_deploy(gl, project, DEPLOY_KEY): |
| 34 | + key = project.keys.create({"title": "foo@bar", "key": DEPLOY_KEY}) |
| 35 | + |
| 36 | + fingerprint = key_fingerprint(DEPLOY_KEY) |
| 37 | + key_by_fingerprint = gl.keys.get(fingerprint=fingerprint) |
| 38 | + assert key_by_fingerprint.title == key.title |
| 39 | + assert key_by_fingerprint.key == key.key |
| 40 | + assert len(key_by_fingerprint.deploy_keys_projects) == 1 |
| 41 | + |
| 42 | + key.delete() |
0 commit comments