using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using RestSharp; namespace SsoExample { public static class SsoUserVerification { public static RestClient RestClient = new RestClient("https://company.myabsorb.com/api/Rest/v1"); private const string REST_USER = ""; private const string REST_USER_PASSWORD = ""; private const string API_KEY = ""; public static bool VerifyUser(string user) { //Generate authentication token var token = GetToken(REST_USER, REST_USER_PASSWORD, API_KEY); //Check if the user exists var doesUserExist = LookUpUser(token, user); if (!doesUserExist) { //Default department to place users in. var defaultDepartment = Guid.Parse("c0b49894-4674-4faf-ba6a-be86b4f7078e"); doesUserExist = CreateUser(token, user, defaultDepartment); } return doesUserExist; } private static string GetToken(string username, string restPass, string restPrivateKey) { var request = new RestRequest("Authenticate", Method.POST); var authenticateModel = new {Username = username, Password = restPass, PrivateKey = restPrivateKey}; request.AddJsonBody(authenticateModel); var response = RestClient.Execute(request); return response.Content.Trim('"'); } private static bool LookUpUser(string token, string userName) { var request = new RestRequest("users", Method.GET); request.AddHeader("Authorization", token); request.AddQueryParameter("username", userName); var response = RestClient.Execute>(request); if (response.StatusCode == HttpStatusCode.OK) { //Ensure only 1 user is returned. The username should be unique so this is just a precaution. return response.Data.Count == 1; } else { return false; } } private static bool CreateUser(string token, string username, Guid departmentId) { var userModel = new UserModel() { DepartmentId = departmentId, EmailAddress = username + "@company.com", Username = username, Password = "ab5orb!ap1", FirstName = "Firstname", LastName = "Lastname" }; var request = new RestRequest("users", Method.POST); request.AddHeader("Authorization", token); request.AddJsonBody(userModel); var response = RestClient.Execute(request); return response.StatusCode == HttpStatusCode.Created; } private class UserModel { public Guid DepartmentId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Username { get; set; } public string Password { get; set; } public string EmailAddress { get; set; } } } }