#!/usr/bin/python3

#
# Based on:
#   https://www.mdsec.co.uk/2018/06/freestyling-with-sharpshooter-v1-0/
#

import re
import os
import sys
import random
import string

templatePath = os.path.normpath(os.path.join(os.path.dirname(__file__), '../templates/converts/jscript-to-xslt-function.xsl'))

def usage():
    print(f'''

    :: generateJScriptXSL.py - generates semi-random XSL with embedded JScript.
    Based on "Freestyling with SharpShooter v1.0" blog post by MDSec.

Usage: ./generateJScriptXSL.py <infile> <outfile>

Where:
    - infile    - Path to file containing JScript code to be executed.
    - outfile   - Output path for the generated XSL file. Can be '-' to print to stdout instead.

Host resulting file on your webserver or pass it as --file/--file86/--file64 to XSL generator in generate.py .

''')

def randString(length = 10):
    return random.choice(string.ascii_letters) + ''.join(random.choices(string.ascii_letters + string.digits, k=length - 1))

def main(argv):
    if len(argv) < 2:
        usage()
        return False

    infile = argv[1]
    outfile = argv[2]

    if not os.path.isfile(infile):
        print('[!] Input JScript file does not exist!')
        return False

    code = ''
    with open(templatePath) as f:
        code = f.read()

    jscriptCode = ''
    with open(infile) as f:
        jscriptCode = f.read()

    code = code.replace('<<<RANDOM_KEYWORD>>>', randString().lower())
    code = code.replace('<<<RANDOM_KEYWORD2>>>', randString().lower())
    code = code.replace('<<<RANDOM_NAMESPACE>>>', randString().lower())
    code = code.replace('<<<RANDOM_VARNAME>>>', randString().lower())
    code = code.replace('<<<JSCRIPT_CODE>>>', jscriptCode)

    if outfile == '-':
        print(code)

    else:
        with open(outfile, 'w') as f:
            f.write(code)

    sys.stderr.write('\n\n[+] Generated.\n')

if __name__ == '__main__':
    main(sys.argv)
