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;
}
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());
}
}
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;
}
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;
}
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
}
}
Aggregations