Add.. everything

This commit is contained in:
Papaito 2023-06-12 07:56:17 -06:00
parent 5989447a03
commit 97c28170c9
15 changed files with 217 additions and 3 deletions

Binary file not shown.

10
app.py
View File

@ -2,12 +2,22 @@ from flask import Flask, render_template, request, make_response, redirect
from numpy import real
from freecaptcha import captcha
import uuid
import os
app = Flask(__name__, static_url_path='', static_folder='static',)
captcha_solutions = {}
captcha_solved = []
@app.route("/captcha2", methods=['GET'])
def captcha2():
with open('templates/captcha2play.html') as play_template_file:
return play_template_file.read()
@app.route("/captcha3", methods=['GET'])
def captcha3():
return captcha.generate_captcha_html(os.listdir('static/images/'))
@app.route("/captcha", methods=['GET', 'POST'])
def login():
# This means they just submitted a CAPTCHA

Binary file not shown.

Binary file not shown.

View File

@ -4,6 +4,88 @@ from PIL import Image
import base64
from io import BytesIO
import os
def generate_layers(images, index=0):
if len(images) == 0:
return ''
return f'''<label>
<input id="layer{index}" type="radio" name="captcha{index}" value="{index}">
<img src="images/{images[0]}"></img>
{generate_layers(images[1:], index+1)}
</label>
'''
def generate_captcha_html(images):
html = ''
html_prelude = '''
<style>
.grid {
display: grid;
grid-template-columns: repeat(3, 0fr);
}
div > div {
padding: 10px;
}
img {
background-color: white;
}
'''
generated_css = ''
for index, image in enumerate(images):
generated_css += f'''
/* ---- CURRENT LAYER: {index} ---- */
#layer{index}[type=radio] {{
position: absolute;
opacity: 0;
width: 0;
height: 0;
}}
#layer{index}[type=radio] + img {{
cursor: pointer;
padding: 5px;
position: absolute;
background-color: white;
}}
/* CHECKED STYLES */
#layer{index}[type=radio]:checked + img {{
z-index: -1000;
}}
'''
middle_boilerplate = '''
#root {
width: fit-content;
/* To adjust the height as well */
height: fit-content;
}
</style>
<body>
<div id="root">
<form method="POST">
<div class='grid'>
'''
generated_recursive_layers = generate_layers(images)
html_postscript = '''
<input style="position: absolute; top: 300px" type="submit">Submit</input>
</form>
</div>
</body>'''
html = html_prelude + generated_css + middle_boilerplate + generated_recursive_layers + html_postscript
return html
# Angles we'll rotate the original by
# when we create n rotations
def calculate_angles(n):
@ -42,6 +124,7 @@ def random_image(dir='images/'):
random_image = random.choice(dir_contents)
return dir + random_image
## lol what does this do???
def resize_dir(size=150, dir='images/'):
for img_file in os.listdir(dir):
img = Image.open(dir + img_file)
@ -52,3 +135,11 @@ def resize_dir(size=150, dir='images/'):
img.thumbnail((size, size),Image.ANTIALIAS)
img.save(dir + img_file)
if __name__ == '__main__':
img_path = random_image(dir='images/')
answer, options = captchafy(img_path)
for i, img_b64 in enumerate(options):
print(img_b64)
im = Image.open(BytesIO(base64.b64decode(img_b64)))
im.save(f'images/image{i}.png')

1
requirements.txt Normal file
View File

@ -0,0 +1 @@
pillow

BIN
static/images/image0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
static/images/image1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
static/images/image2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
static/images/image3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
static/images/image4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
static/images/image5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

112
templates/captcha2play.html Normal file
View File

@ -0,0 +1,112 @@
<style>
.grid {
display: grid;
grid-template-columns: repeat(3, 0fr);
}
div > div {
padding: 10px;
}
img {
background-color: white;
}
/* HIDE RADIO */
#first-layer[type=radio] {
position: absolute;
opacity: 0;
width: 0;
height: 0;
}
/* IMAGE STYLES */
#first-layer[type=radio] + img {
cursor: pointer;
padding: 5px;
position: absolute;
background-color: white;
}
/* CHECKED STYLES */
#first-layer[type=radio]:checked + img {
z-index: -1000;
}
/* SECOND LAYER BEGINS HERE */
/* HIDE RADIO */
#second-layer[type=radio] {
position: absolute;
opacity: 0;
width: 0;
height: 0;
}
/* IMAGE STYLES */
#second-layer[type=radio] + img {
cursor: pointer;
padding: 5px;
position: absolute;
background-color: white;
}
/* CHECKED STYLES */
#second-layer[type=radio]:checked + img {
z-index: -1000;
}
/* THIRD LAYER BEGINS HERE */
/* HIDE RADIO */
#third-layer[type=radio] {
position: absolute;
opacity: 0;
width: 0;
height: 0;
}
/* IMAGE STYLES */
#third-layer[type=radio] + img {
cursor: pointer;
padding: 5px;
position: absolute;
background-color: white;
}
/* CHECKED STYLES */
#third-layer[type=radio]:checked + img {
z-index: -1000;
}
#root {
width: fit-content;
/* To adjust the height as well */
height: fit-content;
}
</style>
<body>
<div id="root">
<form method="POST">
<div class='grid'>
<label>
<input id="first-layer" type="radio" name="captcha" value="0">
<img src="images/image0.png"></img>
<label>
<input id="second-layer" type="radio" name="captcha2" value="1">
<img src="images/image1.png"></img>
<label>
<input id="third-layer" type="radio" name="captcha3" value="2">
<img src="images/image2.png"></img>
</label>
</label>
</label>
</div>
<input style="position: absolute; top: 300px" type="submit">Submit</input>
</form>
</div>
</body>

View File

@ -4,8 +4,8 @@
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="freecaptcha.css">
<title>Tor Dev</title>
<link rel="stylesheet" href="css/freecaptcha.css">
<title>FreeCAPTCHA</title>
</head>
<body>
<div id="root">
@ -28,4 +28,4 @@
</form>
</div>
</body>
</html>
</html>