Roberto Berto 4 vuotta sitten
vanhempi
commit
acd450aafa

+ 1 - 1
vycontrol/accounts/templates/accounts/profile.html

@@ -27,7 +27,7 @@
     </tr>
 </table>
 
-<h2>Change password</h2>
+<h2>Change password (optional)</h2>
 <table width="100%" border="1">
     <tr>
         <th width="50%">password</th>

+ 0 - 1
vycontrol/accounts/templates/accounts/start.html

@@ -7,7 +7,6 @@
 {% block creditsactive %}{{ vycontrol_credits }}{% endblock %}
 
 {% block debug %}
-{{ users_admin }}
 {% endblock %}
 
 {% block content %}

+ 5 - 4
vycontrol/accounts/views.py

@@ -8,8 +8,8 @@ from django.views.generic.base import TemplateView
 from django.conf import settings
 from django.urls import reverse
 
-
 from django.contrib.auth.models import User
+from django.contrib.auth.models import Group
 from config.models import Instance
 
 import vyos
@@ -19,9 +19,10 @@ import vmsg
 import viewinfo
 import validators
 from perms import is_authenticated
-from libs.vycontrol_validators import *
-
 
+from libs.vycontrol_validators import *
+from django.template.defaultfilters import register
+from libs.vycontrol_filters import get_item
 
 def index(request):
     users_admin = User.objects.filter(
@@ -39,13 +40,13 @@ def index(request):
             user = User.objects.create_superuser(username=request.POST['username'], email='', password=request.POST['password'])
             user.save()
             return redirect('%s?next=%s' % (reverse('registration-login'), '/config/instance-add'))
+
     context = { 
         'users_admin': users_admin.all(),
     }   
     return render(request, 'accounts/start.html', context)
 
 
-
 @is_authenticated    
 def profile(request):
     vinfo = viewinfo.prepare(request)

+ 49 - 0
vycontrol/config/templates/config/user_edit.html

@@ -0,0 +1,49 @@
+{% extends "base.html" %}
+
+{% block header_title %}User edit{% endblock %}
+{% block section_title %}User edit{% endblock %}
+{% block username %}{{ username }}{% endblock %}
+{% block debugactive %}{{ debug }}{% endblock %}
+{% block creditsactive %}{{ vycontrol_credits }}{% endblock %}
+
+{% block debug %}
+{{ user }}
+{% endblock %}
+
+
+{% block content %}
+
+
+<form method="post" action="{% url 'config:user-edit' user %}">
+{% csrf_token %}
+<table width="100%" border="1">
+    <tr>
+        <th width="50%">username</th>
+        <td>{{ user }}</td>
+    </tr>
+    <tr>
+        <th width="50%">email</th>
+        <td><input type="text" name="email" id="email" value="{{ user.email }}"></td>
+    </tr>
+</table>
+
+<h2>Change password (optional)</h2>
+<table width="100%" border="1">
+    <tr>
+        <th width="50%">password</th>
+        <td><input type="password" name="pass1" id="pass1"></td>
+    </tr>
+    <tr>
+        <th width="50%">confirm</th>
+        <td><input type="password" name="pass2" id="pass2"></td>
+    </tr>
+</table>
+
+<input type="submit" value="update profile">
+
+    
+</form>
+
+
+
+{% endblock %}

+ 6 - 0
vycontrol/config/templates/config/users_list.html

@@ -34,13 +34,16 @@
     <tr>
         <th>name</th>
         <th>email</th>
+        <th>status</th>
         <th>group</th>
+        <th>actions</th>
     </tr>
 
     {% for user in users %}
     <tr>
         <td>{{ user }}</td>
         <td>{{ user.email }}</td>
+        <td>{% if user.is_active == True %}active{% else %}inactive{% endif %}</td>
         <td><select id="group-{{ user }}" name="group-{{ user }}"><option value="--remove--">None</option>
             {% if groups != False %}
                 {% for fkey in groups %}    
@@ -48,6 +51,9 @@
                 {% endfor %}
             {% endif %}
         </select></td>
+        <td><a href="{% url 'config:user-edit' user %}">edit</a> | {% if user.is_active == True %}<a href="{% url 'config:user-inactivate' user %}">inactivate</a>{% else %}<a href="{% url 'config:user-activate' user %}">activate</a>{% endif %}</td>
+
+
     </tr>
 
     {% endfor %}

+ 3 - 0
vycontrol/config/urls.py

@@ -8,6 +8,9 @@ app_name = 'config'
 urlpatterns = [
     path('instance-change/<str:hostname>', views.instance_change, name='instance-change'),
     path('users-list', views.users_list, name='users-list'),
+    path('user-inactivate/<str:username>', views.user_inactivate, name='user-inactivate'),
+    path('user-activate/<str:username>', views.user_activate, name='user-activate'),
+    path('user-edit/<str:username>', views.user_edit, name='user-edit'),
     path('groups-list', views.groups_list, name='groups-list'),
     path('group-add', views.group_add, name='group-add'),
     path('user-add', views.user_add, name='user-add'),

+ 54 - 0
vycontrol/config/views.py

@@ -236,6 +236,60 @@ def user_add(request):
 
     return render(request, 'config/user_add.html', context) 
 
+@perms.is_superuser
+@is_authenticated    
+def user_inactivate(request, username):
+    vinfo = viewinfo.prepare(request)
+    if validator_letters_numbers(username):
+        user = User.objects.get(username=username)
+        user.is_active = False
+        user.save()
+
+    return redirect('config:users-list')
+
+@perms.is_superuser
+@is_authenticated    
+def user_activate(request, username):
+    vinfo = viewinfo.prepare(request)
+    if validator_letters_numbers(username):
+        user = User.objects.get(username=username)
+        user.is_active = True
+        user.save()
+
+    return redirect('config:users-list') 
+
+    
+@perms.is_superuser
+@is_authenticated    
+def user_edit(request, username):
+    vinfo = viewinfo.prepare(request)
+    if validator_letters_numbers(username):
+        user = User.objects.get(username=username)
+        if request.POST.get('email', None) != None:
+            email_new = request.POST.get('email').strip()
+
+            if validators.email(email_new):
+                user.email = email_new
+                user.save()
+    
+        if request.POST.get('pass1', None) != None and request.POST.get('pass2', None) != None:
+            if request.POST.get('pass1') == request.POST.get('pass2'):
+                pass_new = request.POST.get('pass1').strip()
+                if pass_new != '':
+                    user.set_password(pass_new)
+                    user.save()
+    else:
+        return redirect('config:users-list')
+
+    context = viewinfo.context(vinfo)    
+    localcontext = {
+        'user':             user
+    }
+    context.update(localcontext)
+
+    return render(request, 'config/user_edit.html', context) 
+
+
 @is_authenticated
 def instance_conntry(request, hostname):
     vinfo = viewinfo.prepare(request)

+ 8 - 3
vycontrol/perms.py

@@ -19,9 +19,14 @@ def is_authenticated(func):
         if not request.user.is_authenticated:
            return redirect('%s?next=%s' % (reverse('accounts-login'), request.path))
 
-        hostname_default = vyos.get_hostname_prefered(request)
-
-
+        # check if username is active
+        user = User.objects.filter(
+            username=request.user,
+            is_active=True
+        )
+        if user.count() != 1:
+            return redirect('%s?next=%s' % (reverse('accounts-login'), request.path))
+        
         value = func(*args, **kwargs)
         return value
     return wrapper_perm

+ 0 - 4
vycontrol/s/main.css

@@ -152,7 +152,6 @@ input[type=submit] {
   border-top: 1px dotted #000000;
 }
 
-
 .alert-nok {
   background-color: rgb(184, 78, 78); margin: 20px 0; padding: 2px 10px;
 }
@@ -160,8 +159,6 @@ input[type=submit] {
   background-color: #EACD65; margin: 20px 0;  padding: 2px 10px;
 }
 
-
-
 #menu-username {
   margin-right: 10px;
   color:#101088 ;
@@ -171,7 +168,6 @@ input[type=submit] {
   font-size: 10x;
   position: relative;
   top: 5px;
-  left: 2px;
 }
 
 .label_for_h3 {