Aktivity „dmeagor“

Just tried now and its working, but about an hour ago was still reporting error like this.

11:00:01     C:\Program Files\dotnet\sdk\5.0.401\NuGet.targets(131,5): error : Failed to download package 'Newtonsoft.Json.12.0.2' from 'https://nuget.abp.io/[key removed]/v3/package/newtonsoft.json/12.0.2/newtonsoft.json.12.0.2.nupkg'.
11:00:01     C:\Program Files\dotnet\sdk\5.0.401\NuGet.targets(131,5): error : Response status code does not indicate success: 409 (Conflict).

and...

C:\Program Files\dotnet\sdk\5.0.401\NuGet.targets(131,5): error : The given key '(Volo.Abp.Sms, 4.4.0)' was not present in the dictionary.

Have you fixed anything within the hour or is this a tempremental issue?

We had the same thing appear ourselves earlier, our nuget source is exactly as you have supplied. Also all of the abp.nuget.io packages are returning 403's now (the api keys are still in the url as before)

Looks like the polly package is hosted by abp not nuget. we have the same issue with several other packages.

This appears to be an ongoing issue.

Our builds are faiing with various errors related to your private nuget feed.

Examples (taken from teamcity logs)

C:\Program Files\dotnet\sdk\5.0.401\NuGet.targets(131,5): error : The feed 'ABP Commercial NuGet Source [https://nuget.abp.io/{api-key}/v3/index.json]' lists package 'Newtonsoft.Json.12.0.2' but multiple attempts to download the nupkg have failed. The feed is either invalid or required packages were removed while the current operation was in progress. Verify the package exists on the feed and try again.

Also getting issues with Polly (403) nuget package

I'm not sure if this is the same thing but as of yesterday for no reason at all our teamcity build process started generating these errors without any changes (verified) to our github repo or config so it appears to be an external change/update on your feed.

C:\Program Files\dotnet\sdk\5.0.400\Sdks\Microsoft.NET.Sdk.BlazorWebAssembly\targets\Microsoft.NET.Sdk.BlazorWebAssembly.Current.targets(564,5): error MSB6006: "C:\Program Files\dotnet" exited with code 1.

Thanks for your help with this!

Recreate the dbContext object inside of the loop for each iteration ( each tenant )

Database context instance is expensive, we should reuse

Are you sure about that? Maybe refresh after 500 tenants. Seeding tenants takes 300ms+ after the first few thousand. Opening dbContext should take <10ms.

I suggest creating a testdb with 20k tenants and running some tests on the migrator.

> Repository is abstract, you can do it in your project. see : https://github.com/abpframework/abp/issues/9652

Surely I can't disabled change tracking for ABP seed code though, not sure that would be safe even if I could. We do not yet have our own seeding.

Odpoveď

External provider SSO login is broken on the ABP site and our projects if you already have a local account.

Clicking SSO on login page takes me to a prefilled register page.

If I submit this page I get an error account already exists.

Note the register page doesn't even have the SSO buttons.

