1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-09 08:58:35 +03:00

r20569: Web Application Framework

- Fix handling of predicates in finite state machine

- Make use of predicates to handle a specific PermissionDenied failure, vs
  some other generic failure

- Add JSON-RPC error constants
(This used to be commit 38ae9658cb52149d66f910582d8b55fe954650fb)
This commit is contained in:
Derrell Lipman 2007-01-05 21:20:11 +00:00 committed by Gerald (Jerry) Carter
parent d0e221c4e0
commit 21664e91ab
2 changed files with 171 additions and 32 deletions

View File

@ -493,14 +493,17 @@ qx.Proto._checkEvents = function(propValue, propData)
for (action_e in action)
{
if (typeof(action[action_e]) == "number" &&
action != qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE &&
action != qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED)
action[action_e] !=
qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE &&
action[action_e] !=
qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED)
{
throw new Error("Invalid numeric value in events object " +
"(" + e + "): " +
action_e + ": " + action[action_e]);
}
else if (typeof(action[action_e]) != "string")
else if (typeof(action[action_e]) != "string" &&
typeof(action[action_e]) != "number")
{
throw new Error("Invalid value in events object " +
"(" + e + "): " +
@ -508,7 +511,7 @@ qx.Proto._checkEvents = function(propValue, propData)
}
}
}
else if (typeof(action) != "string")
else if (typeof(action) != "string" && typeof(action) != "number")
{
throw new Error("Invalid value in events object: " +
e + ": " + propValue[e]);

View File

@ -131,11 +131,73 @@ qx.Proto.addAwaitRpcResultState = function(module)
"Transition_AwaitRpcResult_to_PopStack_via_complete",
"failed" :
"Transition_AwaitRpcResult_to_PopStack_via_failed"
qx.util.fsm.FiniteStateMachine.EventHandling.PREDICATE
}
});
fsm.addState(state);
/*** Transitions that use a PREDICATE appear first ***/
/*
* Transition: AwaitRpcResult to GetAuthInfo
*
* Cause: "failed" (on RPC) where reason is PermissionDenied
*/
var trans = new qx.util.fsm.Transition(
"Transition_AwaitRpcResult_to_GetAuthInfo",
{
"nextState" :
qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK,
"predicate" :
function(fsm, event)
{
var error = event.getData(); // retrieve the JSON-RPC error
// Did we get get origin=Server, code=PermissionDenied ?
var origins = swat.module.AbstractModuleFsm.JsonRpc_Origin;
var serverErrors = swat.module.AbstractModuleFsm.JsonRpc_ServerError;
if (error.origin == origins.Server &&
error.code == serverErrors.PermissionDenied)
{
return true;
}
// fall through to next transition, also for "failed"
return false;
}
});
state.addTransition(trans);
/*
* Transition: AwaitRpcResult to PopStack
*
* Cause: "failed" (on RPC)
*/
var trans = new qx.util.fsm.Transition(
"Transition_AwaitRpcResult_to_PopStack_via_failed",
{
"nextState" :
qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK,
"ontransition" :
function(fsm, event)
{
// Get the request object
var rpcRequest = _this.getCurrentRpcRequest();
// Generate the result for a completed request
rpcRequest.setUserData("result",
{
type : "failed",
data : event.getData()
});
}
});
state.addTransition(trans);
/*** Remaining transitions are accessed via the jump table ***/
/*
* Transition: AwaitRpcResult to AwaitRpcResult
*
@ -185,33 +247,6 @@ qx.Proto.addAwaitRpcResultState = function(module)
}
});
state.addTransition(trans);
/*
* Transition: AwaitRpcResult to PopStack
*
* Cause: "failed" (on RPC)
*/
var trans = new qx.util.fsm.Transition(
"Transition_AwaitRpcResult_to_PopStack_via_failed",
{
"nextState" :
qx.util.fsm.FiniteStateMachine.StateChange.POP_STATE_STACK,
"ontransition" :
function(fsm, event)
{
// Get the request object
var rpcRequest = _this.getCurrentRpcRequest();
// Generate the result for a completed request
rpcRequest.setUserData("result",
{
type : "failed",
data : event.getData()
});
}
});
state.addTransition(trans);
};
@ -317,3 +352,104 @@ qx.Proto.getCurrentRpcRequest = function()
return this._requests[this._requests.length - 1];
};
/**
* JSON-RPC error origins
*/
qx.Class.JsonRpc_Origin =
{
Server : 1,
Application : 2,
Transport : 3,
Client : 4
};
/**
* JSON-RPC Errors for origin == Server
*/
qx.Class.JsonRpc_ServerError =
{
/**
* Error code, value 0: Unknown Error
*
* The default error code, used only when no specific error code is passed
* to the JsonRpcError constructor. This code should generally not be used.
*/
Unknown : 0,
/**
* Error code, value 1: Illegal Service
*
* The service name contains illegal characters or is otherwise deemed
* unacceptable to the JSON-RPC server.
*/
IllegalService : 1,
/**
* Error code, value 2: Service Not Found
*
* The requested service does not exist at the JSON-RPC server.
*/
ServiceNotFound : 2,
/**
* Error code, value 3: Class Not Found
*
* If the JSON-RPC server divides service methods into subsets (classes),
* this indicates that the specified class was not found. This is slightly
* more detailed than "Method Not Found", but that error would always also
* be legal (and true) whenever this one is returned. (Not used in this
* implementation)
*/
ClassNotFound : 3, // not used in this implementation
/**
* Error code, value 4: Method Not Found
*
* The method specified in the request is not found in the requested
* service.
*/
MethodNotFound : 4,
/*
* Error code, value 5: Parameter Mismatch
*
* If a method discovers that the parameters (arguments) provided to it do
* not match the requisite types for the method's parameters, it should
* return this error code to indicate so to the caller.
*
* This error is also used to indicate an illegal parameter value, in server
* scripts.
*/
ParameterMismatch : 5,
/**
* Error code, value 6: Permission Denied
*
* A JSON-RPC service provider can require authentication, and that
* authentication can be implemented such the method takes authentication
* parameters, or such that a method or class of methods requires prior
* authentication. If the caller has not properly authenticated to use the
* requested method, this error code is returned.
*/
PermissionDenied : 6,
/*
* Error code, value 7: Unexpected Output
*
* The called method illegally generated output to the browser, which would
* have preceeded the JSON-RPC data.
*/
UnexpectedOutput : 7,
/*
* Error code, value 8: Resource Error
*
* Too many resources were requested, a system limitation on the total
* number of resources has been reached, or a resource or resource id was
* misused.
*/
ResourceError : 8
};