Add channel properties for slack (#175)
* Get incoming webhook object infomation from reponse. * Null check for incoming webhook object
This commit is contained in:
committed by
Tommy Parnell
parent
b2094b9c4f
commit
788ef3a1db
@@ -16,7 +16,8 @@ namespace Owin.Security.Providers.Slack.Provider
|
||||
/// <param name="user">The JSON-serialized user</param>
|
||||
/// <param name="accessToken">Slack Access token</param>
|
||||
/// <param name="scope">Indicates access level of application</param>
|
||||
public SlackAuthenticatedContext(IOwinContext context, JObject user, string accessToken, string scope)
|
||||
/// <param name="incomingWebhook">Contains channel infomation about the choosen default channel</param>
|
||||
public SlackAuthenticatedContext(IOwinContext context, JObject user, string accessToken, string scope, JObject incomingWebhook)
|
||||
: base(context)
|
||||
{
|
||||
User = user;
|
||||
@@ -28,6 +29,14 @@ namespace Owin.Security.Providers.Slack.Provider
|
||||
TeamId = TryGetValue(user, "team_id");
|
||||
TeamName = TryGetValue(user, "team");
|
||||
TeamUrl = TryGetValue(user, "url");
|
||||
if (incomingWebhook != null)
|
||||
{
|
||||
ChannelId = TryGetValue(incomingWebhook, "channel_id");
|
||||
ChannelName = TryGetValue(incomingWebhook, "channel");
|
||||
ConfigurationUrl = TryGetValue(incomingWebhook, "configuration_url");
|
||||
HooksUrl = TryGetValue(incomingWebhook, "url");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -73,6 +82,27 @@ namespace Owin.Security.Providers.Slack.Provider
|
||||
/// </summary>
|
||||
public string UserName { get; private set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of the channel choose at oauth time
|
||||
/// </summary>
|
||||
public string ChannelName { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the channel ID of the channel choosen at oauth time
|
||||
/// </summary>
|
||||
public string ChannelId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the confiquration url
|
||||
/// </summary>
|
||||
public string ConfigurationUrl { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the hook url
|
||||
/// </summary>
|
||||
public string HooksUrl { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the <see cref="ClaimsIdentity"/> representing the user
|
||||
/// </summary>
|
||||
|
||||
@@ -95,7 +95,7 @@ namespace Owin.Security.Providers.Slack
|
||||
dynamic response = JsonConvert.DeserializeObject<dynamic>(text);
|
||||
var accessToken = (string)response.access_token;
|
||||
var scope = (string)response.scope;
|
||||
|
||||
var incomingWebhookChannelInfo = response.incoming_webhook;
|
||||
// Get the Slack user
|
||||
var userRequest = new HttpRequestMessage(HttpMethod.Get, UserInfoEndpoint + "?token=" + Uri.EscapeDataString(accessToken));
|
||||
|
||||
@@ -104,7 +104,7 @@ namespace Owin.Security.Providers.Slack
|
||||
text = await userResponse.Content.ReadAsStringAsync();
|
||||
var user = JObject.Parse(text);
|
||||
|
||||
var context = new SlackAuthenticatedContext(Context, user, accessToken, scope)
|
||||
var context = new SlackAuthenticatedContext(Context, user, accessToken, scope, incomingWebhookChannelInfo)
|
||||
{
|
||||
Identity = new ClaimsIdentity(
|
||||
Options.AuthenticationType,
|
||||
@@ -131,6 +131,10 @@ namespace Owin.Security.Providers.Slack
|
||||
{
|
||||
context.Identity.AddClaim(new Claim(ClaimTypes.Webpage, context.TeamUrl, XmlSchemaString, Options.AuthenticationType));
|
||||
}
|
||||
if (!string.IsNullOrEmpty(context.ChannelId))
|
||||
{
|
||||
context.Identity.AddClaim(new Claim("urn:slack:channel_id", context.ChannelId, XmlSchemaString, Options.AuthenticationType));
|
||||
}
|
||||
context.Properties = properties;
|
||||
|
||||
await Options.Provider.Authenticated(context);
|
||||
|
||||
Reference in New Issue
Block a user