blob: d2d829bae3f017f55dba2f7003e20528ab6eac43 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* Yeah, I know that hardwiring those is hacky as hell. But I'll try to
* fix this with link translation later on.
*/
var configPath = cocoon.context.getRealPath("/") + "samples/linotype/";
var home = "webdav://user:password@host/dav/samples/linotype/";
var stream = new java.io.FileInputStream(configPath + "linotype.users.properties");
var users = new Packages.org.apache.cocoon.components.UserManager.getInstance(stream);
var repo = new Packages.org.apache.cocoon.components.SourceRepository.getInstance();
var userid = "";
var username = "";
/*
* Main entry point for the flow. This is where user authorization takes place.
*/
function main(action) {
var args = new Array(arguments.length - 1);
for (var i = 1; i < arguments.length; i++) {
args[i-1] = arguments[i];
}
if ((userid == undefined) || (userid == "")) {
login(action, args);
}
invoke(action, args);
}
/*
* If the user is not yet authorized, than authentication takes place
*/
function login(action, args) {
var name = "";
var password = "";
var userError = "";
var passError = "";
while (true) {
sendPageAndWait("screen/login", { username : name, userError : userError, passError : passError});
name = cocoon.request.getParameter("username");
password = cocoon.request.getParameter("password");
if (users.isValidName(name)) {
if (users.isValidPassword(name,password)) {
userid = name;
username = users.getFullName(name);
break;
} else {
userError = "";
passError = "Password doesn't match";
}
} else {
userError = "User not found";
passError = "";
}
}
cocoon.createSession();
}
/*
* Now that the user has been authenticated and authorized, execute what
* he's asking for. This method checks the flowscript to see if the
* called action exists as a flowscript function. If so, it's called with
* the given arguments. If not, the appropriate admin screen is sent
* to the user.
*/
function invoke(action, args) {
func = this[action];
if (func != undefined) {
func.apply(this,args);
} else {
sendPage("screen/" + action, {"user" : username});
}
}
// ----------------------------- actions ----------------------------------
/*
* The logout action clears the userid from the session thus signaling
* that the user has logged out and should be further considered authenticated.
*/
function logout() {
userid = "";
sendPage("screen/logout");
}
/*
* The edit action performs the editing subflow.
*/
function edit(id,type,subpage) {
var repository = home + "repository/" + type + "/";
if (id == "template") {
id = repo.getID(repository);
repo.copy(repository + "template", repository + id);
redirect("../" + id + "/");
} else if ((subpage != undefined) && (subpage != "")) {
sendPage("edit/" + type + "/" + id + "/" + subpage,{});
} else {
var document = repository + id;
while (true) {
var versions = repo.getVersions(document);
sendPageAndWait("edit/" + type + "/" + id + "/", {
userid : userid,
username : username,
versions : versions,
innerHTML : cocoon.request.getParameter("innerHTML")
});
var action = cocoon.request.getParameter("action");
if (action == "delete") {
repo.remove(document);
break;
} else if (action == "restore") {
var version = cocoon.request.getParameter("version");
repo.revertFrom(document,version);
} else {
var output = repo.getOutputStream(document);
process("samples/linotype/action/save-" + type,{},output);
output.close();
repo.save(cocoon.request, document);
if (action == "finish") break;
}
}
redirect("../../../" + type);
}
}