Proper flow should simply login with any provider with matching email address (you shouldn't have to remember which provider you used.)

This is a critical bug for us along with the dbmigrator issue I've already reported.

Odpoveď

dbmigrator has a severe performance issue when using 500+ tenants which I believe is caused because of the efcore itterations and n+1 query issues. I think you need to disable changetracking for dbmigrator and/or open dbcontext per tenant. It would also be considerably faster and best practice if the permissions were downloaded as a single query and not 30+ separate small queries. Realistically you're limiting ABP to a small number of tenants otherwise.

Thanks.

Striple has two billling products, the standard payment system and stripe billing which include invoicing/vat etc.

Chargebee is similar to stripe billing where you forward a plan ID to them and it handles the rest through hosted checkout and plan change pages. The tenant is linked by recording a simple customer ID and subscription ID for links the accounts, and a webhook for plan changes and cancellations.

Checkout https://www.chargebee.com/docs/2.0/checkout.html

Self service portal (plan change. cancellations, invoice download etc.) https://www.chargebee.com/docs/2.0/inapp-self-serve-portal.html

Saas subscription invoicing is realy complex now as the VAT location proof rules have changed in the EU, USA, Australia and middle east trade blocks so it makes sense to use these types of service unless you only trade in your own country (which most Saas businesses don't)

Sorry, but how does your (personal?) frustration or opinion helping me in this discussion again?

How does it harm you? Support gave you your answer. I wrote one short followup objecting to ABP becomming dependent on an expensive commercial product, which I'm sure it won't, and you're threatening to rethink your use of the platform! Grow up.

I'm ending here before we have a Godwins Law moment.

Its a bit rich to complain about my very brief opening sentence and then write a small blog post on why I'm wrong and should go write my own identity server.

If you're going to push ABP to add a dependency on a commercial product costing thousands a year then you can expect pushback from those that have to pay for their own costs.

  1. With limited users IS5 will die a slow death.
  2. MS may well implement something now. (BTW. I'll start blaiming MS when they start charging for .net6)
  3. If a V4 fork emerges I hope that will be supported instead of V5.
  4. We're also a two man company and didn't envisage further costs.
  5. Other options like an Azure/Firebase/Amazon adapter should be considered if possible (I've no idea if it is.)

Solution

This has taken me some time to get right so I'm putting the solution here. Use this for either generating the keys identity server keys for production or integrating an old ASP Framework MVC project with the ABP identity server. There are other ways to store the cert rather than a file but this will work for linux too.

There are blog posts on this but they are wrong and will waste hours of your time. In particular do not include the "-certfile dev.crt" to the second openssl line as instructed by one post as it will generate an incompatable production cert.

openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout dev.key -out dev.crt -subj "/CN=dev.com" -days 3650

openssl pkcs12 -export -out dev.pfx -inkey dev.key -in shout.crt

For ABP Identity Server project.

        public override void PreConfigureServices(ServiceConfigurationContext context)
        {
            var hostingEnvironment = context.Services.GetHostingEnvironment();

            PreConfigure<AbpIdentityServerBuilderOptions>(options =>
            {
                options.AddDeveloperSigningCredential = false;
            });

            PreConfigure<IIdentityServerBuilder>(identityServerBuilder =>
            {
                X509Certificate2 x509;

                // todo: passwords need to be moved to secrets storage or deployment system
                if (hostingEnvironment.IsDevelopment())
                {
                    x509 = new X509Certificate2(
                        File.ReadAllBytes(Path.Combine(hostingEnvironment.ContentRootPath, "dev.pfx")),
                        "cert-password");
                }
                else
                {
                    x509 = new X509Certificate2(
                        File.ReadAllBytes(Path.Combine(hostingEnvironment.ContentRootPath, "production.pfx")),
                        "dontaddhere");
                }

                identityServerBuilder
                    .AddSigningCredential(x509)
                    .AddValidationKey(x509);
            });
        }

Legacy MVC Framework app. OwinConfig pipeline. For production put the password and possibly certificate somewhere outsite of the git repo.

var x509 = new X509Certificate2(File.ReadAllBytes(Path.Combine(HostingEnvironment.ApplicationPhysicalPath, "dev.pfx")), "cert-password");
var key = new X509SecurityKey(x509);


app.UseJwtBearerAuthentication(
    new JwtBearerAuthenticationOptions
    {
        AuthenticationMode = AuthenticationMode.Active,
        TokenValidationParameters = new TokenValidationParameters
        {
            ValidAudience = ConfigurationManager.AppSettings["JwtAudience"],
            ValidIssuer = ConfigurationManager.AppSettings["JwtIssuer"],
            IssuerSigningKey = key,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true
        }
    });
Zobrazených 11 až 20 z 37 záznamov
Made with ❤️ on ABP v8.2.0-preview Updated on marca 25, 2024, 15:11