mirror of https://github.com/CIRCL/lookyloo
new simple capture
parent
9eb14548e3
commit
cafa9c1502
|
@ -1632,6 +1632,30 @@ def capture_web() -> str | Response | WerkzeugResponse:
|
||||||
# render template
|
# render template
|
||||||
return _prepare_capture_template(user_ua=request.headers.get('User-Agent'))
|
return _prepare_capture_template(user_ua=request.headers.get('User-Agent'))
|
||||||
|
|
||||||
|
@app.route('/simple_capture', methods=['GET', 'POST'])
|
||||||
|
def simple_capture() -> str | Response | WerkzeugResponse:
|
||||||
|
if flask_login.current_user.is_authenticated:
|
||||||
|
user = flask_login.current_user.get_id()
|
||||||
|
else:
|
||||||
|
user = src_request_ip(request)
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
|
if not (request.form.get('url') or request.form.get('urls')):
|
||||||
|
flash('Invalid submission: please submit at least a URL.', 'error')
|
||||||
|
return render_template('simple_capture.html')
|
||||||
|
capture_query: CaptureSettings = {}
|
||||||
|
capture_query['url'] = request.form['url']
|
||||||
|
|
||||||
|
perma_uuid = lookyloo.enqueue_capture(capture_query, source='web', user=user,
|
||||||
|
authenticated=flask_login.current_user.is_authenticated)
|
||||||
|
if perma_uuid:
|
||||||
|
flash('Recording is in progress and is reported automatically.', 'success')
|
||||||
|
time.sleep(2)
|
||||||
|
return redirect(url_for('simple_capture'))
|
||||||
|
|
||||||
|
# render template
|
||||||
|
return render_template('simple_capture.html')
|
||||||
|
|
||||||
|
|
||||||
@app.route('/cookies/<string:cookie_name>', methods=['GET'])
|
@app.route('/cookies/<string:cookie_name>', methods=['GET'])
|
||||||
def cookies_name_detail(cookie_name: str) -> str:
|
def cookies_name_detail(cookie_name: str) -> str:
|
||||||
|
|
|
@ -83,6 +83,11 @@ $(document).ready(function () {
|
||||||
<a href="{{ url_for('submit_capture') }}">
|
<a href="{{ url_for('submit_capture') }}">
|
||||||
<button class="new-capture-button btn btn-primary">Submit capture</button>
|
<button class="new-capture-button btn btn-primary">Submit capture</button>
|
||||||
</a>
|
</a>
|
||||||
|
{% if current_user.is_authenticated %}
|
||||||
|
<a href="{{ url_for('simple_capture') }}">
|
||||||
|
<button class="new-capture-button btn btn-primary">Takedown process</button>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
<br><br>
|
<br><br>
|
||||||
{{ render_messages(container=True, dismissible=True) }}
|
{{ render_messages(container=True, dismissible=True) }}
|
||||||
</center>
|
</center>
|
||||||
|
|
|
@ -0,0 +1,127 @@
|
||||||
|
{% extends "main.html" %}
|
||||||
|
{% from 'bootstrap5/utils.html' import render_messages %}
|
||||||
|
{% block title %}Capture{% endblock %}
|
||||||
|
|
||||||
|
{% block card %}
|
||||||
|
<meta property="og:title" content="Lookyloo" />
|
||||||
|
<meta property="og:type" content="website"/>
|
||||||
|
<meta
|
||||||
|
property="og:description"
|
||||||
|
content="Lookyloo captures websites and let you investigate them."
|
||||||
|
/>
|
||||||
|
<meta
|
||||||
|
property="og:image"
|
||||||
|
content="https://{{public_domain}}{{ url_for('static', filename='lookyloo.jpeg') }}"
|
||||||
|
/>
|
||||||
|
<meta
|
||||||
|
property="og:url"
|
||||||
|
content="https://{{public_domain}}"
|
||||||
|
/>
|
||||||
|
<meta name="twitter:card" content="summary_large_image">
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="container">
|
||||||
|
<center>
|
||||||
|
<a href="{{ url_for('index') }}" title="Go back to index">
|
||||||
|
<img src="{{ url_for('static', filename='lookyloo.jpeg') }}"
|
||||||
|
alt="Lookyloo" width="25%">
|
||||||
|
</a>
|
||||||
|
</center>
|
||||||
|
{{ render_messages(container=True, dismissible=True) }}
|
||||||
|
<form role="form" action="{{ url_for('simple_capture') }}" method=post enctype=multipart/form-data>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" type="checkbox" id="listing" name="listing" {% if default_public %}checked="true"{% endif %}>
|
||||||
|
<label for="listing" class="form-check-label">Display results on public page</label>
|
||||||
|
</br>
|
||||||
|
<input class="form-check-input" id="auto_report" type="checkbox" name="auto_report" checked=checked>
|
||||||
|
<label for="auto_report" class="form-check-label">Auto report</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Submission type -->
|
||||||
|
|
||||||
|
<div class="tab-content" id="nav-tabContent">
|
||||||
|
</br>
|
||||||
|
<div class="tab-pane fade show active" id="nav-url" role="tabpanel" aria-labelledby="nav-url-tab">
|
||||||
|
<div class="row input-group mb-3">
|
||||||
|
<label for="singleCaptureField" class="col-sm-1 col-form-label">URL(s):</label>
|
||||||
|
<input type="text" class="form-control col-auto" name="url" id=singleCaptureField
|
||||||
|
placeholder="URL to capture" value="{{predefined_url_to_capture}}" required>
|
||||||
|
|
||||||
|
<textarea class="form-control col-auto d-none" placeholder="URLs to capture, one per line"
|
||||||
|
name="urls" id=multipleCapturesField></textarea>
|
||||||
|
|
||||||
|
<span class="col-sm-2 input-group-text">
|
||||||
|
<div class="form-check">
|
||||||
|
<input class="form-check-input" name="multipleCaptures" id="multipleCaptures" type="checkbox"
|
||||||
|
value="" aria-label="tick to enable multiple captures">
|
||||||
|
<label for="multipleCaptures" class="form-check-label">Multiple captures</label>
|
||||||
|
</div>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<!-- End of Submission type -->
|
||||||
|
|
||||||
|
|
||||||
|
<center>
|
||||||
|
<b>
|
||||||
|
{% if default_public %}
|
||||||
|
By default, the capture is private. If you do not want that, untick the box at the top of the form.
|
||||||
|
{% else %}
|
||||||
|
By default, the capture is private (not visible on the index page). If you want it to be public tick the box at the top of the form.
|
||||||
|
{% endif %}
|
||||||
|
</b>
|
||||||
|
</br>
|
||||||
|
</br>
|
||||||
|
<button type="submit" class="new-capture-button btn btn-primary" id="btn-looking">Start looking!</button>
|
||||||
|
</center>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block scripts %}
|
||||||
|
{{ super() }}
|
||||||
|
<script src='{{ url_for('static', filename='capture.js') }}'
|
||||||
|
integrity="{{get_sri('static', 'capture.js')}}"
|
||||||
|
crossorigin="anonymous"></script>
|
||||||
|
<script>
|
||||||
|
$('#nav-url-tab').on('click', function(e) {
|
||||||
|
document.getElementById("singleCaptureField").required = true;
|
||||||
|
document.getElementById("document").required = false;
|
||||||
|
$("#singleCaptureField").removeClass("d-none");
|
||||||
|
document.getElementById('multipleCaptures').checked = false;
|
||||||
|
$("#multipleCapturesField").addClass("d-none");
|
||||||
|
});
|
||||||
|
$('#nav-doc-tab').on('click', function(e) {
|
||||||
|
document.getElementById("document").required = true;
|
||||||
|
document.getElementById("multipleCapturesField").required = false;
|
||||||
|
document.getElementById("singleCaptureField").required = false;
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
$('#multipleCaptures').on('click', function(e) {
|
||||||
|
if (document.getElementById('multipleCaptures').checked == true) {
|
||||||
|
document.getElementById('singleCaptureField').value = '';
|
||||||
|
$("#singleCaptureField").addClass("d-none");
|
||||||
|
document.getElementById("singleCaptureField").required = false;
|
||||||
|
$("#multipleCapturesField").removeClass("d-none");
|
||||||
|
document.getElementById("multipleCapturesField").required = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
document.getElementById('multipleCapturesField').value = '';
|
||||||
|
$("#singleCaptureField").removeClass("d-none");
|
||||||
|
document.getElementById("singleCaptureField").required = true;
|
||||||
|
$("#multipleCapturesField").addClass("d-none");
|
||||||
|
document.getElementById("multipleCapturesField").required = false;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue