All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.johnnei.enjin.spec.impl.UserImpl Maven / Gradle / Ivy

The newest version!
package org.johnnei.enjin.spec.impl;

import java.lang.reflect.Type;
import java.util.Optional;

import org.johnnei.enjin.internal.AnnotationUtils;
import org.johnnei.enjin.internal.EnjinError;
import org.johnnei.enjin.internal.RequestWrapper;
import org.johnnei.enjin.internal.ResponseWrapper;
import org.johnnei.enjin.internal.http.IRequestExecuter;
import org.johnnei.enjin.spec.EnjinMethod;
import org.johnnei.enjin.spec.IUser;
import org.johnnei.enjin.spec.dto.CheckSession;
import org.johnnei.enjin.spec.dto.CheckSessionResult;
import org.johnnei.enjin.spec.dto.Credentials;
import org.johnnei.enjin.spec.dto.User;

import com.google.gson.reflect.TypeToken;

public class UserImpl implements IUser {

	private static final Type USER_RESPONSE_TYPE = new TypeToken>() {}.getType();

	private static final Type CHECK_SESSION_RESPONSE_TYPE =
			new TypeToken>() {}.getType();

	private static int ERROR_INVALID_CREDENTIALS = -32000;

	private EnjinApiImpl enjinApiImpl;

	private IRequestExecuter requestExecuter;

	public UserImpl(EnjinApiImpl enjinApiImpl, IRequestExecuter requestExecuter) {
		this.enjinApiImpl = enjinApiImpl;
		this.requestExecuter = requestExecuter;
	}

	@Override
	public Optional login(Credentials credentials) {
		final EnjinMethod method = AnnotationUtils.getMethod(IUser.class, "login", Credentials.class);

		RequestWrapper request = enjinApiImpl.createRequest(method, Optional.empty(), credentials);
		ResponseWrapper result = requestExecuter.executeRequest(request, USER_RESPONSE_TYPE);
		if (result.isInErrorState()) {
			EnjinError error = result.getError();
			if (error.getCode() == ERROR_INVALID_CREDENTIALS) {
				// Invalid login, error is no unexpected error.
				return Optional.empty();
			}

			error.throwAsException();
		}

		return Optional.of(result.getResponse());
	}

	@Override
	public Optional checkSession(String sessionId) {
		if (sessionId == null || sessionId.isEmpty()) {
			// No session available, session can't possibly be valid
			return Optional.empty();
		}

		final EnjinMethod method = AnnotationUtils.getMethod(IUser.class, "checkSession", String.class);

		CheckSession session = new CheckSession.Builder().setSessionId(sessionId).build();
		RequestWrapper request = enjinApiImpl.createRequest(method, Optional.empty(), session);
		ResponseWrapper response =
				requestExecuter.executeRequest(request, CHECK_SESSION_RESPONSE_TYPE);

		CheckSessionResult result = response.getResponse();
		if (!result.getHasIdentity()) {
			return Optional.empty();
		}

		return Optional.of(new User(sessionId, result));
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy