import sys
import requests
import ssl
import json
import warnings
import urllib3.exceptions
import urllib.parse

warnings.simplefilter('ignore', urllib3.exceptions.InsecureRequestWarning)

count = len(sys.argv)
if count <= 7:
   print 
   print 
   print ("SYNTAX: url domain username password acces-code box-name record-name")
   exit()

base_url     = sys.argv[1]
domain       = sys.argv[2]
username     = sys.argv[3]
password     = sys.argv[4]
accesscode   = sys.argv[5]
box_name     = sys.argv[6]
record_name  = sys.argv[7]

print ()
print ("url         = ", base_url)
print ("domain      = ", domain)
print ("username    = ", username)
print ("password    = ", password)
print ("acc-code    = ", accesscode)
print ("box-name    = ", box_name)
print ("record-name = ", record_name)
print ()

session = requests.Session()

headers = {"Accept" : 'application/json', "SAB-Access-Code" : accesscode, "charset" : 'utf8' }
#headers = {"Accept" : 'application/json', "SAB-Access-Code" : accesscode }

#_url = base_url + '/status'
#resp = session.get(_url, headers=headers, verify=False)
#print('\nSAB: ', response.text, '\n')

if domain != "":
    login =  domain + '\\' + username
    params = {
        "domain" : domain,   
        "login" : login,   
        "username" : username,   
        "password" : password,
    }
else:
    login = username
    params = {
        "login" : login,   
        "password" : password,
    }


url = base_url + '/api/login'

response = session.post(url, data=params, headers=headers, verify=False)

#print(response)
s = str(response)

if s.lower() != '<response [200]>':
    data = response.json()
    result = data["msg"]
    for rep in result:
        msg = rep['severity']
        if msg == 'ERROR':
            print('\n\n ERROR: ', rep['message'])

        exit()

url =  base_url + '/safe/search/' + urllib.parse.quote_plus(record_name)

response = session.get(url, headers=headers, verify=False)

#print('\n', response.text, '\n')

data = response.json()
result = data["result"]

#print('\n')

for res in result:
    id = res["id"]
    name = res["name"]
    parent = res["parent"]
    owner = res["owner"]

    if owner != '':
      parent = parent + ' (' + owner + ')'

    url = base_url + '/safe/records/' + str(id)
    response = session.get(url, headers=headers, verify=False)

    data = response.json()
    result = data["record"]

    name = result["name"]

    type = res["template"]
    print(id, name, parent)

    if name.upper() == record_name.upper() and parent.upper() == box_name.upper():

        # read record
        url = base_url + '/safe/records/' + str(id)
        response = session.get(url, headers=headers, verify=False)

        data = response.json()
        result = data["record"]

        id = res["id"]
        name = res["name"]
        type = res["template"]

        # read record secret fields
        url = url + '/passwords'
        response = session.get(url, headers=headers, verify=False)

        data = response.json()
        pswd = data["password"]

        # write record name, type and password
        print('\n\n record name = ', name)
        print(    ' rec type    = ', type)
        print(    ' password    = ', pswd)
        exit()

print('\n\n', record_name, 'not found')
