parent
e536afb33a
commit
33a7e1bd7d
|
@ -1,6 +1,7 @@
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import json
|
import json
|
||||||
|
from flask import jsonify
|
||||||
from smbus import SMBus
|
from smbus import SMBus
|
||||||
from StartUpTest import StartUPTest
|
from StartUpTest import StartUPTest
|
||||||
from TotOnline import TotOnline
|
from TotOnline import TotOnline
|
||||||
|
@ -135,13 +136,15 @@ def analyze_data(num_numbers, bits_per_number, startup):
|
||||||
# Remove any empty strings
|
# Remove any empty strings
|
||||||
hex_numbers = [hex_num for hex_num in hex_numbers if hex_num]
|
hex_numbers = [hex_num for hex_num in hex_numbers if hex_num]
|
||||||
# Create the JSON object with the specified structure
|
# Create the JSON object with the specified structure
|
||||||
data = {'randomNumbers': hex_numbers}
|
#data = {'randomNumbers': hex_numbers}
|
||||||
|
data = hex_numbers
|
||||||
# Delete the temporary files
|
# Delete the temporary files
|
||||||
os.unlink(filename)
|
os.unlink(filename)
|
||||||
os.unlink(binary_filename)
|
os.unlink(binary_filename)
|
||||||
os.unlink(hex_filename)
|
os.unlink(hex_filename)
|
||||||
# Return the JSON object using Flask's jsonify function
|
# Return the JSON object using Flask's jsonify function
|
||||||
return jsonify(data)
|
#return jsonify(data)
|
||||||
|
return json.dumps(data)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
os.unlink(filename)
|
os.unlink(filename)
|
||||||
|
@ -150,7 +153,9 @@ def analyze_data(num_numbers, bits_per_number, startup):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# Teste den Code
|
# Teste den Code
|
||||||
#result = analyze_data(50, 2560, startup=False)
|
|
||||||
#result = analyze_data(8, 8, startup=True)
|
#result = analyze_data(8, 8, startup=True)
|
||||||
#print(result)
|
#print(result)
|
||||||
|
#result = analyze_data(1, 7200000, startup=False)
|
||||||
|
#result = analyze_data(10, 100, startup=False)
|
||||||
|
#print(result)
|
||||||
|
|
||||||
|
|
46
REST/app.py
46
REST/app.py
|
@ -4,29 +4,22 @@ import time
|
||||||
from flask import Flask, request, jsonify, session
|
from flask import Flask, request, jsonify, session
|
||||||
from I2C_Function import analyze_data, read_data
|
from I2C_Function import analyze_data, read_data
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
from flask_session import Session
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config.from_pyfile('config.py')
|
|
||||||
Session(app)
|
|
||||||
CORS(app)
|
CORS(app)
|
||||||
|
|
||||||
initialized = False
|
initialized = False
|
||||||
|
|
||||||
@app.route('/trng/randomNum/init', methods=['GET'])
|
@app.route('/trng/randomNum/init', methods=['GET'])
|
||||||
def initialize_generator():
|
def initialize_generator():
|
||||||
#quantity = 1
|
|
||||||
#bits = 1
|
|
||||||
#startup = True # Boolean-Wert für die Initialisierung
|
|
||||||
global initialized # Zugriff auf die globale Variable
|
global initialized # Zugriff auf die globale Variable
|
||||||
|
|
||||||
#result = analyze_data(int(quantity), int(bits), startup=true)
|
#parameter 1 und 2 sind default values für Tests
|
||||||
result = analyze_data(int(1), int(1), startup=True)
|
result = analyze_data(int(1), int(1), startup=True)
|
||||||
#session['initialized'] = True
|
|
||||||
|
|
||||||
if result is True:
|
if result is True:
|
||||||
initialized = True
|
initialized = True
|
||||||
return jsonify({'error': 'successful operation; random number generator is ready and random numbers can be requested'}), 200
|
return jsonify({'message': 'successful operation; random number generator is ready and random numbers can be requested'}), 200
|
||||||
else:
|
else:
|
||||||
return jsonify({'error': 'Unable to initialize the random number generator within a timeout of 60 seconds.'}), 555
|
return jsonify({'error': 'Unable to initialize the random number generator within a timeout of 60 seconds.'}), 555
|
||||||
|
|
||||||
|
@ -45,20 +38,15 @@ def get_random_numbers():
|
||||||
|
|
||||||
# Überprüfe den Initialisierungsstatus
|
# Überprüfe den Initialisierungsstatus
|
||||||
if not initialized:
|
if not initialized:
|
||||||
return jsonify({'error': 'system not ready; try init'}), 432
|
return jsonify({'error': 'system not ready; try init'}), 432
|
||||||
|
|
||||||
#if 'initialized' not in session or not session['initialized']:
|
random_numbers = analyze_data(int(quantity), int(bits), startup=False)
|
||||||
#return jsonify({'error': 'system not ready; try init'}), 432
|
|
||||||
|
if random_numbers is False:
|
||||||
#if 'initialized' not in session or not session['initialized', 'false']:
|
|
||||||
#return jsonify({'error': 'system not ready; try init'}), 432
|
|
||||||
|
|
||||||
filename = analyze_data(int(quantity), int(bits), startup=False)
|
|
||||||
|
|
||||||
if filename is False:
|
|
||||||
return jsonify({'error': 'Unable to generate random numbers.'}), 500
|
return jsonify({'error': 'Unable to generate random numbers.'}), 500
|
||||||
if filename:
|
if random_numbers:
|
||||||
return filename, 200
|
data = {'randomNumbers': random_numbers} # Erstellen des Datenobjekts mit dem JSON-String
|
||||||
|
return jsonify(data), 200
|
||||||
else:
|
else:
|
||||||
return jsonify({'error': 'Unable to generate random numbers.'}), 500
|
return jsonify({'error': 'Unable to generate random numbers.'}), 500
|
||||||
|
|
||||||
|
@ -67,20 +55,22 @@ def shutdown_generator():
|
||||||
global initialized # Zugriff auf die globale Variable
|
global initialized # Zugriff auf die globale Variable
|
||||||
|
|
||||||
initialized = False # Setze den Initialisierungsstatus zurück
|
initialized = False # Setze den Initialisierungsstatus zurück
|
||||||
#session['initialized'] = False
|
|
||||||
|
|
||||||
# Beispielantwort
|
# Beispielantwort
|
||||||
return jsonify({'message': 'Generator shutdown successfully.'}), 200
|
return jsonify({'message': "successful operation; random number generator has been set to 'standby mode'"}), 200
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# Pfade zu den SSL-Zertifikat- und Schlüsseldateien
|
|
||||||
#cert_path = '/etc/nginx/ssl/server.crt'
|
# Pfade zu den SSL-Zertifikat- und Schlüsseldateien
|
||||||
#key_path = '/etc/nginx/ssl/server.key'
|
|
||||||
cert_path = '/etc/nginx/ssl/cert-gmtrom.pem'
|
cert_path = '/etc/nginx/ssl/cert-gmtrom.pem'
|
||||||
key_path = '/etc/nginx/ssl/cert-gmtrom-key.pem'
|
key_path = '/etc/nginx/ssl/cert-gmtrom-key.pem'
|
||||||
|
|
||||||
|
#alte Zertifikate self signed
|
||||||
|
#cert_path = '/etc/nginx/ssl/server.crt'
|
||||||
|
#key_path = '/etc/nginx/ssl/server.key'
|
||||||
|
|
||||||
# Starte die Flask-Anwendung mit SSL-Konfiguration
|
# Starte die Flask-Anwendung mit SSL-Konfiguration
|
||||||
#app.run(host='172.16.78.57', port=5000, ssl_context=(cert_path, key_path))
|
|
||||||
app.run(host='0.0.0.0', ssl_context=(cert_path, key_path))
|
app.run(host='0.0.0.0', ssl_context=(cert_path, key_path))
|
||||||
|
#app.run(host='172.16.78.57', port=5000, ssl_context=(cert_path, key_path))
|
||||||
#app.run(host='0.0.0.0', ssl_context=adhoc)
|
#app.run(host='0.0.0.0', ssl_context=adhoc)
|
||||||
#app.run(ssl_context=(cert_path, key_path))
|
#app.run(ssl_context=(cert_path, key_path))
|
|
@ -0,0 +1,14 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Flask App Service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/bin/python /var/www/html/app.py
|
||||||
|
WorkingDirectory=/var/www/html
|
||||||
|
StandardOutput=syslog
|
||||||
|
StandardError=syslog
|
||||||
|
Restart=always
|
||||||
|
User=adminadmin
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
168
REST/index.html
168
REST/index.html
|
@ -3,7 +3,7 @@
|
||||||
<head>
|
<head>
|
||||||
<title>GMTROM - True Random Number Generator</title>
|
<title>GMTROM - True Random Number Generator</title>
|
||||||
<link rel="stylesheet" type="text/css" href="style.css">
|
<link rel="stylesheet" type="text/css" href="style.css">
|
||||||
<link rel="icon" type="image/png" href="logomiddle.png">
|
<link rel="icon" type="image/png href="logomiddle.png">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<img src="logo.png" alt="Logo" class="logo">
|
<img src="logo.png" alt="Logo" class="logo">
|
||||||
|
@ -14,69 +14,141 @@
|
||||||
<input type="number" id="quantity" name="quantity"><br><br>
|
<input type="number" id="quantity" name="quantity"><br><br>
|
||||||
<label for="bits">Number of Bits per Random Number:</label>
|
<label for="bits">Number of Bits per Random Number:</label>
|
||||||
<input type="number" id="bits" name="bits"><br><br>
|
<input type="number" id="bits" name="bits"><br><br>
|
||||||
<input type="submit" value="Generate" id="generateButton">
|
<input type="button" value="Generate" id="generateButton">
|
||||||
<input type="submit" value="Shutdown" id="shutdownButton">
|
<input type="button" value="Shutdown" id="shutdownButton">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div id="status"></div>
|
<div id="status"></div>
|
||||||
<div id="result"></div>
|
<div id="result"></div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
document.getElementById('initButton').addEventListener('click', function() {
|
document.getElementById('initButton').addEventListener('click', function() {
|
||||||
fetch('https://172.16.78.57:5000/trng/randomNum/init')
|
fetch('https://172.16.78.57:5000/trng/randomNum/init')
|
||||||
.then(response => {
|
.then(response => {
|
||||||
document.getElementById('status').innerText = 'Status: ' + response.status;
|
document.getElementById('status').innerText = 'Status: ' + response.status;
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
console.log('Initialisierung erfolgreich');
|
document.getElementById('result').innerText = 'Successful operation; random number generator has been set to "standby mode".';
|
||||||
} else {
|
console.log('Initialisierung erfolgreich');
|
||||||
console.log('Fehler beim Initialisieren');
|
} else {
|
||||||
}
|
console.log('Fehler beim Initialisieren');
|
||||||
})
|
}
|
||||||
.catch(error => {
|
})
|
||||||
console.error('Fehler beim Initialisieren:', error);
|
.catch(error => {
|
||||||
});
|
console.error('Fehler beim Initialisieren:', error);
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
document.getElementById('generateButton').addEventListener('click', function(event) {
|
document.getElementById('generateButton').addEventListener('click', function(event) {
|
||||||
event.preventDefault(); // Verhindert das Absenden des Formulars
|
var quantity = document.getElementById('quantity').value;
|
||||||
|
var bits = document.getElementById('bits').value;
|
||||||
|
|
||||||
var quantity = document.getElementById('quantity').value;
|
var url = 'https://172.16.78.57:5000/trng/randomNum/getRandom';
|
||||||
var bits = document.getElementById('bits').value;
|
if (quantity && bits) {
|
||||||
|
|
||||||
var url = 'https://172.16.78.57:5000/trng/randomNum/getRandom';
|
|
||||||
if (quantity && bits) {
|
|
||||||
url += '?quantity=' + quantity + '&numBits=' + bits;
|
url += '?quantity=' + quantity + '&numBits=' + bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch(url)
|
fetch(url)
|
||||||
.then(response => {
|
.then(response => {
|
||||||
document.getElementById('status').innerText = 'Status: ' + response.status;
|
document.getElementById('status').innerText = 'Status: ' + response.status;
|
||||||
return response.json();
|
return response.json();
|
||||||
})
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
var resultDiv = document.getElementById('result');
|
var resultDiv = document.getElementById('result');
|
||||||
var hexNumbers = JSON.parse(data.randomNumbers);
|
resultDiv.innerHTML = ''; // Clear previous results
|
||||||
resultDiv.innerText = hexNumbers.join(', ');
|
|
||||||
|
var table = document.createElement('table');
|
||||||
|
table.classList.add('table');
|
||||||
|
var thead = document.createElement('thead');
|
||||||
|
var tbody = document.createElement('tbody');
|
||||||
|
var trHead = document.createElement('tr');
|
||||||
|
var thNr = document.createElement('th');
|
||||||
|
var thCopy = document.createElement('th');
|
||||||
|
var thRandom = document.createElement('th');
|
||||||
|
var copyAllButton = document.createElement('button');
|
||||||
|
|
||||||
|
thNr.textContent = 'ID';
|
||||||
|
thCopy.textContent = ' ';
|
||||||
|
thRandom.textContent = 'Random Number';
|
||||||
|
|
||||||
|
trHead.appendChild(thNr);
|
||||||
|
trHead.appendChild(thCopy);
|
||||||
|
trHead.appendChild(thRandom);
|
||||||
|
thead.appendChild(trHead);
|
||||||
|
table.appendChild(thead);
|
||||||
|
|
||||||
|
var hexNumbers = JSON.parse(data.randomNumbers);
|
||||||
|
for (var i = 0; i < hexNumbers.length; i++) {
|
||||||
|
var tr = document.createElement('tr');
|
||||||
|
var tdNr = document.createElement('td');
|
||||||
|
var tdCopy = document.createElement('td');
|
||||||
|
var tdRandom = document.createElement('td');
|
||||||
|
var copyButton = document.createElement('button');
|
||||||
|
|
||||||
|
tdNr.textContent = (i + 1).toString();
|
||||||
|
tdRandom.textContent = hexNumbers[i];
|
||||||
|
copyButton.textContent = 'Copy';
|
||||||
|
copyButton.classList.add('copy-button');
|
||||||
|
|
||||||
|
copyButton.addEventListener('click', function() {
|
||||||
|
copyToClipboard(this.parentElement.nextElementSibling.textContent);
|
||||||
|
});
|
||||||
|
|
||||||
|
tdCopy.appendChild(copyButton);
|
||||||
|
tr.appendChild(tdNr);
|
||||||
|
tr.appendChild(tdCopy);
|
||||||
|
tr.appendChild(tdRandom);
|
||||||
|
tbody.appendChild(tr);
|
||||||
|
}
|
||||||
|
|
||||||
|
table.appendChild(tbody);
|
||||||
|
resultDiv.appendChild(table);
|
||||||
|
|
||||||
|
copyAllButton.textContent = 'Copy all';
|
||||||
|
copyAllButton.classList.add('copy-button');
|
||||||
|
|
||||||
|
copyAllButton.addEventListener('click', function() {
|
||||||
|
var allHexNumbers = hexNumbers.join(', ');
|
||||||
|
copyToClipboard(allHexNumbers);
|
||||||
|
});
|
||||||
|
|
||||||
|
resultDiv.insertBefore(copyAllButton, table);
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.error('Fehler beim Abrufen der Daten:', error);
|
console.error('Fehler beim Abrufen der Daten:', error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
document.getElementById('shutdownButton').addEventListener('click', function() {
|
function copyToClipboard(text) {
|
||||||
fetch('https://172.16.78.57:5000/trng/randomNum/shutdown')
|
var textArea = document.createElement('textarea');
|
||||||
.then(response => {
|
textArea.value = text;
|
||||||
document.getElementById('status').innerText = 'Status: ' + response.status;
|
document.body.appendChild(textArea);
|
||||||
if (response.status === 200) {
|
textArea.select();
|
||||||
console.log('Shutdown erfolgreich');
|
document.execCommand('copy');
|
||||||
} else {
|
document.body.removeChild(textArea);
|
||||||
console.log('Fehler beim Shutdown');
|
|
||||||
}
|
// Anzeigen eines Popups zur Bestätigung der Kopie
|
||||||
})
|
window.alert('Der Text wurde in die Zwischenablage kopiert!');
|
||||||
.catch(error => {
|
}
|
||||||
console.error('Fehler beim Shutdown:', error);
|
|
||||||
});
|
document.getElementById('shutdownButton').addEventListener('click', function() {
|
||||||
});
|
fetch('https://172.16.78.57:5000/trng/randomNum/shutdown')
|
||||||
|
.then(response => {
|
||||||
|
document.getElementById('status').innerText = 'Status: ' + response.status;
|
||||||
|
if (response.status === 200) {
|
||||||
|
document.getElementById('result').innerText = 'Successful operation; random number generator has been shut down.';
|
||||||
|
console.log('Shutdown erfolgreich');
|
||||||
|
//document.getElementById('quantity').value = ''; // Textfeld "Quantity" zurücksetzen
|
||||||
|
//document.getElementById('bits').value = ''; // Textfeld "Bits" zurücksetzen
|
||||||
|
//document.getElementById('status').innerText = ''; // Element "status" zurücksetzen
|
||||||
|
//document.getElementById('result').innerText = ''; // Element "result" zurücksetzen
|
||||||
|
} else {
|
||||||
|
console.log('Fehler beim Shutdown');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Fehler beim Shutdown:', error);
|
||||||
|
});
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -0,0 +1,15 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Nginx HTTP server
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/sbin/nginx -g "daemon off;"
|
||||||
|
ExecReload=/usr/sbin/nginx -s reload
|
||||||
|
ExecStop=/usr/sbin/nginx -s stop
|
||||||
|
Restart=on-failure
|
||||||
|
KillMode=process
|
||||||
|
PrivateTmp=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
|
Loading…
Reference in New Issue