Merge pull request 'Random passwords during study (fix #120)' (#159) from feature/random-password into main
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #159
This commit is contained in:
commit
9808c2509c
4 changed files with 87 additions and 8 deletions
|
@ -5,6 +5,7 @@ import flask_sqlalchemy
|
|||
import flask_praetorian
|
||||
import flask_cors
|
||||
import sys
|
||||
from password_util import get_random_password
|
||||
|
||||
db = flask_sqlalchemy.SQLAlchemy()
|
||||
guard = flask_praetorian.Praetorian()
|
||||
|
@ -132,6 +133,14 @@ def protected():
|
|||
return {'message': f'protected endpoint (allowed user {flask_praetorian.current_user().username})'}
|
||||
|
||||
|
||||
@app.route('/api/protected/rcv_pw', methods=['GET'])
|
||||
# @flask_praetorian.auth_required
|
||||
def get_password():
|
||||
pw = get_random_password()
|
||||
ret = {'password': pw}
|
||||
return ret, 200
|
||||
|
||||
|
||||
@app.route('/api/register', methods=['POST'])
|
||||
def register():
|
||||
req = flask.request.get_json(force=True)
|
||||
|
@ -239,8 +248,6 @@ def survey():
|
|||
return ret, 400
|
||||
|
||||
|
||||
|
||||
|
||||
# Run the example
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=debug, host=host, port=port)
|
||||
|
|
60
backend/src/password_util.py
Normal file
60
backend/src/password_util.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
from random import seed
|
||||
from random import randint
|
||||
import time
|
||||
|
||||
seed(int(time.time()))
|
||||
|
||||
|
||||
def get_random_value(list_length):
|
||||
random_select = randint(0, list_length)
|
||||
return random_select
|
||||
|
||||
|
||||
def get_random_password():
|
||||
|
||||
first_part = [
|
||||
"Der Vogel",
|
||||
"Die Ameise",
|
||||
"Die Biene",
|
||||
"Ein Mensch",
|
||||
"Jemand",
|
||||
"Der Hund",
|
||||
"Der Kater",
|
||||
]
|
||||
|
||||
second_part = [
|
||||
"frisst",
|
||||
"küsst",
|
||||
"begrüsst",
|
||||
"besucht",
|
||||
"beeinflusst",
|
||||
"isst",
|
||||
"findet",
|
||||
"vergisst",
|
||||
]
|
||||
|
||||
third_part = [
|
||||
"den Vogel",
|
||||
"die Mücke",
|
||||
"den Adler",
|
||||
"den Apfel",
|
||||
"die Birne",
|
||||
"die Biene",
|
||||
"eine Gurke",
|
||||
]
|
||||
|
||||
forth_part = [
|
||||
"auf der Terasse.",
|
||||
"auf der Wiese.",
|
||||
"im Garten.",
|
||||
"in der Kühltruhe.",
|
||||
"auf dem Balkon.",
|
||||
]
|
||||
|
||||
password = ""
|
||||
password += str(first_part[get_random_value(len(first_part)-1)])
|
||||
password += " " + str(second_part[get_random_value(len(second_part)-1)])
|
||||
password += " " + str(third_part[get_random_value(len(third_part)-1)])
|
||||
password += " " + str(forth_part[get_random_value(len(forth_part)-1)])
|
||||
|
||||
return password
|
|
@ -77,3 +77,7 @@ h1 {
|
|||
.bildnachweise {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
|
||||
.generated-password {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React from "react";
|
||||
import React, { useEffect, useState } from "react";
|
||||
import "../../App.css";
|
||||
import Footer from "../../Footer";
|
||||
import InputField from "../InputField";
|
||||
|
@ -16,6 +16,8 @@ export default function BehaviorNormal() {
|
|||
password = tmp_password;
|
||||
};
|
||||
|
||||
const [genPassword, setGenPassword] = useState("")
|
||||
|
||||
let logger = new Logger({
|
||||
//inputs: ["cursor", "wheel", "keyboard", "touch"],
|
||||
inputs: ["keyboard"],
|
||||
|
@ -35,24 +37,20 @@ export default function BehaviorNormal() {
|
|||
};
|
||||
|
||||
const handlePasswordChange = (e) => {
|
||||
console.log("handlePasswordChange");
|
||||
setPassword(e.target.value);
|
||||
};
|
||||
|
||||
const handleUsernameChange = (e) => {
|
||||
console.log("handleUsernamechange");
|
||||
setUsername(e.target.value);
|
||||
};
|
||||
|
||||
const handleOnCopyEvent = (e) => {
|
||||
e.preventDefault();
|
||||
console.log("copy not allowed");
|
||||
return false;
|
||||
};
|
||||
|
||||
const handleOnPasteEvent = (e) => {
|
||||
e.preventDefault();
|
||||
console.log("paste not allowed");
|
||||
return false;
|
||||
};
|
||||
|
||||
|
@ -80,6 +78,16 @@ export default function BehaviorNormal() {
|
|||
});
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
fetch("/api/protected/rcv_pw", {
|
||||
method: "get",
|
||||
}).then((response) => {
|
||||
response.json().then((resp) => {
|
||||
setGenPassword(resp.password)
|
||||
})
|
||||
});
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="sitePage">
|
||||
|
@ -97,7 +105,7 @@ export default function BehaviorNormal() {
|
|||
normalerweise anmelden.
|
||||
</p>
|
||||
<p onCopy={handleOnCopyEvent}>
|
||||
Das Passwort für diese Situation lautet: abcdefgeh
|
||||
Das Passwort für diese Situation lautet: <span className="generated-password">{genPassword}</span>
|
||||
</p>
|
||||
<form id="behaviorNormal" action="#">
|
||||
<InputField
|
||||
|
|
Loading…
Reference in a new issue