Search in sources :

Example 6 with User

use of com.google.api.server.spi.auth.common.User in project endpoints-java by cloudendpoints.

the class ServletRequestParamReader method deserializeParams.

protected Object[] deserializeParams(JsonNode node) throws IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, ServiceException {
    EndpointMethod method = getMethod();
    Class<?>[] paramClasses = method.getParameterClasses();
    TypeToken<?>[] paramTypes = method.getParameterTypes();
    Object[] params = new Object[paramClasses.length];
    List<String> parameterNames = getParameterNames(method);
    for (int i = 0; i < paramClasses.length; i++) {
        TypeToken<?> type = paramTypes[i];
        Class<?> clazz = paramClasses[i];
        if (User.class.isAssignableFrom(clazz)) {
            // User type parameter requires no Named annotation (ignored if present)
            User user = getUser();
            if (user == null && methodConfig != null && methodConfig.getAuthLevel() == AuthLevel.REQUIRED) {
                throw new UnauthorizedException("Valid user credentials are required.");
            }
            if (user == null || clazz.isAssignableFrom(user.getClass())) {
                params[i] = user;
                logger.atFine().log("deserialize: User injected into param[%d]", i);
            } else {
                logger.atWarning().log("deserialize: User object of type %s is not assignable to %s. User will be null.", user.getClass().getName(), clazz.getName());
            }
        } else if (APPENGINE_USER_CLASS_NAME.equals(clazz.getName())) {
            // User type parameter requires no Named annotation (ignored if present)
            com.google.appengine.api.users.User appEngineUser = getAppEngineUser();
            if (appEngineUser == null && methodConfig != null && methodConfig.getAuthLevel() == AuthLevel.REQUIRED) {
                throw new UnauthorizedException("Valid user credentials are required.");
            }
            params[i] = appEngineUser;
            logger.atFine().log("deserialize: App Engine User injected into param[%d]", i);
        } else if (clazz == HttpServletRequest.class) {
            // HttpServletRequest type parameter requires no Named annotation (ignored if present)
            params[i] = endpointsContext.getRequest();
            logger.atFine().log("deserialize: HttpServletRequest injected into param[%d]", i);
        } else if (clazz == ServletContext.class) {
            // ServletContext type parameter requires no Named annotation (ignored if present)
            params[i] = servletContext;
            logger.atFine().log("deserialize: ServletContext %s injected into param[%d]", params[i], i);
        } else {
            String name = parameterNames.get(i);
            if (Strings.isNullOrEmpty(name)) {
                params[i] = (node == null) ? null : objectReader.forType(clazz).readValue(node);
                logger.atFine().log("deserialize: %s %s injected into unnamed param[%d]", clazz, params[i], i);
            } else if (StandardParameters.isStandardParamName(name)) {
                params[i] = getStandardParamValue(node, name);
            } else {
                JsonNode nodeValue = node.get(name);
                if (nodeValue == null) {
                    params[i] = null;
                } else {
                    // Check for collection type
                    if (Collection.class.isAssignableFrom(clazz) && type.getType() instanceof ParameterizedType) {
                        params[i] = deserializeCollection(clazz, (ParameterizedType) type.getType(), nodeValue);
                    } else {
                        params[i] = objectReader.forType(clazz).readValue(nodeValue);
                    }
                }
                if (params[i] == null && isRequiredParameter(method, i)) {
                    throw new BadRequestException("null value for parameter '" + name + "' not allowed");
                }
                logger.atFine().log("deserialize: %s %s injected into param[%d] named {%s}", clazz, params[i], i, name);
            }
        }
    }
    return params;
}
Also used : User(com.google.api.server.spi.auth.common.User) JsonNode(com.fasterxml.jackson.databind.JsonNode) ParameterizedType(java.lang.reflect.ParameterizedType) TypeToken(com.google.common.reflect.TypeToken) UnauthorizedException(com.google.api.server.spi.response.UnauthorizedException) EndpointMethod(com.google.api.server.spi.EndpointMethod) ServletContext(javax.servlet.ServletContext) Collection(java.util.Collection) BadRequestException(com.google.api.server.spi.response.BadRequestException)

Example 7 with User

use of com.google.api.server.spi.auth.common.User in project endpoints-java by cloudendpoints.

the class Auth method authenticateAppEngineUser.

/**
 * Authenticate the request and retrieve an {@code com.google.appengine.api.users.User}. Should
 * only run once per request.
 */
com.google.appengine.api.users.User authenticateAppEngineUser() throws ServiceException {
    if (!EnvUtil.isRunningOnAppEngine()) {
        return null;
    }
    attr.set(Attribute.REQUIRE_APPENGINE_USER, true);
    User user = authenticate();
    attr.set(Attribute.REQUIRE_APPENGINE_USER, false);
    if (user == null) {
        return null;
    }
    com.google.appengine.api.users.User appEngineUser = attr.get(Attribute.AUTHENTICATED_APPENGINE_USER);
    if (appEngineUser != null) {
        return appEngineUser;
    } else {
        return user.getEmail() == null ? null : new com.google.appengine.api.users.User(user.getEmail(), "", user.getId());
    }
}
Also used : User(com.google.api.server.spi.auth.common.User)

