#!/usr/bin/env python3
import argparse, getpass, hashlib, os, secrets
import mysql.connector

def main():
    p=argparse.ArgumentParser()
    p.add_argument('--name', required=True)
    p.add_argument('--allowed-ips', default='')
    p.add_argument('--rate-limit', type=int, default=120)
    p.add_argument('--max-export-records', type=int, default=100000)
    p.add_argument('--host', default='127.0.0.1')
    p.add_argument('--user', default='directory_api')
    p.add_argument('--database', default='public_directory')
    a=p.parse_args()
    pw=os.getenv('PD_DB_PASSWORD') or getpass.getpass('MySQL password: ')
    raw='pd_live_'+secrets.token_urlsafe(32)
    digest=hashlib.sha256(raw.encode()).hexdigest()
    conn=mysql.connector.connect(host=a.host,user=a.user,password=pw,database=a.database)
    cur=conn.cursor()
    cur.execute('INSERT INTO api_keys (name,key_prefix,key_hash,allowed_ips,rate_limit_per_minute,max_export_records) VALUES (%s,%s,%s,%s,%s,%s)',(a.name,raw[:16],digest,a.allowed_ips or None,a.rate_limit,a.max_export_records))
    conn.commit(); cur.close(); conn.close()
    print('\nAPI KEY CREATED\nName:',a.name,'\nKey:',raw,'\n\nSAVE THIS KEY NOW. Only its SHA-256 hash is stored.')

if __name__=='__main__': main()
