set master pwd al primo lancio - ruoli
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class WalletApiConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'wallet_api'
|
||||
|
||||
def ready(self):
|
||||
import wallet_api.signals
|
||||
|
||||
10
wallet_api/signals.py
Normal file
10
wallet_api/signals.py
Normal file
@@ -0,0 +1,10 @@
|
||||
from django.db.models.signals import post_migrate
|
||||
from django.dispatch import receiver
|
||||
from dotenv import dotenv_values
|
||||
from .utils import authenticate
|
||||
|
||||
@receiver(post_migrate)
|
||||
def init_master_passwored(sender, **kwargs):
|
||||
if sender.name == 'wallet_api':
|
||||
config = dotenv_values(".env")
|
||||
authenticate(config['MASTER_PASSWORD'])
|
||||
@@ -3,7 +3,6 @@ from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.home_view, name="home"),
|
||||
path('add/', views.add_password_api, name='add_user'),
|
||||
path('get/', views.get_password_api, name='get_password'),
|
||||
path('list/', views.list_sites_api, name='list_sites'),
|
||||
path('publish', views.publish_message, name='publish'),
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.contrib import messages
|
||||
from django.http import JsonResponse, HttpResponse
|
||||
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.contrib.auth.decorators import login_required, permission_required
|
||||
|
||||
import json
|
||||
import paho.mqtt.client as mqtt
|
||||
@@ -16,10 +16,11 @@ from .mqtt_service import MosquittoDynamicSecurity
|
||||
|
||||
|
||||
config = dotenv_values(".env")
|
||||
authenticate(config['MASTER_PASSWORD'])
|
||||
# authenticate(config['MASTER_PASSWORD'])
|
||||
|
||||
def home_view(request):
|
||||
return render(request, 'home.html')
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
#return render(request, 'home.html')
|
||||
|
||||
@csrf_exempt
|
||||
def publish_message(request):
|
||||
@@ -33,26 +34,82 @@ def publish_message(request):
|
||||
protocol=mqtt.MQTTv5)
|
||||
return JsonResponse({'request_data': request_data})
|
||||
|
||||
@login_required
|
||||
def list_users(request):
|
||||
users = PasswordEntry.objects.all()
|
||||
return render(request, 'wallet_api/list_users.html', {'users': users})
|
||||
return render(request, 'wallet_api/list_users.html', {'users': users, 'ase_adm_group': request.user.groups.filter(name='ase_admin').exists()})
|
||||
|
||||
@login_required
|
||||
def create_user(request):
|
||||
if request.method == 'POST':
|
||||
site = request.POST.get('site')
|
||||
username = request.POST.get('username')
|
||||
client_id = request.POST.get('clientId')
|
||||
topic = request.POST.get('topic')
|
||||
password = request.POST.get('password')
|
||||
if request.user.groups.filter(name='ase_admin').exists():
|
||||
if request.method == 'POST':
|
||||
site = request.POST.get('site')
|
||||
username = request.POST.get('username')
|
||||
client_id = request.POST.get('clientId')
|
||||
topic = request.POST.get('topic')
|
||||
password = request.POST.get('password')
|
||||
|
||||
# Comando per creare un utente
|
||||
command = {
|
||||
"commands":
|
||||
[
|
||||
{
|
||||
"command": "createClient",
|
||||
"username": username,
|
||||
"password": password
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Invia il comando a Mosquitto
|
||||
mqtt_service = MosquittoDynamicSecurity()
|
||||
response = mqtt_service.send_command(command)
|
||||
if "error" not in response["responses"][0]:
|
||||
|
||||
key = derive_key(config['MASTER_PASSWORD'])
|
||||
encrypted_password = encrypt_password(password, key)
|
||||
|
||||
PasswordEntry.objects.create(
|
||||
site=site,
|
||||
username=username,
|
||||
password=encrypted_password,
|
||||
client_id=client_id,
|
||||
topic=topic,
|
||||
status='enabled'
|
||||
)
|
||||
|
||||
messages.success(request, 'Utente creato con successo!') # Messaggio di successo
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
else:
|
||||
messages.warning(request, f'Errore durante la creazione dell\'utente: {response["responses"][0]["error"]}') # Messaggio di errore
|
||||
return render(request, 'wallet_api/create_user.html', {'response': response}) # Rimani sulla stessa vista
|
||||
|
||||
# Se la richiesta non è POST, mostra il form di creazione utente
|
||||
return render(request, 'wallet_api/create_user.html')
|
||||
else:
|
||||
messages.success(request, 'Non hai i permessi per creare utenti MQTT!') # Messaggio di successo
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
|
||||
@login_required
|
||||
def edit_user(request, slug):
|
||||
if request.user.groups.filter(name='ase_admin').exists():
|
||||
user = PasswordEntry.objects.filter(slug=slug).first()
|
||||
return render(request, 'wallet_api/edit_user.html', {'user': user})
|
||||
else:
|
||||
messages.success(request, 'Non hai i permessi per creare utenti MQTT!') # Messaggio di successo
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
|
||||
@login_required
|
||||
def disable_user(request, slug):
|
||||
if request.user.groups.filter(name='ase_admin').exists():
|
||||
user = PasswordEntry.objects.filter(slug=slug).values('id','username')
|
||||
# Comando per creare un utente
|
||||
command = {
|
||||
"commands":
|
||||
[
|
||||
{
|
||||
"command": "createClient",
|
||||
"username": username,
|
||||
"password": password
|
||||
"command": "disableClient",
|
||||
"username": user.first()["username"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -62,90 +119,49 @@ def create_user(request):
|
||||
response = mqtt_service.send_command(command)
|
||||
if "error" not in response["responses"][0]:
|
||||
|
||||
key = derive_key(config['MASTER_PASSWORD'])
|
||||
encrypted_password = encrypt_password(password, key)
|
||||
PasswordEntry.objects.filter(id=int(user.first()["id"])).update(status='disabled')
|
||||
|
||||
PasswordEntry.objects.create(
|
||||
site=site,
|
||||
username=username,
|
||||
password=encrypted_password,
|
||||
client_id=client_id,
|
||||
topic=topic,
|
||||
status='enabled'
|
||||
)
|
||||
|
||||
messages.success(request, 'Utente creato con successo!') # Messaggio di successo
|
||||
messages.success(request, 'Utente disabilitato con successo!') # Messaggio di successo
|
||||
if request.htmx:
|
||||
return render(request, 'partials/enable_user.html')
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
else:
|
||||
messages.warning(request, f'Errore durante la creazione dell\'utente: {response["responses"][0]["error"]}') # Messaggio di errore
|
||||
return render(request, 'wallet_api/create_user.html', {'response': response}) # Rimani sulla stessa vista
|
||||
|
||||
# Se la richiesta non è POST, mostra il form di creazione utente
|
||||
return render(request, 'wallet_api/create_user.html')
|
||||
|
||||
def edit_user(request, slug):
|
||||
user = PasswordEntry.objects.filter(slug=slug).first()
|
||||
return render(request, 'wallet_api/edit_user.html', {'user': user})
|
||||
|
||||
def disable_user(request, slug):
|
||||
user = PasswordEntry.objects.filter(slug=slug).values('id','username')
|
||||
print(user.first())
|
||||
# Comando per creare un utente
|
||||
command = {
|
||||
"commands":
|
||||
[
|
||||
{
|
||||
"command": "disableClient",
|
||||
"username": user.first()["username"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Invia il comando a Mosquitto
|
||||
mqtt_service = MosquittoDynamicSecurity()
|
||||
response = mqtt_service.send_command(command)
|
||||
if "error" not in response["responses"][0]:
|
||||
|
||||
PasswordEntry.objects.update(
|
||||
status='disabled'
|
||||
)
|
||||
|
||||
messages.success(request, 'Utente disabilitato con successo!') # Messaggio di successo
|
||||
if request.htmx:
|
||||
return render(request, 'partials/enable_user.html')
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
messages.warning(request, f'Errore durante la disabilitazione dell\'utente: {response["responses"][0]["error"]}') # Messaggio di errore
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
else:
|
||||
messages.warning(request, f'Errore durante la disabilitazione dell\'utente: {response["responses"][0]["error"]}') # Messaggio di errore
|
||||
messages.success(request, 'Non hai i permessi per disabilitare utenti MQTT!') # Messaggio di successo
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
|
||||
@login_required
|
||||
def enable_user(request, slug):
|
||||
user = PasswordEntry.objects.filter(slug=slug).values('id','username')
|
||||
print(user.first())
|
||||
# Comando per creare un utente
|
||||
command = {
|
||||
"commands":
|
||||
[
|
||||
{
|
||||
"command": "enableClient",
|
||||
"username": user.first()["username"]
|
||||
}
|
||||
]
|
||||
}
|
||||
if request.user.groups.filter(name='ase_admin').exists():
|
||||
user = PasswordEntry.objects.filter(slug=slug).values('id','username')
|
||||
# Comando per creare un utente
|
||||
command = {
|
||||
"commands":
|
||||
[
|
||||
{
|
||||
"command": "enableClient",
|
||||
"username": user.first()["username"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
# Invia il comando a Mosquitto
|
||||
mqtt_service = MosquittoDynamicSecurity()
|
||||
response = mqtt_service.send_command(command)
|
||||
if "error" not in response["responses"][0]:
|
||||
# Invia il comando a Mosquitto
|
||||
mqtt_service = MosquittoDynamicSecurity()
|
||||
response = mqtt_service.send_command(command)
|
||||
if "error" not in response["responses"][0]:
|
||||
|
||||
PasswordEntry.objects.update(
|
||||
status='enabled'
|
||||
)
|
||||
PasswordEntry.objects.filter(id=int(user.first()["id"])).update(status='enabled')
|
||||
|
||||
messages.success(request, 'Utente abilitato con successo!') # Messaggio di successo
|
||||
messages.success(request, 'Utente abilitato con successo!') # Messaggio di successo
|
||||
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
else:
|
||||
messages.warning(request, f'Errore durante la abilitazione dell\'utente: {response["responses"][0]["error"]}') # Messaggio di errore
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
else:
|
||||
messages.warning(request, f'Errore durante la abilitazione dell\'utente: {response["responses"][0]["error"]}') # Messaggio di errore
|
||||
messages.success(request, 'Non hai i permessi per disabilitare utenti MQTT!') # Messaggio di successo
|
||||
return redirect('list_users') # Reindirizza alla lista degli utenti
|
||||
|
||||
def view_role(request, role):
|
||||
@@ -174,6 +190,7 @@ def get_password_api(request):
|
||||
})
|
||||
except PasswordEntry.DoesNotExist:
|
||||
return JsonResponse({"error": "Sito non trovato"}, status=404)
|
||||
return JsonResponse({"error": "Richiesta non valida"}, status=400)
|
||||
|
||||
@csrf_exempt
|
||||
def list_sites_api(request):
|
||||
@@ -186,29 +203,4 @@ def list_sites_api(request):
|
||||
|
||||
sites = PasswordEntry.objects.values_list('site', flat=True)
|
||||
return JsonResponse({"sites": list(sites)})
|
||||
|
||||
@csrf_exempt
|
||||
def add_password_api(request):
|
||||
if request.method == 'POST':
|
||||
data = json.loads(request.body)
|
||||
master_password = data.get('master_password')
|
||||
site = data.get('site')
|
||||
username = data.get('username')
|
||||
password = data.get('password')
|
||||
client_id = data.get('client_id')
|
||||
topic = data.get('topic')
|
||||
|
||||
if not authenticate(master_password):
|
||||
return JsonResponse({"error": "Master password errata"}, status=403)
|
||||
|
||||
key = derive_key(master_password)
|
||||
encrypted_password = encrypt_password(password, key)
|
||||
|
||||
PasswordEntry.objects.create(
|
||||
site=site,
|
||||
username=username,
|
||||
password=encrypted_password,
|
||||
client_id=client_id,
|
||||
topic=topic
|
||||
)
|
||||
return JsonResponse({"message": "Password aggiunta con successo"})
|
||||
return JsonResponse({"error": "Richiesta non valida"}, status=400)
|
||||
|
||||
Reference in New Issue
Block a user