
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