def generate_captcha(): challenge_code = uuid.uuid4().get_hex() image, answer = generate_captcha_image_and_answer(size=(150, 30), font_size=25, draw_lines=True, draw_points=True) redis().setex(captcha_redis_key(challenge_code), CAPTCHA_ANSWER_ALIVE_TIME, answer) bucket_key = captcha_bucket_key(challenge_code) with contextlib.closing(StringIO()) as buffer_: image.save(buffer_, 'GIF', transparency=0) buffer_.reset() bucket().store(bucket_key, buffer_) return challenge_code, bucket().get_url(bucket_key)
def clean_up_captcha_images(): if not isinstance(bucket(), FilesystemBucket): LOGGER.warn( 'failed as captcha images are not saved in file-system-based bucket' ) return if not bucket().base_directory.exists(): return try: shell_execute('find {} -type f -mmin +{} -delete'.format( bucket().base_directory, CAPTCHA_ANSWER_ALIVE_MINUTES * 2), capture=True) except Exception as e: LOGGER.info('clean up captcha images got exception: %(message)s', {'message': e.message})