captcha.py 1.3 KB
from opensipkd.tools.captcha import *


def img_captcha(request, length=5, chars=string.ascii_uppercase + string.digits):
    kode_captcha = randomcaptcha(length, chars)
    _here = os.path.dirname(__file__)
    # captcha_path = os.path.abspath('/static/img/captcha.png'))
    # font_path = os.path.abspath(os.path.join('/static/v3/fonts/arial.ttf'))
    settings = get_settings()
    captcha_files = settings['captcha_files']
    if not os.path.exists(captcha_files):
        os.makedirs(captcha_files)

    file_name = get_random_string(16) + '.png'
    from pyramid.path import AssetResolver
    a = AssetResolver('tangsel.base')
    static_path = a.resolve('static').abspath()
    captcha_path = os.path.abspath(os.path.join(captcha_files, file_name))
    font_path = os.path.abspath(os.path.join(static_path, 'fonts/arial.ttf'))
    log.debug(f"Font path: {font_path}")
    log.debug(f"Captcha path: {captcha_path}")
    captcha_image = captcha(drawings=[
        background(color='#fff'),
        text(fonts=[font_path],
             drawings=[offset(0.8)]),
        noise(),
        smooth()
    ], width=300)
    image = captcha_image(' ' + kode_captcha + ' ')
    image.save(captcha_path, 'PNG', quality=75)
    kode_captcha = kode_captcha
    request.session['captcha'] = kode_captcha
    return kode_captcha, file_name