using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace SAN_NotificationsLibrary
{
public class SAN_NotificationService
{
public void ProcessNotification(string userName, string password, string url, string clientId, string clientSecretKey, string customerId, string subject, int days, string body)
{
string tokenPath = "/identity/connect/token";
var uri = new Uri(url);
var accessToken = GetAccessToken($"{uri.Scheme}:
var client = new HttpClient();
client.BaseAddress = new Uri($"{uri.Scheme}:
var request = new HttpRequestMessage(HttpMethod.Post, uri.AbsolutePath);
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
var data = new
{
subject = subject,
body = body,
customerNumber = customerId,
duration = days
};
request.Content = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
var response = client.SendAsync(request).Result;
}
private string GetAccessToken(string baseUrl, string tokenPath, string clientId, string clientSecret, string userName, string password)
{
var client = new HttpClient();
client.BaseAddress = new Uri(baseUrl);
var request = new HttpRequestMessage(HttpMethod.Post, tokenPath);
var byteArray = new UTF8Encoding().GetBytes($"{clientId}:{clientSecret}");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
var postData = new List<KeyValuePair<string, string>>();
postData.Add(new KeyValuePair<string, string>("grant_type", "password"));
postData.Add(new KeyValuePair<string, string>("username", userName));
postData.Add(new KeyValuePair<string, string>("password", password));
request.Content = new FormUrlEncodedContent(postData);
var response = client.SendAsync(request).Result;
var t = response.Content.ReadAsStringAsync().Result;
var token = JsonConvert.DeserializeObject<Token>(t);
return token?.AccessToken;
}
internal class Token
{
[JsonProperty("access_token")]
public string AccessToken { get; set; }
[JsonProperty("token_type")]
public string TokenType { get; set; }
[JsonProperty("expires_in")]
public int ExpiresIn { get; set; }
[JsonProperty("refresh_token")]
public string RefreshToken { get; set; }
}
}
}