Hi,
There is no such endpoint like that for security reasons and ABP uses OpenId Connect standards by default. But the closest option for your case might be Resource Owner Password Flow. Here is the documentation in OpenIdDict: https://documentation.openiddict.com/guides/choosing-the-right-flow.html#resource-owner-password-credentials-flow-not-recommended-for-new-applications
If you create your client by using OpenIdDict Module UI, make sure you checked Allow password flow option:

-- OR --
If you seed your client data in the OpenIdDictDataSeedContributor.cs make sure your application has Password GrantType while creating it:

Then you can follow steps from OpenIdDict documentation that I mentioned above. I highly suggest using one of the OpenId Client library to connect your custom clients properly on the mobile platform. (In example for android: https://github.com/openid/AppAuth-Android)
Thanks for your feedback, I'll ask and learn why this was done like that previously, and we'll update it as you mentioned if possible in the module.
// Initialize edition end date if it is not set or has expired if (!tenant.EditionEndDateUtc.HasValue || tenant.EditionEndDateUtc.Value < DateTime.UtcNow) { tenant.EditionEndDateUtc = DateTime.UtcNow; await TenantRepository.UpdateAsync(tenant); }
This is the code of the method:
public virtual async Task<PaymentRequestWithDetailsDto> CreateSubscriptionAsync(Guid editionId, Guid tenantId)
{
var edition = await EditionManager.GetEditionForSubscriptionAsync(editionId);
var paymentRequest = await PaymentRequestAppService.CreateAsync(new PaymentRequestCreateDto
{
Products = new List<PaymentRequestProductCreateDto>
{
new PaymentRequestProductCreateDto
{
PlanId = edition.PlanId,
Name = edition.DisplayName,
Code = $"{tenantId}_{edition.PlanId}",
Count = 1,
PaymentType = PaymentType.Subscription,
}
},
ExtraProperties =
{
{ EditionConsts.EditionIdParameterName, editionId },
{ TenantConsts.TenantIdParameterName, tenantId },
}
});
var tenant = await TenantRepository.GetAsync(tenantId);
tenant.EditionEndDateUtc = DateTime.UtcNow;
await TenantRepository.UpdateAsync(tenant);
return paymentRequest;
}
You can override it and avoid calling tenant.EditionEndDateUtc = DateTime.UtcNow; this line according to your case
I have noticed the following problem in connection with the payment.
The following scenario:
- Customer already has a valid subscription with an end date > today
- The tenant EditionEndDateUtc is a date in the future
- Now he triggers a new PaymentRequest (e.g. because he wants to change the edition)
- He cancels the payment (with the back button) and has therefore not made a payment
-> Result: His previously valid subscription has been deactivated, as the EditionEndDateUtc is automatically reset when the PaymentRequest is created.
Hi
SubscriptionAppService.CreateSubscriptionAsync(editionId.Value, TenantId.Value)
Creates a freshly new subscription that also resets EditionEndDateUtc.
Renewing or changing existing subscription isn't covered in this method. I'm not sure does stripe cover upgrade scenario and get payment only difference than previous subscription. You may want to cancel the subscription first (Stripe'll refund cost for remaining period) then start payment process from the beginning.
Cancelling process is done in Stripe panel UI, and it'll be handled by webhooks in your application
We'll also enhance this SubscriptionAppService.CreateSubscriptionAsync method for existing subscriptions
OIDC authentication for MauiBlazor is changed and probably this problem doesn't exist in the latest version. If still have some problems with it, you can create another issue since support credit was already refunded
If you use new Blazor hosting logic, your template should have wwwroot/global-scripts.js file, you can add this code to there.
If your template is previously created with old templates, you can go to Pages/_Host.cshtml file and add this script to the end of the body section in that file
Hi SettingManager is a domain service and you cannot use it directly from the Blazor UI.
You'll need to access it by using application services.You can create your own ApplicationService, inject ISettingManager to it and provide endpoints that uses Setting Manager.
See the email settings example: https://github.com/abpframework/abp/blob/44a070b3ccbe45ab8e0b51542a56cdf313611739/modules/setting-management/src/Volo.Abp.SettingManagement.Application/Volo/Abp/SettingManagement/EmailSettingsAppService.cs#L18
If you use MVC or Blazor Server with Single layer option, technically possible to use in UI layer, but it's not recommended to use domain service directly in the UI-layer
Hi, can you please share your application logs?
It seems the server respond with HTTP status code 500 and details are kept in .HttpApi.Host project. Please check its logs share them.
Hi,
Normally there is no warning or threat found by any antivirus software: https://www.virustotal.com/gui/file-analysis/ODY4MDVjYmFkMzI3ODA5M2MzNTU0NTgwNTllYzBkZTA6MTczNjQ5MzM2OQ==
But this kind of warnings might happen according to behavioral actions by the application. If you can send the detailed log about this warning, we can try to find that action and find a better way to do that.
Hi
I realized that maui template is still using Microsoft.Windows.CsWin32 nuget package for msix. As i know you can debug it without msix by giving property
This Microsoft.Windows.CsWin32 was used as a workaround for a bug in openning browser while user clicks to login buttpn.
https://github.com/microsoft/WindowsAppSDK/issues/441
When this problem is resolved, we'll remove that package from templates. So, a regular MAUI application shouldn't have that pacakge by default. You can think about it's an msix app and you should develop like it is. Otherwise you can face some other MAUI issues too