Example 8 with User

use of com.google.api.server.spi.auth.common.User in project endpoints-java by cloudendpoints.

the class Auth method authenticate.

/**
 * Authenticate the request and retrieve a {@code User}. Should only run once per request.
 */
User authenticate() throws ServiceException {
    Iterable<Authenticator> authenticators = getAuthenticatorInstances();
    User user = null;
    if (authenticators != null) {
        for (Authenticator authenticator : authenticators) {
            user = authenticator.authenticate(request);
            if (user != null) {
                break;
            }
        }
    }
    return user;
}
Also used : User(com.google.api.server.spi.auth.common.User) Authenticator(com.google.api.server.spi.config.Authenticator) EndpointsAuthenticator(com.google.api.server.spi.auth.EndpointsAuthenticator)

Example 9 with User

use of com.google.api.server.spi.auth.common.User in project endpoints-java by cloudendpoints.

the class GoogleAppEngineAuthenticator method authenticate.

@Override
public User authenticate(HttpServletRequest request) throws ServiceUnavailableException {
    Attribute attr = Attribute.from(request);
    if (!EnvUtil.isRunningOnAppEngine()) {
        return null;
    }
    com.google.appengine.api.users.User appEngineUser = null;
    ApiMethodConfig config = attr.get(Attribute.API_METHOD_CONFIG);
    if (!attr.isEnabled(Attribute.SKIP_TOKEN_AUTH)) {
        appEngineUser = getOAuth2User(request, config);
    }
    if (appEngineUser == null && shouldTryCookieAuth(config)) {
        appEngineUser = userService.getCurrentUser();
    }
    if (appEngineUser == null) {
        return null;
    }
    User user = new User(appEngineUser.getEmail());
    if (attr.isEnabled(Attribute.REQUIRE_APPENGINE_USER)) {
        attr.set(Attribute.AUTHENTICATED_APPENGINE_USER, appEngineUser);
    }
    return user;
}
Also used : ApiMethodConfig(com.google.api.server.spi.config.model.ApiMethodConfig) User(com.google.api.server.spi.auth.common.User) Attribute(com.google.api.server.spi.request.Attribute)

Example 10 with User

use of com.google.api.server.spi.auth.common.User in project endpoints-java by cloudendpoints.

the class ServletRequestParamReaderTest method testUserInjectionThrowsExceptionIfRequired.

@Test
public void testUserInjectionThrowsExceptionIfRequired() throws Exception {
    @SuppressWarnings("unused")
    class TestUser {

        @SuppressWarnings("unused")
        public void getUser(User user) {
        }
    }
    ApiMethodConfig methodConfig = Mockito.mock(ApiMethodConfig.class);
    when(methodConfig.getAuthLevel()).thenReturn(AuthLevel.REQUIRED);
    methodConfig.setAuthLevel(AuthLevel.REQUIRED);
    try {
        Method method = TestUser.class.getDeclaredMethod("getUser", User.class);
        readParameters("{}", EndpointMethod.create(method.getDeclaringClass(), method), methodConfig, null, null);
        fail("expected unauthorized method exception");
    } catch (UnauthorizedException ex) {
    // expected
    }
}
Also used : ApiMethodConfig(com.google.api.server.spi.config.model.ApiMethodConfig) User(com.google.api.server.spi.auth.common.User) UnauthorizedException(com.google.api.server.spi.response.UnauthorizedException) Method(java.lang.reflect.Method) EndpointMethod(com.google.api.server.spi.EndpointMethod) Test(org.junit.Test)

Aggregations

User (com.google.api.server.spi.auth.common.User)15 Test (org.junit.Test)8 ApiMethodConfig (com.google.api.server.spi.config.model.ApiMethodConfig)5 Attribute (com.google.api.server.spi.request.Attribute)4 EndpointMethod (com.google.api.server.spi.EndpointMethod)3 UnauthorizedException (com.google.api.server.spi.response.UnauthorizedException)3 GoogleIdToken (com.google.api.client.googleapis.auth.oauth2.GoogleIdToken)2 TokenInfo (com.google.api.server.spi.auth.GoogleAuth.TokenInfo)2 Method (java.lang.reflect.Method)2 JsonNode (com.fasterxml.jackson.databind.JsonNode)1 EndpointsAuthenticator (com.google.api.server.spi.auth.EndpointsAuthenticator)1 Authenticator (com.google.api.server.spi.config.Authenticator)1 BadRequestException (com.google.api.server.spi.response.BadRequestException)1 TypeToken (com.google.common.reflect.TypeToken)1 ParameterizedType (java.lang.reflect.ParameterizedType)1 Collection (java.util.Collection)1 ServletContext (javax.servlet.ServletContext)1