コード例 #1
0
ファイル: models.py プロジェクト: arnike/Wenix
 def groups(self):
     if self.mode["access"] == "global":
         return unique(Groups.objects.all().values_list("groupname", flat=True))
     elif self.mode["access"] == "group":
         return unique(Groups.objects.filter(username=self.username).values_list("groupname", flat=True))
     else:
         return []
コード例 #2
0
ファイル: views.py プロジェクト: arnike/Wenix
def ftp_client(request, mode):
    
    path = urllib.url2pathname(request.POST.get("dir", request.GET.get("dir", "/")))
    action = request.POST.get("action", request.GET.get("action", "show"))
    flag = request.POST.get("flag", request.GET.get("flag", None))
    proftpd = Proftpd(request.user)
    ftp_client = proftpd.path(path)
    
    if not ftp_client.path_is_valid():
        return HttpResponseBadRequest()
    
    """
    The user is making a request which need a form to be filled in.
    """
    if request.method == "GET":
        action = request.GET.get("action", "show")
        if action == "mkdir":
            return render_to_response("proftpd/window_mkdir.django.html")
        elif action == "upload":
            return render_to_response("proftpd/window_upload.django.html")
        elif action == "change_permission":
            if request.user.is_superuser:
                users = Users.objects.all()
                groups = unique(Groups.objects.all().values_list("groupname", flat=True))
            else:
                users = ftp_client.ftp_user.peers()
                groups = ftp_client.ftp_user.groups()
            
            permissions = ftp_client.permissions()
            print permissions["all"]
            return render_to_response("proftpd/window_perm_change.django.html",
                                      {"selected_groups": permissions["group"],
                                       "selected_users": permissions["user"],
                                       "default": permissions["all"][""],
                                       "users": users,
                                       "groups": groups})
        else:
            return render_to_response("proftpd/ftp_client.django.html",
                                      {"content": ftp_client.dir()},
                                      context_instance=RequestContext(request))
    else:# request == "POST"
        if action == "show":
            template = get_template("proftpd/browser.django.html")
            context = Context({"content": ftp_client.dir()})
            return HttpResponse(template.render(context), mimetype="text/html")
        elif action == "info":
            template = get_template("proftpd/info_browser.django.html")
            context = Context({"info": ftp_client.info()})
            return HttpResponse(template.render(context), mimetype="text/html")
        elif action == "change_permission":
            # Getting the permissions given according to the following scheme:
            # {"default": perm1, "user": {user1: perm2, user2: perm3}, "group":
            # {group1: perm4}}
            permissions = request.POST.get("permissions", None)
            if permissions:
                try:
                    data = json.loads(permissions)
                except: # Damn... returng an error
                    return HttpResponse(json.dumps({"ok": 0, "msg": _("Error occurred while serializing permissions")}), mimetype="application/json")
                
                # Setting he new permissions
                ftp_client.set_permissions(data)
                # Updating the config
                if not proftpd.update_config():
                    return HttpResponse(json.dumps({"ok": 0, "msg": _("Error occurred while saving the new configuration")}), mimetype="application/json")
                
                if ftp_client.is_dir:
                    msg = _("The directory's permissions have been changed")
                else:
                    msg = _("The file's permissions have been changed")
                
            return HttpResponse(json.dumps({"ok": 1, "msg": msg}), mimetype="application/json")
        elif action == "delete":
            if flag == "info":
                if ftp_client.is_file:
                    msg = _('Are you sure you want to delete the file "%(name)s"?' % {"name": ftp_client.name})
                else:
                    msg = _('Are you sure you want to delete the directory "%(name)s"? The contents of the directory will also be deleted.' % {"name": ftp_client.name})
            
                return HttpResponse(json.dumps({"confirm": msg}), mimetype="application/json")
            else:
                return HttpResponse(json.dumps(ftp_client.delete()), mimetype="application/json")
        elif action == "mkdir":
            name = request.POST.get("name", "New Folder")
            return HttpResponse(json.dumps(ftp_client.mkdir(name)), mimetype="application/json")
        elif action == "upload":
            response = ftp_client.upload(request.FILES['file'], \
                                         request.META['REMOTE_ADDR'])
            return HttpResponse(response, mimetype='text/html')
        elif action == "download":
            if ftp_client.has_perm("READ", ftp_client.path) and ftp_client.is_file:
                return HttpResponse(json.dumps({"ok": 1, "redir": FTP_FILES_URL % ftp_client.download(request.META['REMOTE_ADDR'])}), mimetype="application/json")
            else:
                return HttpResponse(json.dumps({"ok": 0, "msg": _("Access denied")}), mimetype="application/json")
        else:
            log(3, "proftpd_app - ftp_client", "Strange action '%s'" % action)
            return HttpResponseBadRequest()