Search in sources :

Example 1 with IgniteAuthenticationException

use of org.apache.ignite.IgniteAuthenticationException in project ignite by apache.

the class GridRestProcessor method handleRequest.

/**
 * @param req Request.
 * @return Future.
 */
private IgniteInternalFuture<GridRestResponse> handleRequest(final GridRestRequest req) {
    if (startLatch.getCount() > 0) {
        try {
            startLatch.await();
        } catch (InterruptedException e) {
            return new GridFinishedFuture<>(new IgniteCheckedException("Failed to handle request " + "(protocol handler was interrupted when awaiting grid start).", e));
        }
    }
    if (log.isDebugEnabled())
        log.debug("Received request from client: " + req);
    boolean authenticationEnabled = ctx.authentication().enabled();
    boolean securityEnabled = ctx.security().enabled();
    if (authenticationEnabled || securityEnabled) {
        Session ses;
        try {
            ses = session(req);
        } catch (IgniteCheckedException e) {
            GridRestResponse res = new GridRestResponse(STATUS_FAILED, e.getMessage());
            return new GridFinishedFuture<>(res);
        }
        assert ses != null;
        req.clientId(ses.clientId);
        req.sessionToken(U.uuidToBytes(ses.sesId));
        if (log.isDebugEnabled())
            log.debug("Next clientId and sessionToken were extracted according to request: " + "[clientId=" + req.clientId() + ", sesTok=" + Arrays.toString(req.sessionToken()) + "]");
        if (securityEnabled) {
            SecurityContext secCtx0 = ses.secCtx;
            try {
                if (secCtx0 == null)
                    ses.secCtx = secCtx0 = authenticate(req);
                authorize(req, secCtx0);
            } catch (SecurityException e) {
                assert secCtx0 != null;
                return new GridFinishedFuture<>(new GridRestResponse(STATUS_SECURITY_CHECK_FAILED, e.getMessage()));
            } catch (IgniteCheckedException e) {
                return new GridFinishedFuture<>(new GridRestResponse(STATUS_AUTH_FAILED, e.getMessage()));
            }
        } else {
            AuthorizationContext authCtx0 = ses.authCtx;
            try {
                if (authCtx0 == null) {
                    SecurityCredentials creds = credentials(req);
                    String login = null;
                    if (creds.getLogin() instanceof String)
                        login = (String) creds.getLogin();
                    String pwd = null;
                    if (creds.getPassword() instanceof String)
                        pwd = (String) creds.getPassword();
                    if (F.isEmpty(login) || F.isEmpty(pwd))
                        throw new IgniteAuthenticationException("The user name or password is incorrect");
                    ses.authCtx = ctx.authentication().authenticate(login, pwd);
                    req.authorizationContext(ses.authCtx);
                }
            } catch (IgniteCheckedException e) {
                return new GridFinishedFuture<>(new GridRestResponse(STATUS_AUTH_FAILED, e.getMessage()));
            }
        }
    }
    interceptRequest(req);
    GridRestCommandHandler hnd = handlers.get(req.command());
    IgniteInternalFuture<GridRestResponse> res = hnd == null ? null : hnd.handleAsync(req);
    if (res == null)
        return new GridFinishedFuture<>(new IgniteCheckedException("Failed to find registered handler for command: " + req.command()));
    return res.chain(new C1<IgniteInternalFuture<GridRestResponse>, GridRestResponse>() {

        @Override
        public GridRestResponse apply(IgniteInternalFuture<GridRestResponse> f) {
            GridRestResponse res;
            boolean failed = false;
            try {
                res = f.get();
            } catch (Exception e) {
                failed = true;
                if (!X.hasCause(e, VisorClusterGroupEmptyException.class))
                    LT.error(log, e, "Failed to handle request: " + req.command());
                if (log.isDebugEnabled())
                    log.debug("Failed to handle request [req=" + req + ", e=" + e + "]");
                // Prepare error message:
                SB sb = new SB(256);
                sb.a("Failed to handle request: [req=").a(req.command());
                if (req instanceof GridRestTaskRequest) {
                    GridRestTaskRequest tskReq = (GridRestTaskRequest) req;
                    sb.a(", taskName=").a(tskReq.taskName()).a(", params=").a(tskReq.params());
                }
                sb.a(", err=").a(e.getMessage() != null ? e.getMessage() : e.getClass().getName()).a(']');
                res = new GridRestResponse(STATUS_FAILED, sb.toString());
            }
            assert res != null;
            if (ctx.security().enabled() && !failed)
                res.sessionTokenBytes(req.sessionToken());
            interceptResponse(res, req);
            return res;
        }
    });
}
Also used : IgniteAuthenticationException(org.apache.ignite.IgniteAuthenticationException) SecurityException(org.apache.ignite.plugin.security.SecurityException) AuthorizationContext(org.apache.ignite.internal.processors.authentication.AuthorizationContext) IgniteInternalFuture(org.apache.ignite.internal.IgniteInternalFuture) IgniteAuthenticationException(org.apache.ignite.IgniteAuthenticationException) SecurityException(org.apache.ignite.plugin.security.SecurityException) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) InvocationTargetException(java.lang.reflect.InvocationTargetException) RejectedExecutionException(java.util.concurrent.RejectedExecutionException) VisorClusterGroupEmptyException(org.apache.ignite.internal.visor.util.VisorClusterGroupEmptyException) SB(org.apache.ignite.internal.util.typedef.internal.SB) GridRestCommandHandler(org.apache.ignite.internal.processors.rest.handlers.GridRestCommandHandler) SecurityCredentials(org.apache.ignite.plugin.security.SecurityCredentials) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) GridRestTaskRequest(org.apache.ignite.internal.processors.rest.request.GridRestTaskRequest) SecurityContext(org.apache.ignite.internal.processors.security.SecurityContext) VisorClusterGroupEmptyException(org.apache.ignite.internal.visor.util.VisorClusterGroupEmptyException)

Aggregations

InvocationTargetException (java.lang.reflect.InvocationTargetException)1 RejectedExecutionException (java.util.concurrent.RejectedExecutionException)1 IgniteAuthenticationException (org.apache.ignite.IgniteAuthenticationException)1 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)1 IgniteInternalFuture (org.apache.ignite.internal.IgniteInternalFuture)1 AuthorizationContext (org.apache.ignite.internal.processors.authentication.AuthorizationContext)1 GridRestCommandHandler (org.apache.ignite.internal.processors.rest.handlers.GridRestCommandHandler)1 GridRestTaskRequest (org.apache.ignite.internal.processors.rest.request.GridRestTaskRequest)1 SecurityContext (org.apache.ignite.internal.processors.security.SecurityContext)1 SB (org.apache.ignite.internal.util.typedef.internal.SB)1 VisorClusterGroupEmptyException (org.apache.ignite.internal.visor.util.VisorClusterGroupEmptyException)1 SecurityCredentials (org.apache.ignite.plugin.security.SecurityCredentials)1 SecurityException (org.apache.ignite.plugin.security.SecurityException)1