blob: 5cf1e4e44f9c95e438415b73b67c4ba81879f41c [file] [log] [blame]
importPackage(Packages.org.apache.cocoon.components.modules.input);
importPackage(Packages.org.apache.cocoon.components.slide);
importPackage(Packages.org.apache.cocoon.components.source.helpers);
importPackage(Packages.org.apache.cocoon.samples.slide);
importPackage(Packages.org.apache.excalibur.source);
var repository = cocoon.getComponent('org.apache.cocoon.components.repository.SourceRepository');
var resolver = cocoon.getComponent(SourceResolver.ROLE);
var global = cocoon.getComponent(InputModule.ROLE + "Selector").select("global");
var namespace = global.getAttribute("namespace",null,null);
var base = global.getAttribute("base",null,null);
var slide = cocoon.getComponent(SlideRepository.ROLE);
var nat = slide.getNamespaceToken(namespace);
var principal;
// ---------------------------------------------- authentication
function protect() {
var path = cocoon.parameters["path"];
if (principal == undefined){
login(path);
}
else {
invoke(path);
}
}
function invoke(path) {
var func = this["protected_" + path];
if (func != undefined) {
func.apply(this);
}
else {
cocoon.sendPage(path,null);
}
}
function login(path) {
cocoon.session;
var userid = "";
while (principal == undefined) {
cocoon.sendPageAndWait("screens/login.html",{userid:userid,base:base});
userid = cocoon.request.getParameter("userid");
var password = cocoon.request.getParameter("password");
if (AdminHelper.login(nat,userid,password)) {
principal = userid;
// make the principal accessible from the sitemap as well
cocoon.session.setAttribute("slide-principal",principal);
}
}
cocoon.redirectTo(path);
}
function logout() {
cocoon.session.invalidate();
cocoon.redirectTo("content/");
}
// ---------------------------------------------- file management
// make a new collection
function protected_mkcol() {
var baseUri = "slide://" + principal + "@" + namespace + "/";
var parentPath = cocoon.request.getParameter("parentPath");
var collectionName = cocoon.request.getParameter("collectionName");
var location = baseUri + parentPath + "/" + collectionName;
var status = repository.makeCollection(location);
cocoon.redirectTo("content/" + parentPath);
}
// upload a file
function protected_upload() {
var baseUri = "slide://" + principal + "@" + namespace + "/";
var parentPath = cocoon.request.getParameter("parentPath");
var resourceName = cocoon.request.getParameter("resourceName");
var dest = baseUri + parentPath + "/" + resourceName;
var src = "upload://uploadFile";
var status = repository.save(src,dest);
cocoon.redirectTo("content/" + parentPath);
}
// delete a resource
function protected_delete() {
var baseUri = "slide://" + principal + "@" + namespace + "/";
var parentPath = cocoon.request.getParameter("parentPath");
var resourceName = cocoon.request.getParameter("resourceName");
var location = baseUri + parentPath + "/" + resourceName;
var status = repository.remove(location);
cocoon.redirectTo("content/" + parentPath);
}
// ---------------------------------------------- property management
function protected_addproperty() {
var baseUri = "slide://" + principal + "@" + nat.getName() + "/";
var resourcePath = cocoon.request.getParameter("resourcePath");
var location = baseUri + resourcePath;
var source = null;
try {
source = resolver.resolveURI(location);
var name = cocoon.request.getParameter("name");
var namespace = cocoon.request.getParameter("namespace");
var value = cocoon.request.getParameter("value");
var property = new SourceProperty(namespace,name,value);
source.setSourceProperty(property);
}
finally {
if (source != null) {
resolver.release(source);
}
}
cocoon.redirectTo("properties/" + resourcePath);
}
function protected_removeproperty() {
var baseUri = "slide://" + principal + "@" + nat.getName() + "/";
var resourcePath = cocoon.request.getParameter("resourcePath");
var location = baseUri + resourcePath;
var source = null;
try {
source = resolver.resolveURI(location);
var name = cocoon.request.getParameter("name");
var namespace = cocoon.request.getParameter("namespace");
source.removeSourceProperty(namespace,name);
} finally {
if (source != null) {
resolver.release(source);
}
}
cocoon.redirectTo("properties/" + resourcePath);
}
// ---------------------------------------------- permission management
function protected_removePermission() {
var resourcePath = cocoon.request.getParameter("resourcePath");
var subject = cocoon.request.getParameter("subject");
var privilege = cocoon.request.getParameter("privilege");
AdminHelper.removePermission(nat,principal,resourcePath,subject,privilege);
cocoon.redirectTo("permissions/" + resourcePath);
}
function protected_addPermission() {
var resourcePath = cocoon.request.getParameter("resourcePath");
var subject = cocoon.request.getParameter("subject");
var action = cocoon.request.getParameter("action");
var inheritable = cocoon.request.getParameter("inheritable");
var negative = cocoon.request.getParameter("negative");
AdminHelper.addPermission(nat,principal,resourcePath,subject,action,inheritable,negative);
cocoon.redirectTo("permissions/" + resourcePath);
}
// ---------------------------------------------- lock management
function protected_removelock() {
var resourcePath = cocoon.request.getParameter("resourcePath");
var objectUri = cocoon.request.getParameter("objectUri");
var lockId = cocoon.request.getParameter("lockId");
AdminHelper.removeLock(nat,principal,objectUri,lockId);
cocoon.redirectTo("locks/" + resourcePath);
}
function protected_addlock() {
var resourcePath = cocoon.request.getParameter("resourcePath");
var subject = cocoon.request.getParameter("subject");
var type = cocoon.request.getParameter("type");
var exclusive = cocoon.request.getParameter("exclusive");
var inheritable = cocoon.request.getParameter("inheritable");
AdminHelper.addLock(nat,principal,resourcePath,subject,type,exclusive,inheritable);
cocoon.redirectTo("locks/" + resourcePath);
}
// ---------------------------------------------- user management
function protected_adduser() {
var username = cocoon.request.getParameter("username");
var password = cocoon.request.getParameter("password");
AdminHelper.addUser(nat,principal,username,password);
cocoon.redirectTo("users");
}
function protected_addrole () {
var rolename = cocoon.request.getParameter("rolename");
AdminHelper.addRole(nat,principal,rolename);
cocoon.redirectTo("users");
}
function protected_addgroup () {
var groupname = cocoon.request.getParameter("groupname");
AdminHelper.addGroup(nat,principal,groupname);
cocoon.redirectTo("users");
}
function protected_removeobject() {
var objecturi = cocoon.request.getParameter("objecturi");
AdminHelper.removeObject(nat,principal,objecturi);
cocoon.redirectTo("users");
}
function protected_addmember() {
var objecturi = cocoon.request.getParameter("objecturi");
var subjecturi = cocoon.request.getParameter("subjecturi");
AdminHelper.addMember(nat,principal,objecturi,subjecturi);
cocoon.redirectTo("users");
}
function protected_removemember() {
var objecturi = cocoon.request.getParameter("objecturi");
var subjecturi = cocoon.request.getParameter("subjecturi");
AdminHelper.removeMember(nat,principal,objecturi,subjecturi);
cocoon.redirectTo("users");
}
// ---------------------------------------------- screens
function screen_permissions() {
var path = cocoon.parameters["path"];
var permissions = AdminHelper.listPermissions(nat,principal,path);
cocoon.sendPage("screens/permissions.jx",{permissions:permissions});
}
function screen_locks() {
var path = cocoon.parameters["path"];
var locks = AdminHelper.listLocks(nat,principal,path);
cocoon.sendPage("screens/locks.jx",{locks:locks});
}
function screen_privileges() {
var privileges = AdminHelper.listPrivileges(nat,principal);
cocoon.sendPage("screens/privileges.jx",{privileges:privileges});
}
function screen_groups() {
var groups = AdminHelper.listGroups(nat,principal,"/groups");
cocoon.sendPage("screens/groups.jx",{groups:groups});
}
function screen_roles() {
var roles = AdminHelper.listGroups(nat,principal,"/roles");
cocoon.sendPage("screens/roles.jx",{roles:roles});
}
function screen_users() {
var users = AdminHelper.listUsers(nat,principal);
cocoon.sendPage("screens/users.jx",{users:users});
}