//package de.anycook.graph;
//
//import java.io.UnsupportedEncodingException;
//import java.net.URI;
//import java.net.URISyntaxException;
//import java.net.URLEncoder;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.ws.rs.GET;
//import javax.ws.rs.POST;
//import javax.ws.rs.Path;
//import javax.ws.rs.QueryParam;
//import javax.ws.rs.WebApplicationException;
//import javax.ws.rs.core.Context;
//import javax.ws.rs.core.Response;
//
//import org.apache.log4j.Logger;
//import com.sun.jersey.api.core.HttpContext;
//import com.sun.jersey.de.anycook.oauth.server.OAuthServerRequest;
//import com.sun.jersey.de.anycook.oauth.server.spi.OAuthConsumer;
//import com.sun.jersey.de.anycook.oauth.server.spi.OAuthToken;
//import com.sun.jersey.de.anycook.oauth.signature.OAuthParameters;
//import com.sun.jersey.de.anycook.oauth.signature.OAuthSecrets;
//import com.sun.jersey.de.anycook.oauth.signature.OAuthSignature;
//import com.sun.jersey.de.anycook.oauth.signature.OAuthSignatureException;
//
//import de.anycook.db.mysql.DBApps;
//import de.anycook.api.de.anycook.oauth.AnycookOAuthConsumer;
//import de.anycook.api.de.anycook.oauth.AnycookOAuthProvider;
//import de.anycook.session.Session;
//import de.anycook.user.User;
//
//@Path("de.anycook.oauth")
//public class OAuthGraph {
//
// private final Logger logger;
// private final static AnycookOAuthProvider provider;
//
// static{
// provider = new AnycookOAuthProvider();
// }
//
//
// public OAuthGraph(){
// logger = Logger.getLogger(getClass());
//
// }
//
// @POST
// @Path("request_token")
// public String getRequestToken(@Context HttpContext hc) throws UnsupportedEncodingException{
// OAuthServerRequest req = new OAuthServerRequest(hc.getRequest());
// OAuthParameters params = new OAuthParameters();
// params.readRequest(req);
//
// String appID = params.getConsumerKey();
// OAuthConsumer consumer = AnycookOAuthConsumer.init(appID);
// if(consumer == null){
// throw new WebApplicationException(401);
// }
// String secret = consumer.getSecret();
// OAuthSecrets secrets = new OAuthSecrets();
// secrets.setConsumerSecret(secret);
//
// try {
// if(!OAuthSignature.verify(req, params, secrets)){
// logger.warn("verification failed for "+appID);
// throw new WebApplicationException(401);
// }
//
// }
// catch (OAuthSignatureException ose) {
//
// throw new WebApplicationException(401);
// }
//
// OAuthToken requestToken = provider.newRequestToken(appID, params.getCallback(), hc.getRequest().getQueryParameters());
//
//
//
// return requestToken.toString();
//
//
// }
//
//
//
// @GET
// @Path("authorize")
// public Response appLogin(@QueryParam("oauth_token") String oauthToken,
// @QueryParam("accept") Boolean accept, @Context HttpServletRequest request)
// throws URISyntaxException, UnsupportedEncodingException{
//
// //throw exception if theres no request token
// if(oauthToken == null )
// throw new WebApplicationException(400);
//
// Session session = Session.init(request.getSession());
// try{
// session.checkLogin();
// }catch(WebApplicationException e){
// StringBuilder redirectURL = new StringBuilder("http://test.anycook.de/login.html?redirect=");
// redirectURL.append(URLEncoder.encode("http://api.anycook.de/de.anycook.oauth/authorize?oauth_token="+oauthToken, "UTF-8"));
// return Response.temporaryRedirect(new URI(redirectURL.toString())).build();
// }
//
// OAuthToken requestToken = provider.getRequestToken(oauthToken);
// if(requestToken == null)
// throw new WebApplicationException(401);
//
// OAuthConsumer consumer = requestToken.getConsumer();
//
// String appID = consumer.getKey();
//
//
// DBApps db = new DBApps();
// User user = session.getUser();
// //if app seems to be accepted check referer
// if(accept != null && accept){
// String referer = request.getHeader("Referer");
// if(referer == null)
// throw new WebApplicationException(400);
// URI refererURI = new URI(referer);
// logger.info(refererURI.getHost());
// if(!refererURI.getHost().equals("api.anycook.de"))
// throw new WebApplicationException(400);
//
// db.authorizeApp(user, consumer.getKey());
// }
//
// if(db.checkUserForApp(user, consumer.getKey())){
// String verifier = provider.getVerifier(consumer, user.id);
// String callbackURL = requestToken.getPrincipal().getName();
//
// if(callbackURL == null)
// return Response.ok("oauth_verifier="+verifier).build();
// callbackURL+="?oauth_token="+oauthToken+"&oauth_verifier="+verifier;
// return Response.temporaryRedirect(new URI(callbackURL)).build();
// }
//
//
// StringBuilder responseString = new StringBuilder();
// String appName = db.getAppName(appID);
// db.close();
//
// responseString.append("Hello ").append(user.name).append("!<br>");
//
// responseString.append("Do you want to authorize \"").append(appName)
// .append("\"? <br>");
// responseString.append("<p><a href=\"/de.anycook.oauth/authorize?oauth_token=");
// responseString.append(oauthToken).append("&accept=true\">yes</a> ");
// responseString.append("<a>no</a></p>");
// responseString.append("<br>App:").append(consumer.getKey());
//
// return Response.ok(responseString.toString()).build();
// }
//
// @GET
// @Path("access_token")
// public String getAccessToken(@Context HttpContext hc){
// OAuthServerRequest req = new OAuthServerRequest(hc.getRequest());
// OAuthParameters params = new OAuthParameters();
// params.readRequest(req);
//
// String appID = params.getConsumerKey();
// String verifier = params.getVerifier();
// OAuthToken requestToken = provider.getRequestToken(params.getToken());
// if(requestToken == null){
// throw new WebApplicationException(401);
// }
// String secret = requestToken.getSecret();
// OAuthSecrets secrets = new OAuthSecrets();
// secrets.setTokenSecret(secret);
//
// try {
// if(!OAuthSignature.verify(req, params, secrets)){
// logger.warn("verification failed for "+appID);
// throw new WebApplicationException(401);
// }
//
// }
// catch (OAuthSignatureException ose) {
//
// throw new WebApplicationException(401);
// }
//
// OAuthToken accessToken = provider.newAccessToken(requestToken, verifier);
// return accessToken.toString();
// }
//
//}