public class CommandLineAdaptor extends AbstractAdaptor implements AuthzAuthority
| Constructor and Description |
|---|
CommandLineAdaptor() |
| Modifier and Type | Method and Description |
|---|---|
protected Command.Result |
executeAuthorizer(String[] commandLine,
byte[] stdin) |
protected int |
executeLister(String[] commandLine,
StreamingCommand.InputSource stdin,
StreamingCommand.OutputSink stdout,
StreamingCommand.OutputSink stderr) |
protected int |
executeRetriever(String[] commandLine,
StreamingCommand.InputSource stdin,
StreamingCommand.OutputSink stdout,
StreamingCommand.OutputSink stderr) |
void |
getDocContent(Request req,
Response resp)
Gives the bytes of a document referenced with id.
|
void |
getDocIds(DocIdPusher pusher)
Pushes all the
DocIds that are suppose to be indexed by the GSA. |
List<String> |
getListerCommand() |
List<String> |
getRetrieverCommand() |
void |
init(AdaptorContext context)
Initialize adaptor with the current context.
|
void |
initConfig(Config config)
Provides the opportunity for the Adaptor to create new configuration values
or override default values.
|
Map<DocId,AuthzStatus> |
isUserAuthorized(AuthnIdentity userIdentity,
Collection<DocId> ids)
Determines whether the user identified is allowed to access the
DocIds. |
static void |
main(String[] args)
Call default main for adaptors.
|
void |
setListerCommand(List<String> commandWithArgs) |
void |
setRetrieverCommand(List<String> commandWithArgs) |
destroy, mainpublic void initConfig(Config config)
AbstractAdaptorConfig.addKey(java.lang.String, java.lang.String) should likely be
called. The user's configuration will override any values set in this way.
This method is called by AbstractAdaptor.main(com.google.enterprise.adaptor.Adaptor, java.lang.String[]) before Adaptor.init(com.google.enterprise.adaptor.AdaptorContext)
is called.
This implementation does nothing.
initConfig in interface AdaptorinitConfig in class AbstractAdaptorconfig - to modify with additional keyspublic void init(AdaptorContext context) throws Exception
AbstractAdaptorcontext
points to other useful objects that can be used at any time. For example,
methods on DocIdPusher provided via AdaptorContext.getDocIdPusher() are allowed to be called whenever the
Adaptor wishes. This allows doing event-based incremental pushes at any
time.
The method is called at the end of GsaCommunicationHandler.start(java.lang.Runnable).
If you experience a fatal error during initialization, feel free to
throw an Exception to cancel the startup process.
This implementation does nothing.
init in interface Adaptorinit in class AbstractAdaptorcontext - for instance includes completed configException - if things are not going wellpublic void getDocIds(DocIdPusher pusher) throws IOException, InterruptedException
AdaptorDocIds that are suppose to be indexed by the GSA.
This will frequently involve re-sending DocIds to the GSA, but this
allows healing previous errors and cache inconsistencies. Re-sending DocIds is very fast and should be considered free on the GSA. This method
should determine a list of DocIds to push and call DocIdPusher.pushDocIds(java.lang.Iterable<com.google.enterprise.adaptor.DocId>) one or more times and DocIdPusher.pushNamedResources(java.util.Map<com.google.enterprise.adaptor.DocId, com.google.enterprise.adaptor.Acl>) if using named resources.
pusher is provided as convenience and is the same object
provided to Adaptor.init(com.google.enterprise.adaptor.AdaptorContext) previously. This method may take a while and
implementations are free to call Thread.sleep(long) occasionally to
reduce load.
If you experience a fatal error, feel free to throw an IOException or RuntimeException. In the case of an error, the
ExceptionHandler in use in AdaptorContext will
determine if and when to retry.
getDocIds in interface Adaptorpusher - used to send doc ids to GSAIOException - if getting data failsInterruptedException - if an IO operations throws itpublic void getDocContent(Request req, Response resp) throws IOException
getDocContent in interface Adaptorreq - info about document being soughtresp - place to put document dataIOException - if getting data failspublic Map<DocId,AuthzStatus> isUserAuthorized(AuthnIdentity userIdentity, Collection<DocId> ids) throws IOException
DocIds. The user is either anonymous or assumed to be previously
authenticated. If an anonymous user is denied access to a document, then
the caller may prompt the user to go through an authentication process and
then try again.
Returns AuthzStatus.PERMIT for DocIds the user is
allowed to access. Retutrns AuthzStatus.DENY for DocIds the
user is not allowed to access. If the document exists, AuthzStatus.INDETERMINATE will not be returned for that DocId.
If the document doesn't exist, then there are several possibilities. If
the repository is fully-public then it will return PERMIT. This
will allow the caller to provide a cached version of the file to the user
or call Adaptor.getDocContent(com.google.enterprise.adaptor.Request, com.google.enterprise.adaptor.Response) which should call Response.respondNotFound(). If the adaptor is not sensitive to users knowing
that certain documents do not exist, then it will return INDETERMINATE. This will be interpreted as the document does not exist; no
cached copy will be provided to the user but the user may be informed the
document doesn't exist. Highly sensitive repositories may return DENY.
If you experience a fatal error, feel free to throw an IOException or RuntimeException. In the case of an error, the
users will be denied access to the resources.
This implementation provides access permissions for the DocIds in an \
unmodifiable map based upon data returned by a command line authorizer.
Permissions can have one of three values:
AuthzStatus.PERMIT,
AuthzStatus.DENY,
AuthzStatus.INDETERMINATE
If an authorizerCommand is not set then AbstractAdaptor.isUserAuthorized
is used.
isUserAuthorized in interface AuthzAuthorityuserIdentity - user to authorize, or null for anonymous
usersids - Collection of DocIds that need to be checkedAuthzStatus for each DocId provided in idsIOException - on failureprotected int executeLister(String[] commandLine, StreamingCommand.InputSource stdin, StreamingCommand.OutputSink stdout, StreamingCommand.OutputSink stderr) throws IOException, InterruptedException
IOExceptionInterruptedExceptionprotected int executeRetriever(String[] commandLine, StreamingCommand.InputSource stdin, StreamingCommand.OutputSink stdout, StreamingCommand.OutputSink stderr) throws IOException, InterruptedException
IOExceptionInterruptedExceptionprotected Command.Result executeAuthorizer(String[] commandLine, byte[] stdin) throws IOException, InterruptedException
IOExceptionInterruptedExceptionpublic static void main(String[] args)
args - argv