annotate server/setup.py @ 0:b51518614818 default tip

New Files
author Pluto <meokcin@gmail.com>
date Tue, 03 Sep 2024 15:57:25 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env python3
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
2 import os
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
3 import glob
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
4 import time
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
5 import base64
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
6 import argparse
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
7
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
8 originalApiServer = 'app.pritunl.com'
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
9 originalAuthServer = 'auth.pritunl.com'
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
10 defaultApiServer = 'pritunl-api.simonmicro.de'
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
11 searchIn = [*glob.glob('/usr/lib/python3*'), '/usr/lib/pritunl/', '/usr/share/pritunl/www/', '/usr/lib/pritunl/', '/usr/share/pritunl/www/']
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
12
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
13 print(" ____ _ _ _ _____ _ _ ____ ___ ")
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
14 print(" | _ \ _ __(_) |_ _ _ _ __ | | | ___|_ _| | _____ / \ | _ \_ _|")
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
15 print(" | |_) | '__| | __| | | | '_ \| | | |_ / _` | |/ / _ \ / _ \ | |_) | | ")
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
16 print(" | __/| | | | |_| |_| | | | | | | _| (_| | < __/ / ___ \| __/| | ")
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
17 print(" |_| |_| |_|\__|\__,_|_| |_|_| |_| \__,_|_|\_\___| /_/ \_\_| |___|")
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
18 print(" ")
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
19
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
20 sel = None
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
21 interactive = True
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
22 parser = argparse.ArgumentParser()
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
23 parser.add_argument('--install', type=str, default='DEFAULT', nargs='?', help='Do not ask and install new API endpoint.')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
24 parser.add_argument('--reset', type=str, default='DEFAULT', nargs='?', help='Do not ask and remove new API endpoint.')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
25 parser.add_argument('--api-server', type=str, default=defaultApiServer, help='Set new API server.')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
26 args = parser.parse_args()
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
27
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
28 newApiServer = args.api_server if args.api_server.strip() != '' else defaultApiServer
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
29 if args.install != 'DEFAULT':
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
30 interactive = False
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
31 newApiServer = args.install if args.install is not None else newApiServer
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
32 sel = 'I'
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
33 if args.reset != 'DEFAULT':
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
34 interactive = False
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
35 newApiServer = args.reset if args.reset is not None else newApiServer
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
36 sel = 'R'
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
37
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
38 if interactive:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
39 while sel not in ['I', 'R', 'B', 'Q']:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
40 sel = input('[I]nstall, [R]eset, [B]uy Pritunl, [Q]uit? ').upper()
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
41 print()
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
42
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
43 def doTheReplace(fromApiStr, toApiStr, fromAuthStr, toAuthStr):
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
44 print(f'Okay. We will change "{fromApiStr}" to "{toApiStr}" and "{fromAuthStr}" to "{toAuthStr}" now...')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
45 numFiles = 0
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
46 for i in range(len(searchIn)):
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
47 print(f'[{i+1}/{len(searchIn)}] Replacing in {searchIn[i]}...')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
48 for p, d, f in os.walk(searchIn[i]):
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
49 for ff in f:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
50 try:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
51 fh = open(os.path.join(p, ff), 'r')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
52 lines = fh.read()
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
53 fh.close()
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
54 newLines = lines.replace(fromApiStr, toApiStr)
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
55 newLines = newLines.replace(fromAuthStr, toAuthStr)
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
56 # Special case for changes from c1772d9b3268f91de409ad552e3d4d54d5ae1125
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
57 newLines = newLines.replace(base64.b64encode(f'https://{fromApiStr}/subscription'.encode()).decode(), base64.b64encode(f'https://{toApiStr}/subscription'.encode()).decode())
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
58 if newLines != lines:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
59 numFiles += 1
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
60 fh = open(os.path.join(p, ff), 'w')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
61 fh.writelines(newLines)
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
62 fh.close()
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
63 except UnicodeDecodeError:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
64 # Brrr - binary files...
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
65 pass
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
66 print(f'Modified {numFiles} files in {len(searchIn)} paths.')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
67
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
68 if sel == 'I':
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
69 if interactive:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
70 print(f'By default, the Pritunl API endpoint is hosted at "{originalApiServer}".')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
71 print(f'In case you want to use your own instance, you also have to support HTTPS!')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
72 print(f'Note, that the SSO implementation of Pritunl is hosted at their servers (closed source) and will just be "disabled".')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
73 ownApiServer = input(f'Please enter the new API endpoint [{newApiServer}]: ')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
74 if ownApiServer == '':
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
75 ownApiServer = newApiServer
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
76 else:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
77 ownApiServer = newApiServer
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
78 doTheReplace(originalApiServer, ownApiServer, originalAuthServer, ownApiServer + '/auth/')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
79 print('Please make sure to restart the Pritunl daemon now and please support the developer.')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
80 elif sel == 'R':
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
81 if interactive:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
82 print(f'To properly revert any changes to your Pritunl server, this script must exactly know what (custom) API endpoint you have choosen.')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
83 ownApiServer = input(f'Please enter the current API endpoint [{newApiServer}]: ')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
84 if ownApiServer == '':
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
85 ownApiServer = newApiServer
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
86 print('Make sure to REMOVE ANY FAKED SUBSCRIPTION KEY (by not entering an other command - just remove them). You have now 30 seconds time to hit CTRL+C and do this.')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
87 time.sleep(30)
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
88 else:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
89 ownApiServer = newApiServer
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
90 doTheReplace(ownApiServer, originalApiServer, ownApiServer + '/auth/', originalAuthServer)
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
91 print('Please make sure to restart the Pritunl daemon now.')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
92 elif sel == 'B':
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
93 print('Sure thing, buddy... Why did you try to use this?')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
94 print('Visit https://pritunl.com/ for you own license!')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
95 try:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
96 import webbrowser
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
97 webbrowser.open('https://pritunl.com/')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
98 print('Let me help you...')
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
99 except:
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
100 pass
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
101 elif sel == 'Q':
b51518614818 New Files
Pluto <meokcin@gmail.com>
parents:
diff changeset
102 print('Bye!')