mirror of
https://github.com/postgres/pgweb.git
synced 2025-07-25 16:02:27 +00:00
69 lines
2.0 KiB
Python
Executable File
69 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
#
|
|
# This script generates a URL valid for a test authentication,
|
|
# so the full website integration isn't necessary.
|
|
#
|
|
|
|
import sys
|
|
from Crypto import Random
|
|
from Crypto.Cipher import AES
|
|
import base64
|
|
import time
|
|
import urllib
|
|
from optparse import OptionParser
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = OptionParser()
|
|
parser.add_option("-k", "--key", dest="key")
|
|
parser.add_option("-u", "--user", dest="user")
|
|
parser.add_option("-f", "--first", dest="first")
|
|
parser.add_option("-l", "--last", dest="last")
|
|
parser.add_option("-e", "--email", dest="email")
|
|
parser.add_option("-s", "--suburl", dest="suburl")
|
|
|
|
(options, args) = parser.parse_args()
|
|
|
|
if len(args) != 0:
|
|
parser.print_usage()
|
|
sys.exit(1)
|
|
|
|
if not options.key:
|
|
options.key = input("Enter key (BASE64 encoded): ")
|
|
if not options.user:
|
|
options.user = input("Enter username: ")
|
|
if not options.first:
|
|
options.first = "FirstName"
|
|
if not options.last:
|
|
options.last = "LastName"
|
|
if not options.email:
|
|
options.email = "test@example.com"
|
|
|
|
# This is basically a rip of the view in accounts/views.py
|
|
info = {
|
|
'u': options.user,
|
|
'f': options.first,
|
|
'l': options.last,
|
|
'e': options.email,
|
|
}
|
|
if options.suburl:
|
|
info['su'] = options.suburl
|
|
|
|
# Turn this into an URL. Make sure the timestamp is always first, that makes
|
|
# the first block more random..
|
|
# Since this is a fake authentication, put it 5 minutes into the future to
|
|
# give more time to copy/paste it.
|
|
s = "t=%s&%s" % (int(time.time() + 300), urllib.parse.urlencode(info))
|
|
|
|
r = Random.new()
|
|
iv = r.read(16)
|
|
encryptor = AES.new(base64.b64decode(options.key), AES.MODE_CBC, iv)
|
|
cipher = encryptor.encrypt(s + ' ' * (16 - (len(s) % 16)))
|
|
|
|
print("Paste the following after the receiving url:")
|
|
print("?i=%s&d=%s" % (
|
|
base64.b64encode(iv, b"-_").decode('ascii'),
|
|
base64.b64encode(cipher, b"-_").decode('ascii'),
|
|
))
|