import sys
import requests
import ssl
import json
import warnings
import urllib3.exceptions

warnings.simplefilter('ignore', urllib3.exceptions.InsecureRequestWarning)

#count = len(sys.argv)
#if count <= 8:
#   print 
#   print 
#   print ("SYNTAX: url domain username password acces-code box-name secaccount-name note new-password")
#   exit()

base_url     = 'https://172.22.78.123:8843'
domain       = 'system'
username     = 'admin'
password     = 'xxx'
accesscode   = 'xxx'
box_name     = 'HUBA'

record_name  = 'fioX'
new_tags     = 'tags'
new_pswd     = 'xxlxlxlx'
new_note     = 'Hi note'
sec_note     = 'Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note Bye Bye note'
new_descr    = 'description' 
new_pswd     = 'harry' 
new_user     = 'brick'

print ()
print ("url         = ", base_url)
print ("domain      = ", domain)
print ("username    = ", username)
print ("password    = ", password)
print ("acc-code    = ", accesscode)
print ("box-name    = ", box_name)
print ()
print ("account     = ", record_name)
print ("tags        = ", new_tags)
print ("note        = ", new_note)
print ("sec-note    = ", sec_note)
print ("new user    = ", new_user)
print ("pswd        = ", new_pswd)
print ("descr       = ", new_descr)
print ()


session = requests.Session()

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'

print('login params = ', params)

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/' + box_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:
    box_id = res["id"]
    name = res["name"]
    type = res["type"]

    print(box_id, name, type)

    if type.upper() == 'SAFEBOX' and name.upper() == box_name.upper():

        # adding secret account

        url = base_url + '/safe/boxes/' + str(box_id) + '/records'

        rec = {
##            "id" : "0",   
            "name" : record_name,   
            "template" : 'account-sec',
            "note" : new_note,   
            "sec-note" : sec_note,
            "description" : new_descr,
            "tags" : new_tags,
            "loginName" : new_user,   
            "password" : new_pswd,
            "passwordRe" : new_pswd,
##            "passwordPattern"
##            "sec-loginName" : '',
##            "sec-serverAddress" : '',
        }

        obj = json.dumps(rec)

        print(url)
        print(obj)

        response = session.post(url, data=obj, headers=headers, verify=False)

        data = response.json()
        result = data["msg"]
        for rep in result:
            msg = rep['severity']
            if msg == 'ERROR':
                print('\n\n SAB ERROR: ', rep['message'])
            else:
                print('\n\n secure account added.')

            exit()

print('\n\n', box_name, 'not found')
