[Javalist] Login with IWiW (OpenSocial 0.9)
aszomor at szomor.hu
aszomor at szomor.hu
2012. Jan. 25., Sze, 14:44:02 CET
Hali,
Sikerült a "belépés a iWiW kapuval" a DotNetOpenAuth használatával a
homokozóba (a Twitter-ből kiindulva), most szeretném lekérdezni a
"people/me/@self"-et mi belépési pontja, esetleg tudja valaki ?
Köszönöm,
Szomor Attila.
namespace DotNetOpenAuth.ApplicationBlock {
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using System.IO;
using System.Net;
using System.Web;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OAuth;
using DotNetOpenAuth.OAuth.ChannelElements;
/// <summary>
/// A consumer capable of communicating with IWiW.
/// </summary>
public static class IWiWConsumer {
/// <summary>
/// The description of IWiW's OAuth protocol URIs for use with their
"Sign in with IWiW" feature.
/// </summary>
public static readonly ServiceProviderDescription
SignInWithIWiWServiceDescription = new ServiceProviderDescription {
RequestTokenEndpoint = new
MessageReceivingEndpoint("http://api.sandbox.iwiw.hu/social/oauth/requestToken", HttpDeliveryMethods.GetRequest |
HttpDeliveryMethods.AuthorizationHeaderRequest),
UserAuthorizationEndpoint = new
MessageReceivingEndpoint("http://sandbox.iwiw.hu/pages/auth/authorize.jsp",
HttpDeliveryMethods.GetRequest |
HttpDeliveryMethods.AuthorizationHeaderRequest),
AccessTokenEndpoint = new
MessageReceivingEndpoint("http://api.sandbox.iwiw.hu/social/oauth/accessToken", HttpDeliveryMethods.GetRequest |
HttpDeliveryMethods.AuthorizationHeaderRequest),
TamperProtectionElements = new
ITamperProtectionChannelBindingElement[] { new
HmacSha1SigningBindingElement() },
};
/// <summary>
/// Initializes static members of the <see cref="IWiWConsumer"/> class.
/// </summary>
static IWiWConsumer() {
}
/// <summary>
/// The URI to get the data on the user's home page.
/// </summary>
private static readonly MessageReceivingEndpoint IWiWMeEndpoint =
new
MessageReceivingEndpoint("http://api.sandbox.iwiw.hu/social/rest/people/me/@self", HttpDeliveryMethods.GetRequest |
HttpDeliveryMethods.AuthorizationHeaderRequest);
public static XDocument IWiWMe(ConsumerBase IWiW, string accessToken) {
IncomingWebResponse response =
IWiW.PrepareAuthorizedRequestAndSend(IWiWMeEndpoint, accessToken);
return XDocument.Load(XmlReader.Create(response.GetResponseReader()));
}
}
}
namespace Mvc.Client.Library
{
public class AccountController : BaseInputController
{
public ActionResult OAuth(string providerName, string returnUrl)
{
if (!String.IsNullOrEmpty(providerName))
{
switch
(EnumTool.GetEnumByName<CommunalType>(providerName, CommunalType.None))
{
case CommunalType.IWiW:
//check for ReturnUrl, which we should have
if we use forms
//authentication and [Authorise] on our controllers
if (String.IsNullOrEmpty(returnUrl))
Session["OpenAuthReturnUrl"] = returnUrl;
Session["OpenAuthServiceProvider"] = providerName;
var iwiw = new
WebConsumer(IWiWConsumer.SignInWithIWiWServiceDescription,
IWiWTokenManager);
string iwiwUrl = RB.MVC.Const.BaseAddress +
"Account/OAuthCallback"; //Request.Url.ToString().Replace("OAuth",
"OAuthCallback");
var iwiwCallBackUrl = new Uri(iwiwUrl);
iwiw.Channel.Send(iwiw.PrepareRequestUserAuthorization(iwiwCallBackUrl, null,
null));
break;
}
}
return RedirectToHome();
}
public ActionResult OAuthCallback()
{
string providerName =
Session["OpenAuthServiceProvider"].ToString();
if (!String.IsNullOrEmpty(providerName))
{
Session.Remove("OpenAuthServiceProvider");
bool authorized = false;
string userId = null;
string screenName = null;
string fullName = null;
switch
(EnumTool.GetEnumByName<CommunalType>(providerName, CommunalType.None))
{
case CommunalType.IWiW:
var iwiw = new
WebConsumer(IWiWConsumer.SignInWithIWiWServiceDescription,
IWiWTokenManager);
var iwiwAccessTokenResponse =
iwiw.ProcessUserAuthorization();
if (iwiwAccessTokenResponse != null)
{
userId =
iwiwAccessTokenResponse.ExtraData["user_id"];
screenName = "IWiW teszt";
fullName =
iwiwAccessTokenResponse.ExtraData["screen_name"];
authorized = true;
}
LoggerHelper.Error("OAuth: No access token
response!");
break;
}
if (authorized && !String.IsNullOrEmpty(userId) &&
!String.IsNullOrEmpty(screenName) && !String.IsNullOrEmpty(fullName))
{
return OpenAuthSocialLoginUser(providerName,
userId, screenName, fullName);
}
}
return RedirectToHome();
}
static private InMemoryTokenManager iWiWTokenManager = null;
static private InMemoryTokenManager IWiWTokenManager
{
get
{
if (iWiWTokenManager == null)
{
string iWiWConsumerKey = null;
string iWiWConsumerSecret = null;
IClientConfigManager clientConfigManager =
Container.Resolve<IClientConfigManager>();
if (clientConfigManager.Config != null &&
clientConfigManager.Config.IsDotNetOpenAuthServiceProvidersActive())
{
ServiceProvidersServiceProvider iWiWCfg =
clientConfigManager.Config.GetDotNetOpenAuthServiceProviderByType(CommunalType.IWiW);
if (iWiWCfg != null)
{
iWiWConsumerKey = iWiWCfg.ConsumerKey;
iWiWConsumerSecret = iWiWCfg.ConsumerSecret;
}
}
iWiWTokenManager = new
InMemoryTokenManager(iWiWConsumerKey, iWiWConsumerSecret);
}
return iWiWTokenManager;
}
}
}
}
További információk a(z) Javalist levelezőlistáról