def test_encdec_with_extra_args(): crypto = Crypto(salt="something") encrypted = crypto.encrypt(width=300, height=200, smart=False, fit_in=True, flip_horizontal=True, flip_vertical=True, halign="center", valign="middle", crop_left=10, crop_top=11, crop_right=12, crop_bottom=13, image="/some/image") decrypted = crypto.decrypt(encrypted) assert decrypted['width'] == 300 assert decrypted['height'] == 200 assert not decrypted['smart'] assert decrypted['fit_in'] assert decrypted['horizontal_flip'] assert decrypted['vertical_flip'] assert decrypted['halign'] == "center" assert decrypted['valign'] == "middle" assert decrypted['crop'] assert decrypted['crop']['left'] == 10 assert decrypted['crop']['top'] == 11 assert decrypted['crop']['right'] == 12 assert decrypted['crop']['bottom'] == 13
def test_usage(): key = "my-security-key" image = "s.glbimg.com/et/bb/f/original/2011/03/24/VN0JiwzmOw0b0lg.jpg" thumbor_crypto = Crypto(salt=key) thumbor_options = thumbor_crypto.encrypt( 300, 200, True, False, False, 'center', 'middle', 0, 0, 0, 0, image=image ) thumbor_url = "/%s/%s" % (thumbor_options, image) crypto = CryptoURL(key=key) url = crypto.generate( width=300, height=200, smart=True, image_url=image ) assert url == thumbor_url
def test_encdec_with_extra_args(): crypto = Crypto(salt="something") encrypted = crypto.encrypt(width=300, height=200, smart=False, flip_horizontal=True, flip_vertical=True, halign="center", valign="middle", crop_left=10, crop_top=11, crop_right=12, crop_bottom=13, image="/some/image") decrypted = crypto.decrypt(encrypted) assert decrypted['width'] == 300 assert decrypted['height'] == 200 assert not decrypted['smart'] assert decrypted['horizontal_flip'] assert decrypted['vertical_flip'] assert decrypted['halign'] == "center" assert decrypted['valign'] == "middle" assert decrypted['crop'] assert decrypted['crop']['left'] == 10 assert decrypted['crop']['top'] == 11 assert decrypted['crop']['right'] == 12 assert decrypted['crop']['bottom'] == 13
def test_usage(): key = "my-security-key" image = "s.glbimg.com/et/bb/f/original/2011/03/24/VN0JiwzmOw0b0lg.jpg" thumbor_crypto = Crypto(salt=key) thumbor_options = thumbor_crypto.encrypt( width=300, height=200, smart=True, fit_in=False, flip_horizontal=False, flip_vertical=False, halign='center', valign='middle', crop_left=0, crop_top=0, crop_right=0, crop_bottom=0, image=image ) thumbor_url = "/%s/%s" % (thumbor_options, image) crypto = CryptoURL(key=key) url = crypto.generate( width=300, height=200, smart=True, image_url=image ) assert url == thumbor_url
def test_crypto_encrypts(): crypto = Crypto(salt="something") encrypted = crypto.encrypt(width=300, height=300, smart=True, flip_horizontal=True, flip_vertical=True, halign="center", valign="middle", crop_left=10, crop_top=11, crop_right=12, crop_bottom=13, image="/some/image.jpg") assert encrypted == 'OI8j7z9h88_IVzYLiq9UWPkBPBwwJ1pMKQw1UVrL7odTcog5UT4PBBrzoehKm7WUNxU5oq8mV59xMJJUc2aKWA=='
def test_crypto_encrypts(): crypto = Crypto(salt="something") encrypted = crypto.encrypt(width=300, height=300, smart=True, fit_in=False, flip_horizontal=True, flip_vertical=True, halign="center", valign="middle", crop_left=10, crop_top=11, crop_right=12, crop_bottom=13, image="/some/image.jpg") assert encrypted == 'OI8j7z9h88_IVzYLiq9UWPkBPBwwJ1pMKQw1UVrL7odTcog5UT4PBBrzoehKm7WUNxU5oq8mV59xMJJUc2aKWA=='
def test_decrypt(): crypto = Crypto(salt="something") encrypted = crypto.encrypt(width=300, height=200, smart=True, flip_horizontal=True, flip_vertical=True, halign="center", valign="middle", crop_left=10, crop_top=11, crop_right=12, crop_bottom=13, image="/some/image.jpg") decrypted = crypto.decrypt(encrypted) assert decrypted['width'] == 300 assert decrypted['height'] == 200 assert decrypted['smart'] == True
def test_decrypt(): crypto = Crypto(salt="something") encrypted = crypto.encrypt(width=300, height=200, smart=True, fit_in=False, flip_horizontal=True, flip_vertical=True, halign="center", valign="middle", crop_left=10, crop_top=11, crop_right=12, crop_bottom=13, image="/some/image.jpg") decrypted = crypto.decrypt(encrypted) assert decrypted['width'] == 300 assert decrypted['height'] == 200 assert decrypted['smart'] == True
def test_decrypting_with_wrong_key_fails(): crypto = Crypto(salt="something") encrypted = crypto.encrypt(width=300, height=200, smart=True, flip_horizontal=True, flip_vertical=True, halign="center", valign="middle", crop_left=10, crop_top=11, crop_right=12, crop_bottom=13, image="/some/image/") crypto = Crypto(salt="simething") decrypted = crypto.decrypt(encrypted) assert decrypted
def test_decrypting_with_wrong_key_fails(): crypto = Crypto(salt="something") encrypted = crypto.encrypt(width=300, height=200, smart=True, fit_in=False, flip_horizontal=True, flip_vertical=True, halign="center", valign="middle", crop_left=10, crop_top=11, crop_right=12, crop_bottom=13, image="/some/image/") crypto = Crypto(salt="simething") decrypted = crypto.decrypt(encrypted) assert decrypted
def main(): '''Converts a given url with the specified arguments.''' parser = optparse.OptionParser(usage='thumbor-url [options] imageurl or type thumbor-url -h (--help) for help', description=__doc__, version=__version__) parser.add_option('-k', '--key', dest='key', default=None, help = 'The security key to encrypt the url with [default: %default].' ) parser.add_option('-w', '--width', dest='width', type='int', default=0, help = 'The target width for the image [default: %default].' ) parser.add_option('-e', '--height', dest='height', type='int', default=0, help = 'The target height for the image [default: %default].' ) parser.add_option('-s', '--smart', action='store_true', dest='smart', default=False, help = 'Indicates that smart cropping should be used.' ) parser.add_option('-f', '--horizontal-flip', action='store_true', dest='horizontal_flip', default=False, help = 'Indicates that the image should be horizontally flipped.' ) parser.add_option('-v', '--vertical-flip', action='store_true', dest='vertical_flip', default=False, help = 'Indicates that the image should be vertically flipped.') parser.add_option('-a', '--halign', dest='halign', default='center', help = 'The horizontal alignment to use for cropping [default: %default].' ) parser.add_option('-i', '--valign', dest='valign', default='middle', help = 'The vertical alignment to use for cropping [default: %default].' ) parser.add_option('-c', '--crop', dest='crop', default=None, help = 'The coordinates of the points to manual cropping in the format leftxtop:rightxbottom (100x200:400x500) [default: %default].' ) (parsed_options, arguments) = parser.parse_args() if not arguments: print 'Error: The image argument is mandatory. For more information type thumbor-url -h' return image_url = arguments[0] if image_url.startswith('/'): image_url = image_url[1:] conf_file = ThumborServiceApp.get_conf_file('') if conf_file: print print "USING CONFIGURATION FILE AT %s" % conf_file print parse_config_file(conf_file) if not parsed_options.key and not conf_file: print 'Error: The -k or --key argument is mandatory. For more information type thumbor-url -h' return security_key = options.SECURITY_KEY if not parsed_options.key else parsed_options.key crypt = Crypto(security_key) crop_left = crop_top = crop_right = crop_bottom = 0 if parsed_options.crop: crops = parsed_options.crop.split(':') crop_left, crop_top = crops[0].split('x') crop_right, crop_bottom = crops[1].split('x') opt = crypt.encrypt(parsed_options.width, parsed_options.height, parsed_options.smart, parsed_options.horizontal_flip, parsed_options.vertical_flip, parsed_options.halign, parsed_options.valign, crop_left, crop_top, crop_right, crop_bottom, image_url) url = '/%s/%s' % (opt, image_url) print 'Encrypted URL: "%s" (without quotes)' % url
def main(arguments=None): '''Converts a given url with the specified arguments.''' if arguments is None: arguments = sys.argv[1:] parser = optparse.OptionParser( usage= 'thumbor-url [options] imageurl or type thumbor-url -h (--help) for help', description=__doc__, version=__version__) parser.add_option( '-l', '--key_file', dest='key_file', default=None, help='The file to read the security key from [default: %default].') parser.add_option( '-k', '--key', dest='key', default=None, help='The security key to encrypt the url with [default: %default].') parser.add_option( '-w', '--width', dest='width', type='int', default=0, help='The target width for the image [default: %default].') parser.add_option( '-e', '--height', dest='height', type='int', default=0, help='The target height for the image [default: %default].') parser.add_option( '-n', '--fitin', dest='fitin', action='store_true', default=False, help='Indicates that fit-in resizing should be performed.') parser.add_option( '', '--adaptive', action='store_true', dest='adaptive', default=False, help='Indicates that adaptive fit-in cropping should be used.') parser.add_option('-s', '--smart', action='store_true', dest='smart', default=False, help='Indicates that smart cropping should be used.') parser.add_option( '-f', '--horizontal-flip', action='store_true', dest='horizontal_flip', default=False, help='Indicates that the image should be horizontally flipped.') parser.add_option( '-v', '--vertical-flip', action='store_true', dest='vertical_flip', default=False, help='Indicates that the image should be vertically flipped.') parser.add_option( '-a', '--halign', dest='halign', default='center', help='The horizontal alignment to use for cropping [default: %default].' ) parser.add_option( '-i', '--valign', dest='valign', default='middle', help='The vertical alignment to use for cropping [default: %default].') parser.add_option( '', '--filters', dest='filters', default='', help= 'Filters to be applied to the image, e.g. brightness(10) [default: %default].' ) parser.add_option( '-c', '--crop', dest='crop', default=None, help= 'The coordinates of the points to manual cropping in the format leftxtop:rightxbottom (100x200:400x500) [default: %default].' ) (parsed_options, arguments) = parser.parse_args(arguments) if not arguments: print 'Error: The image argument is mandatory. For more information type thumbor-url -h' return image_url = arguments[0] if image_url.startswith('/'): image_url = image_url[1:] try: config = Config.load(None) except: config = None if config: print print "USING CONFIGURATION FILE AT %s" % config.config_file print if not parsed_options.key and not config: print 'Error: The -k or --key argument is mandatory. For more information type thumbor-url -h' return if parsed_options.key_file: f = open(parsed_options.key_file) security_key = f.read() f.close() else: security_key = config.SECURITY_KEY if not parsed_options.key else parsed_options.key crypt = Crypto(security_key) crop_left = crop_top = crop_right = crop_bottom = 0 if parsed_options.crop: crops = parsed_options.crop.split(':') crop_left, crop_top = crops[0].split('x') crop_right, crop_bottom = crops[1].split('x') opt = crypt.encrypt(parsed_options.width, parsed_options.height, parsed_options.smart, parsed_options.adaptive, parsed_options.fitin, parsed_options.horizontal_flip, parsed_options.vertical_flip, parsed_options.halign, parsed_options.valign, crop_left, crop_top, crop_right, crop_bottom, parsed_options.filters, image_url) url = '/%s/%s' % (opt, image_url) print 'Encrypted URL:' print url