Mercurial > p > roundup > code
annotate scripts/oauth-get-token.py @ 8506:b6c6891754e9
bug: fix mis-commit of perf tests and crash fix for setTranslation
The commit included more than it should have.
It included some memory dump code that is not part of production.
Also removed WIP for fixing crash bug when translation unable to
create .mo file - issue2551405
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Thu, 25 Dec 2025 12:14:53 -0500 |
| parents | a7853002495c |
| children |
| rev | line source |
|---|---|
|
7084
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
1 #!/usr/bin/python3 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
2 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
3 import requests |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
4 import time |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
5 import sys |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
6 import webbrowser |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
7 import ssl |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
8 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
9 from urllib.parse import urlparse, urlencode, parse_qs |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
10 from argparse import ArgumentParser, RawDescriptionHelpFormatter |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
11 from http.server import HTTPServer, BaseHTTPRequestHandler |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
12 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
13 class Request_Token: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
14 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
15 def __init__ (self, args): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
16 self.args = args |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
17 self.session = requests.session () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
18 self.url = '/'.join ((args.url.rstrip ('/'), args.tenant)) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
19 self.url = '/'.join ((self.url, 'oauth2/v2.0')) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
20 self.state = None |
|
7090
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
21 self.use_tls = self.args.use_tls |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
22 if self.use_tls is None: |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
23 self.use_tls = self.args.redirect_uri.startswith ('https') |
|
7084
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
24 # end def __init__ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
25 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
26 def check_err (self, r): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
27 if not 200 <= r.status_code <= 299: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
28 raise RuntimeError \ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
29 ( 'Invalid result: %s: %s\n %s' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
30 % (r.status_code, r.reason, r.text) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
31 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
32 # end def check_err |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
33 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
34 def get_url (self, path, params): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
35 url = ('/'.join ((self.url, path))) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
36 url = url + '?' + urlencode (params) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
37 return url |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
38 # end def get_url |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
39 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
40 def post_or_put (self, method, path, data = None, json = None): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
41 d = {} |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
42 if data: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
43 d.update (data = data) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
44 if json: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
45 d.update (json = json) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
46 url = ('/'.join ((self.url, path))) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
47 r = method (url, **d) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
48 self.check_err (r) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
49 return r.json () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
50 # end def post_or_put |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
51 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
52 def post (self, path, data = None, json = None): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
53 return self.post_or_put (self.session.post, path, data, json) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
54 # end def post |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
55 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
56 def authcode_callback (self, handler): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
57 msg = [''] |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
58 self.request_received = False |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
59 r = urlparse (handler.path) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
60 if r.query: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
61 q = parse_qs (r.query) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
62 if 'state' in q: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
63 state = q ['state'][0] |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
64 if state != self.state: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
65 msg.append \ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
66 ( 'State did not match: expect "%s" got "%s"' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
67 % (self.state, state) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
68 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
69 elif 'code' not in q: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
70 msg.append ('Got no code') |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
71 else: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
72 with open ('oauth/authcode', 'w') as f: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
73 f.write (q ['code'][0]) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
74 msg.append ('Wrote code to oauth/authcode') |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
75 self.request_received = True |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
76 else: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
77 msg.append ('No state and no code') |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
78 return 200, '\n'.join (msg).encode ('utf-8') |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
79 # end def authcode_callback |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
80 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
81 def request_authcode (self): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
82 with open ('oauth/client_id', 'r') as f: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
83 client_id = f.read () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
84 self.state = 'authcode' + str (time.time ()) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
85 params = dict \ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
86 ( client_id = client_id |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
87 , response_type = 'code' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
88 , response_mode = 'query' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
89 , state = self.state |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
90 , redirect_uri = self.args.redirect_uri |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
91 , scope = ' '.join |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
92 (( 'https://outlook.office.com/IMAP.AccessAsUser.All' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
93 , 'https://outlook.office.com/User.Read' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
94 , 'offline_access' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
95 )) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
96 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
97 url = self.get_url ('authorize', params) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
98 print (url) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
99 if self.args.webbrowser: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
100 browser = webbrowser.get (self.args.browser) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
101 browser.open_new_tab (url) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
102 if self.args.run_https_server: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
103 self.https_server () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
104 if self.args.request_tokens: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
105 self.request_token () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
106 # end def request_authcode |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
107 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
108 def request_token (self): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
109 with open ('oauth/client_id', 'r') as f: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
110 client_id = f.read () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
111 with open ('oauth/client_secret', 'r') as f: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
112 client_secret = f.read ().strip () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
113 with open ('oauth/authcode', 'r') as f: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
114 authcode = f.read ().strip () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
115 params = dict \ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
116 ( client_id = client_id |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
117 , code = authcode |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
118 , client_secret = client_secret |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
119 , redirect_uri = self.args.redirect_uri |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
120 , grant_type = 'authorization_code' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
121 # Only a single scope parameter is allowed here |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
122 , scope = ' '.join |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
123 (( 'https://outlook.office.com/User.Read' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
124 , |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
125 )) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
126 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
127 result = self.post ('token', data = params) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
128 with open ('oauth/refresh_token', 'w') as f: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
129 f.write (result ['refresh_token']) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
130 with open ('oauth/access_token', 'w') as f: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
131 f.write (result ['access_token']) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
132 # end def request_token |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
133 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
134 def https_server (self): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
135 self.request_received = False |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
136 class RQ_Handler (BaseHTTPRequestHandler): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
137 token_handler = self |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
138 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
139 def do_GET (self): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
140 self.close_connection = True |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
141 code, msg = self.token_handler.authcode_callback (self) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
142 self.send_response (code) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
143 self.send_header ('Content-Type', 'text/plain') |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
144 self.end_headers () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
145 self.wfile.write (msg) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
146 self.wfile.flush () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
147 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
148 port = self.args.https_server_port |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
149 httpd = HTTPServer (('localhost', port), RQ_Handler) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
150 |
|
7090
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
151 if self.use_tls: |
|
7110
0597120e0a74
Try to clear SSL bogus security alert in CI
John Rouillard <rouilj@ieee.org>
parents:
7108
diff
changeset
|
152 # note this opens a server on localhost. Only |
|
0597120e0a74
Try to clear SSL bogus security alert in CI
John Rouillard <rouilj@ieee.org>
parents:
7108
diff
changeset
|
153 # a process on the same host can get the credentials. |
|
0597120e0a74
Try to clear SSL bogus security alert in CI
John Rouillard <rouilj@ieee.org>
parents:
7108
diff
changeset
|
154 # Even unencrypted (http://) url is fine as the credentials |
|
0597120e0a74
Try to clear SSL bogus security alert in CI
John Rouillard <rouilj@ieee.org>
parents:
7108
diff
changeset
|
155 # will be saved in clear text on disk for use. So a |
|
0597120e0a74
Try to clear SSL bogus security alert in CI
John Rouillard <rouilj@ieee.org>
parents:
7108
diff
changeset
|
156 # compromised local host will still get the credentials. |
|
0597120e0a74
Try to clear SSL bogus security alert in CI
John Rouillard <rouilj@ieee.org>
parents:
7108
diff
changeset
|
157 context = ssl.SSLContext(ssl_version=ssl.PROTOCOL_TLS_SERVER) |
|
0597120e0a74
Try to clear SSL bogus security alert in CI
John Rouillard <rouilj@ieee.org>
parents:
7108
diff
changeset
|
158 |
|
7111
a7853002495c
Swap maximum_version for minumum_version in comment
John Rouillard <rouilj@ieee.org>
parents:
7110
diff
changeset
|
159 # This should not be needed as PROTOCOL_TLS_SERVER disables |
|
a7853002495c
Swap maximum_version for minumum_version in comment
John Rouillard <rouilj@ieee.org>
parents:
7110
diff
changeset
|
160 # unsafe protocols. Uses Python 3.10+ setting ssl.TLSVersion.... |
|
a7853002495c
Swap maximum_version for minumum_version in comment
John Rouillard <rouilj@ieee.org>
parents:
7110
diff
changeset
|
161 # context.minimum_version = ssl.TLSVersion.TLSv1_2 |
|
a7853002495c
Swap maximum_version for minumum_version in comment
John Rouillard <rouilj@ieee.org>
parents:
7110
diff
changeset
|
162 # for previous Python versions 3.6+ maybe: |
|
7110
0597120e0a74
Try to clear SSL bogus security alert in CI
John Rouillard <rouilj@ieee.org>
parents:
7108
diff
changeset
|
163 # ssl.PROTOCOL_TLSv1_2 |
|
0597120e0a74
Try to clear SSL bogus security alert in CI
John Rouillard <rouilj@ieee.org>
parents:
7108
diff
changeset
|
164 # would work? |
|
0597120e0a74
Try to clear SSL bogus security alert in CI
John Rouillard <rouilj@ieee.org>
parents:
7108
diff
changeset
|
165 |
|
7108
b26207712c2b
Use an ssl.SSLContext instead of ssl.wrap_socket
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7090
diff
changeset
|
166 context.load_cert_chain \ |
|
b26207712c2b
Use an ssl.SSLContext instead of ssl.wrap_socket
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7090
diff
changeset
|
167 ( keyfile = self.args.keyfile |
|
b26207712c2b
Use an ssl.SSLContext instead of ssl.wrap_socket
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7090
diff
changeset
|
168 , certfile = self.args.certfile |
|
7090
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
169 ) |
|
7108
b26207712c2b
Use an ssl.SSLContext instead of ssl.wrap_socket
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7090
diff
changeset
|
170 httpd.socket = context.wrap_socket \ |
|
b26207712c2b
Use an ssl.SSLContext instead of ssl.wrap_socket
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7090
diff
changeset
|
171 (httpd.socket, server_side = True) |
|
7084
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
172 while not self.request_received: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
173 httpd.handle_request () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
174 # end def https_server |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
175 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
176 # end class Request_Token |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
177 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
178 epilog = """\ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
179 Retrieving the necessary refresh_token and access_token credentials |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
180 using this script. This asumes you have an email account (plus the |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
181 password) to be used for mail retrieval. And you have registered an |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
182 application in the cloud for this process. The registering of an |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
183 application will give you an application id (also called client id) and |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
184 a tenant in UUID format. |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
185 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
186 First define the necessary TENANT variable: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
187 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
188 TENANT=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
189 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
190 You need to create a directory named 'oauth' (if not yet existing) and |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
191 put the client id (also called application id) into the file |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
192 'oauth/client_id' and the corresponding secret into the file |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
193 'oauth/client_secret'. |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
194 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
195 By default calling the script with no arguments, the whole process is |
|
7090
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
196 automatic. Note that the default TLS key used for the built-in server is |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
197 a self-signed certificate which is automatically created on Debian-based |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
198 (including Ubuntu) Linux distributions. But the key-file is not readable |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
199 for everyone, you need to be in the group 'ssl-cert' or need otherwise |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
200 elevated privileges. If you're using a http (as opposed to https) |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
201 redirect URI, of course no TLS files are needed. You may want to specify |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
202 the tenant explicitly using: |
|
7084
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
203 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
204 ./oauth-get-token.py -t $TENANT |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
205 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
206 Specifying the tenant explicitly will select the customized company |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
207 login form directly. |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
208 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
209 The automatic process works as follows: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
210 - First the authorization URL is constructed and pushed to a local |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
211 browser. By default the default browser on that machine is used, you |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
212 can specify a different browser with the -b/--browser option. |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
213 This will show a login form where you should be able to select the |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
214 user to log in with. Log in with the username (the email address) and |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
215 password for that user. |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
216 - A web-server is started on the given port. When you fill out the |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
217 authentication form pushed to the browser, the last step is a redirect |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
218 to an URL that calls back to this webserver. The necessary |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
219 authentication code is transmitted in a query parameter. The code is |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
220 stored into the file 'oauth/authcode'. Using the authcode, the |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
221 refresh_token and access_token are requested and stored in the oauth |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
222 directory. |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
223 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
224 These steps can be broken down into individual steps by options |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
225 disabling one of the steps: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
226 - The push to the webserver can be disabled with the option |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
227 -w/--dont-push-to-webbrowser -- in that case the URL is printed on |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
228 standard output and must be pasted into the URL input field of a |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
229 browser. It is typically a good idea to use a browser that is |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
230 currently not logged into the company network. |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
231 - The start of the webserver can be disabled with the option |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
232 -s/--dont-run-https-server -- when called with that option no |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
233 webserver is started. You get a redirect to a non-existing page. The |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
234 error-message is something like: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
235 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
236 This site can’t be reached |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
237 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
238 Copy the URL from the browser into the file 'oauth/authcode'. The URL |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
239 has paramters. We're interested in the 'code' parameter, a very long |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
240 string. Edit the file so that only that string (without the 'code=' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
241 part) is in the file. |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
242 - Requesting the tokens can be disabled with the option |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
243 -n/--dont-request-tokens -- if this option is given, after receiving |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
244 the redirect from the webserver the authentication code is written to |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
245 the file 'oauth/authcode' but no token request is started. |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
246 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
247 If you have either disabled the webserver or the token request, the |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
248 token can be requested (using the file 'oauth/authcode' constructed by |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
249 hand as described above or written by the webserver) with the |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
250 -T/--request-token option: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
251 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
252 ./oauth-get-token.py [-t $TENANT] -T |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
253 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
254 If successful this will create the 'oauth/access_token' and |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
255 'oauth/refresh_token' files. Note that the authentication code has a |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
256 limited lifetime. |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
257 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
258 """ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
259 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
260 def main (): |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
261 cmd = ArgumentParser \ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
262 (epilog=epilog, formatter_class=RawDescriptionHelpFormatter) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
263 cmd.add_argument \ |
|
7090
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
264 ( '-b', '--browser' |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
265 , help = "Use non-default browser" |
|
7084
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
266 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
267 cmd.add_argument \ |
|
7090
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
268 ( '--certfile' |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
269 , help = "TLS certificate file, default=%(default)s" |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
270 , default = "/etc/ssl/certs/ssl-cert-snakeoil.pem" |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
271 ) |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
272 cmd.add_argument \ |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
273 ( '--keyfile' |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
274 , help = "TLS key file, default=%(default)s" |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
275 , default = "/etc/ssl/private/ssl-cert-snakeoil.key" |
|
7084
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
276 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
277 cmd.add_argument \ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
278 ( '-n', '--dont-request-tokens' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
279 , dest = 'request_tokens' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
280 , help = "Do not request tokens, just write authcode" |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
281 , action = 'store_false' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
282 , default = True |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
283 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
284 cmd.add_argument \ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
285 ( '-p', '--https-server-port' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
286 , type = int |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
287 , help = "Port for https server to listen, default=%(default)s" |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
288 " see also -r option, ports must (usually) match." |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
289 , default = 8181 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
290 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
291 cmd.add_argument \ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
292 ( '-r', '--redirect-uri' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
293 , help = "Redirect URI, default=%(default)s" |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
294 , default = 'https://localhost:8181' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
295 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
296 cmd.add_argument \ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
297 ( '-s', '--dont-run-https-server' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
298 , dest = 'run_https_server' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
299 , help = "Run https server to wait for connection of browser " |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
300 "to transmit auth code via GET request" |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
301 , action = 'store_false' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
302 , default = True |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
303 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
304 cmd.add_argument \ |
|
7090
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
305 ( '-T', '--request-token' |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
306 , help = "Run only the token-request step" |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
307 , action = 'store_true' |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
308 ) |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
309 cmd.add_argument \ |
|
7084
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
310 ( '-t', '--tenant' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
311 , help = "Tenant part of url, default=%(default)s" |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
312 , default = 'organizations' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
313 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
314 cmd.add_argument \ |
|
7090
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
315 ( '--use-tls' |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
316 , help = "Enforce use of TLS even if the redirect uri is http" |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
317 , action = 'store_true' |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
318 , default = None |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
319 ) |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
320 cmd.add_argument \ |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
321 ( '--no-use-tls', '--dont-use-tls' |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
322 , help = "Disable use of TLS even if the redirect uri is https" |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
323 , dest = 'use_tls' |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
324 , action = 'store_false' |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
325 , default = None |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
326 ) |
|
8cda8e05c9a0
Update oauth-get-token script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
7084
diff
changeset
|
327 cmd.add_argument \ |
|
7084
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
328 ( '-u', '--url' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
329 , help = "Base url for requests, default=%(default)s" |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
330 , default = 'https://login.microsoftonline.com' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
331 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
332 cmd.add_argument \ |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
333 ( '-w', '--dont-push-to-webbrowser' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
334 , dest = 'webbrowser' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
335 , help = "Do not push authcode url into the browser" |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
336 , action = 'store_false' |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
337 , default = True |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
338 ) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
339 args = cmd.parse_args () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
340 rt = Request_Token (args) |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
341 if args.request_token: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
342 rt.request_token () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
343 else: |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
344 rt.request_authcode () |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
345 # end def main |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
346 |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
347 if __name__ == '__main__': |
|
8d9a6063cb22
Add oauth-get-token.py script
Ralf Schlatterbeck <rsc@runtux.com>
parents:
diff
changeset
|
348 main () |
