66 lines
1.9 KiB
Plaintext
Executable File
66 lines
1.9 KiB
Plaintext
Executable File
#!/usr/bin/python3
|
|
import os
|
|
import sys
|
|
|
|
os.chdir('..')
|
|
sys.path.append('lib')
|
|
|
|
hash = os.environ.get('TLS_CLIENT_HASH')
|
|
if (not hash):
|
|
# no CC
|
|
print('60 Authentication is required\r\n')
|
|
exit()
|
|
cert_name = os.environ.get('REMOTE_USER')
|
|
|
|
print('20 text/gemini\r\n')
|
|
|
|
from auth import auth
|
|
auth = auth('data/data.db')
|
|
auth.pass_key(hash, cert_name)
|
|
|
|
if (not auth.username):
|
|
# mismatch
|
|
print('=> register.gmi register')
|
|
print('=> link.gmi link existing account')
|
|
else:
|
|
# match
|
|
from datetime import datetime
|
|
|
|
print('Hello, {}!'.format(auth.username))
|
|
print('## Your keys')
|
|
|
|
my_keys = auth.get_keys(['last_seen'])
|
|
for hash in my_keys:
|
|
key = my_keys[hash]
|
|
last_seen = datetime.fromtimestamp(key['last_seen'])
|
|
current = hash == auth.hash
|
|
|
|
name = key['name']
|
|
name = '"' + name + '"' if name else '[no name]'
|
|
|
|
label = '* ' + name
|
|
if (current):
|
|
label += ' (currently used)'
|
|
print(label)
|
|
|
|
print('hash:', hash)
|
|
print('last seen:', last_seen)
|
|
print('=> rename-request.gmi?{} rename'.format(auth.gen_anticsrf() + hash))
|
|
if (not current):
|
|
print('=> unlink.gmi?{} unlink'.format(auth.gen_anticsrf() + hash))
|
|
|
|
link_token = auth.user_info('link_token')
|
|
if(link_token):
|
|
expire = datetime.fromtimestamp(auth.user_info('link_token_time') + auth.LINK_EXPIRE)
|
|
delta = expire - datetime.now()
|
|
minutes = delta.seconds // 60
|
|
seconds = delta.seconds % 60
|
|
# TODO: calibration - it displays 00:00 for one second
|
|
def zero(n):
|
|
return str(n) if n>10 else '0'+str(n)
|
|
print('### Link new key')
|
|
print('Token {} will expire in {}:{}'.format(link_token, zero(minutes), zero(seconds)))
|
|
print('=> link.gmi?cancel cancel')
|
|
else:
|
|
print('---')
|
|
print('=> link.gmi link new key') |