Thanks a lot Rod, i was able to convert the code and obtain the access token.
Thanks Zach, i started with your code and witht the help of chatGPT i have this working demo (for anyone that will need it in the future:)
This is just the begining of course, but its a good start:
public string accessToken = string.Empty;
string Username = "mailbox@mydomain.com";
string Password = "MysTrongPas!";
protected void Page_Load(object sender, EventArgs e)
{
//std.dbg("page_load");
//Somewhere in your code before you attempt any API operations
RegisterAsyncTask(new PageAsyncTask(GetMessages));
}
private string GetOperationURI(string action)
{
return $"https://mail.domain.com/api/v1/{action}";
}
private async Task GetMessages()
{
//Establish Token for System Admin Communication
api_authenticate_user_response authResult = await Authenticate_User_Async(Username, Password);
if (authResult.success == false)
{
//Do Nothing - display error message
token.Text = "failed to get token";
return;
}
else
{
//Save Access Token
accessToken = authResult.accessToken;
//token.Text = accessToken;
}
//std.dbg("accessToken =",accessToken);
//Continue on with your code here
var input_post = new { folder = "inbox", ownerEmailAddress = Username, take = 1 };
var jsonData = JsonConvert.SerializeObject(input_post);
var url = GetOperationURI("mail/messages");
using (var request = new HttpRequestMessage(HttpMethod.Post, url))
{
request.Content = new StringContent(jsonData, Encoding.UTF8, "application/json");
request.Headers.Add("Authorization", "Bearer " + accessToken);
using (var client = new HttpClient())
{
var response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
// Successful response
var responseContent = await response.Content.ReadAsStringAsync();
std.dbg("YES!", responseContent);
// Do something with the response content
}
else
{
// Unsuccessful response
var responseContent = await response.Content.ReadAsStringAsync();
std.dbg("No!", responseContent);
// Log the response content for troubleshooting
}
response.EnsureSuccessStatusCode();
}
}
}
public async Task<api_authenticate_user_response> Authenticate_User_Async(string u, string p)
{
api_authenticate_user_response returnData;
var d = new Dictionary<string, string>();
d.Add("username", u.Trim());
d.Add("password", p.Trim());
var jsonData = JsonConvert.SerializeObject(d);
var callInputs = new StringContent(jsonData, Encoding.UTF8, "application/json");
using (var client = new HttpClient())
{
using (var response = await client.PostAsync(GetOperationURI("auth/authenticate-user"), callInputs))
{
try
{
response.EnsureSuccessStatusCode(); //Will boot us to the Catch if we get anything but a 200 response
var result = await response.Content.ReadAsStringAsync();
returnData = JsonConvert.DeserializeObject<api_authenticate_user_response>(result);
}
catch (Exception ex)
{
std.dbg(ex);
returnData = new api_authenticate_user_response();
}
}
}
return returnData;
}
}
//CLASSES / PROCS Used
public class api_authenticate_user_response
{
public string emailAddress { get; set; }
public bool changePasswordNeeded { get; set; }
public bool displayWelconeWizard { get; set; }
public bool isAdmin { get; set; }
public bool isDomainAdmin { get; set; }
public bool isLicensed { get; set; }
public string autoLoginToken { get; set; }
public string autoLoginUrl { get; set; }
public string localeId { get; set; }
public bool isImpersonating { get; set; }
public bool canViewPasswords { get; set; }
public string accessToken { get; set; }
public string refreshToken { get; set; }
public DateTime accessTokenExpiration { get; set; }
public string username { get; set; }
public bool success { get; set; }
public int resultCode { get; set; }
}
so thanks a lot guys, i hope i'll manage to take it from here, but if not - i know where to ask :)
- ilan.