Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
125 changes: 98 additions & 27 deletions passManager/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
from django.forms import TextInput, Textarea
from django.contrib.admin import SimpleListFilter

from passManager.models import passDb
from passManager.models import passDb, SignedCharField
from django import forms


class LoginsFilter(SimpleListFilter):
Expand Down Expand Up @@ -54,43 +55,94 @@ class ServersFilter(SimpleListFilter):
Make facet of server names number with 3 or more
name ocurrences
"""
# print self.request
title = 'TOP Servers'
parameter_name = 'servers'
# Get all objects
rows = passDb.objects.all()
# Server list
servers = []
for row in rows:
servers.append(row.server)
# Duplicate clean
# servers = set(servers)

# Get tuple with servers and ocurences
lista = {}
for l in set(servers):
numrows = passDb.objects.filter(server=l).count()
if numrows >= 1:
lista[str(l)] = numrows
slist = []

def lookups(self, request, model_admin):

# Import module for order dictionary
from operator import itemgetter
slist = sorted(lista.items(), key=itemgetter(1), reverse=True)
if request.user.is_superuser:

# Generate facets
facet = []
for n in range(0 ,(len(slist))):
facet.append(((slist[n][0]),(slist[n][0]+' ('+str(slist[n][1]))+')'))
# Get all objects
rows = passDb.objects.all()
else:
rows = passDb.objects.filter(uploader = request.user)

def lookups(self, request, model_admin):
return (self.facet)
# Server list
servers = []
for row in rows:
servers.append(row.server)
# Duplicate clean
# servers = set(servers)

# Get tuple with servers and ocurences
lista = {}
for l in set(servers):
numrows = passDb.objects.filter(server=l).count()
if numrows >= 1:
lista[str(l)] = numrows



# Import module for order dictionary
from operator import itemgetter
slist = sorted(lista.items(), key=itemgetter(1), reverse=True)

self.slist = slist

# Generate facets
facet = []
for n in range(0 ,(len(slist))):
facet.append(((slist[n][0]),(slist[n][0]+' ('+str(slist[n][1]))+')'))



return (facet)

def queryset(self, request, queryset):

for n in range(0 ,(len(self.slist))):
val = self.slist[n][0]
if self.value() == val:
return queryset.filter(server=val)

class UploaderFilter(SimpleListFilter):
""" Filter based on uploader. """

title = 'Uploader'
parameter_name = 'uploader'


def lookups(self, request, model_admin):

facet = []
if request.user.is_superuser:
rows = passDb.objects.values('uploader__id','uploader__username').distinct()
for row in rows:
facet.append((row['uploader__id'],row['uploader__username']))

return (facet)

def queryset(self, request, queryset):

if self.value() is None:
return queryset.all()
else:
return queryset.filter(uploader__id = self.value())


class PassManagerForm(forms.ModelForm):
model = passDb
class Meta:

widgets = { 'password': forms.TextInput(attrs={'id': 'field_password'}), }



class PassManagerAdmin(admin.ModelAdmin):
form = PassManagerForm
class Media:
js = ("jquery-1.7.1.min.js", "jquery-ui-1.8.18.custom.min.js", "functions.js",)
css = {
Expand All @@ -99,7 +151,6 @@ class Media:

formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size':'40'})},
#models.TextField: {'widget': Textarea(attrs={'rows':10, 'cols':60})},
}

ordering = ['creation_date']
Expand All @@ -118,13 +169,33 @@ class Media:
"uploader"
]

list_filter = (LoginsFilter, ServersFilter, 'uploader','creation_date')
list_filter = (LoginsFilter, ServersFilter, UploaderFilter,'creation_date')


fieldsets = [
(None, {'fields': ['name',('login','password'),'server','notes']}),
]

search_fields = ['name','login','server','notes']


def queryset(self, request):
qs = super(PassManagerAdmin, self).queryset(request)
if request.user.is_superuser:
return qs
else:
return qs.filter(uploader = request.user)


def has_change_permission(self, request, obj=None):
if not obj:
return True # So they can see the change list page
if request.user.is_superuser or obj.uploader == request.user:
return True
else:
return False

has_delete_permission = has_change_permission

def save_model(self, request, obj, form, change):
#obj.password = passEncr('encrypt', obj.password)
obj.uploader = request.user
Expand Down
34 changes: 33 additions & 1 deletion passManager/static/functions.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ $(function() {
});

(function($) {
$(document).ready(function(){
$(document).ready(function(){

var windowWidth = 760
var windowHeight = 430
var centerWidth = (window.screen.width - windowWidth) / 2;
Expand All @@ -32,6 +33,11 @@ $(function() {
event.preventDefault();

});

$( "#field_password" ).after( '<span style="margin-left:5px;" id="generate"><a href="#"><img src="/static/reload-16.png" /></a></span>' );
$('#generate').click(loadGeneratedPassword);


});
})(django.jQuery);

Expand All @@ -41,4 +47,30 @@ function cambiar(id, texto) {
document.getElementById(id).innerHTML = texto.replace(/\&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
document.getElementById(id).style.color = "black";
}
}

function loadGeneratedPassword() {
var length = 8;
$('#field_password').val(password(length,true));
}

function password(length, special) {
var iteration = 0;
var password = "";
var randomNumber;
if(special == undefined){
var special = false;
}
while(iteration < length){
randomNumber = (Math.floor((Math.random() * 100)) % 94) + 33;
if(!special){
if ((randomNumber >=33) && (randomNumber <=47)) { continue; }
if ((randomNumber >=58) && (randomNumber <=64)) { continue; }
if ((randomNumber >=91) && (randomNumber <=96)) { continue; }
if ((randomNumber >=123) && (randomNumber <=126)) { continue; }
}
iteration++;
password += String.fromCharCode(randomNumber);
}
return password;
}
Binary file added passManager/static/reload-16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.