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

com.github.gkutiel.fbi.FbApp Maven / Gradle / Ivy

package com.github.gkutiel.fbi;

import static com.google.common.base.Preconditions.checkNotNull;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import com.google.common.base.Joiner;

public class FbApp {

	public static class App {
		public final String appId;
		public final String appSecret;

		public App(final String appId, final String appSecret) {
			this.appId = appId;
			this.appSecret = appSecret;
		}
	}
	public class Auth {
		private final String redirectUri;
		private final Permission[] permissions;

		private Auth(final String redirectUri, final Permission... permissions) {
			this.redirectUri = redirectUri;
			this.permissions = permissions;
		}

		public Fbi fbi(final String code) throws FbLoginException {
			checkNotNull(code);
			try {
				final StringBuilder infoUrl = new StringBuilder();
				infoUrl.append("https://graph.facebook.com/oauth/access_token?client_id=");
				infoUrl.append(clientId);
				infoUrl.append("&client_secret=");
				infoUrl.append(clientSecret);
				infoUrl.append("&redirect_uri=");
				infoUrl.append(encode(redirectUri));
				infoUrl.append("&code=");
				infoUrl.append(code);
				final String response = Fbi.get(infoUrl.toString());
				return new Fbi(extracteAccessToken(response));
			} catch (final Exception e) {
				throw new FbLoginException(loginUrl());
			}
		}
		public String loginUrl() {
			final StringBuilder loginUrl = new StringBuilder();
			loginUrl.append("https://www.facebook.com/dialog/oauth?client_id=");
			loginUrl.append(clientId);
			loginUrl.append("&redirect_uri=");
			loginUrl.append(encode(redirectUri));
			loginUrl.append("&scope=");
			loginUrl.append(Joiner.on(',').join(permissions));
			return loginUrl.toString();
		}

		private String encode(final String param) {
			try {
				return URLEncoder.encode(param, "utf-8");
			} catch (final UnsupportedEncodingException e) {
				throw new RuntimeException(e);
			}
		}

		private String extracteAccessToken(final String response) {
			return response.replace("access_token=", "").replaceAll("&.*", "");
		}
	}
	public static class FbLoginException extends Exception {

		private final String loginUrl;

		public FbLoginException(final String loginUrl) {
			this.loginUrl = loginUrl;
		}

		public String loginUrl() {
			return loginUrl;
		}

		@Override
		public String toString() {
			return "Login error, redirect to " + loginUrl;
		}
	}

	public static enum Permission {
		// @formatter:off
		PUBLISH_STREAM("publish_stream"), 
		EMAIL("email"), 
		
		FRIENDS_BIRTHDAY("friends_birthday"), 
		
		USER_BIRTHDAY("user_birthday"), 
		USER_EVENTS("user_events");
		//@formatter:on

		private String name;

		Permission(final String name) {
			this.name = name;
		}

		@Override
		public String toString() {
			return name;
		}
	}

	private final String clientId;

	private final String clientSecret;

	public FbApp(final App app) {
		clientId = app.appId;
		clientSecret = app.appSecret;
	}

	public Auth auth(final String redirectUrl, final Permission... permissions) {
		return new Auth(redirectUrl, permissions);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy