Avro codecs

Description

AvroInputCodec implementation added along with test cases is avro-codecs within data-prepper-plugins.

Issues Resolved
Resolves #1532
Check List

[ ] New functionality includes testing.
[ ] New functionality has been documented.

[ ] New functionality has javadoc added

[ ] Commits are signed with a real name per the DCO

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Codecov Report

Merging #2527 (690bce2) into main (232f0de) will increase coverage by 0.05%.
The diff coverage is n/a.

:exclamation: Current head 690bce2 differs from pull request most recent head 12fd45e. Consider uploading reports for the commit 12fd45e to get more accurate results

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@             Coverage Diff              @@
##               main    #2527      +/-   ##
============================================
+ Coverage     93.41%   93.46%   +0.05%
- Complexity     2149     2168      +19
============================================
  Files           254      257       +3
  Lines          6012     6059      +47
  Branches        486      488       +2
============================================
+ Hits           5616     5663      +47
+ Misses          268      267       -1
- Partials        128      129       +1

see 11 files with indirect coverage changes
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


Should LockTime types live in units

This issue is to consolidate the discussion on whether or not LockTime should live in units.
I personally think the types are more than mere units and therefore live in primitives not in units.  Some brief points to back up my position:

The relative::LockTime::ZERO value abstracts more details that just plain old zero (time-lock zero is not the same as height-lock zero).
The fact that one can call absolute::LockTime::from_height and from_time both with a u32 shows there is some abstraction.

High priority because if I am wrong then we likely want to do the move before we release units.

My feeling is that they should live in units, though Sequence should stay in primitives. My argument is that these are units for measuring durations and times. They're just shitty ones that don't have total orders.
But I don't feel strongly about this and could be convinced either way.

But if they go to units then Sequence has to go too if we want the new API in #2549.

Hmm, yeah, ok, then the locktimes should stay in primitives.

My feeling is that they should live in units, though Sequence should stay in primitives. My argument is that these are units for measuring durations and times. They're just shitty ones that don't have total orders.

I prefer having them in primitives. I can also live with both of them in units, but I strongly oppose them in being different places. That would just create confusion even if they might technically belong in separate places, people often think of them in the same vein and expect them to belong together.

Are you referring to relative::LockTime and Sequence @sanket1729 or LockTimes and Height/Time?

I would prefer *::LockTime and Sequence to stay in the same crate.

Yep, awesome. So I think we are good to leave everything as is in units for now, and after next release we start on primitives and both *::LockTimes (and Sequence) go there.
@Kixunil is a bit quiet at the moment, mentioning you man so you see this even though I'm closing it.


Don't fill atime and ctime (7-zip compat)

The atime and ctime fields in the GNU entry header seem to be
deprecated. GNU tar only fills them in when --incremental is passed and
the manpage calls that variation "old GNU-format".
Filling the two fields is problematic because 7-zip (which is rather
popular on Windows) interprets the timestamps as directories. WinRAR is
not affected, but libarchive ignores the two fields. Since they are not
well-supported, it's better to leave them empty.
Fixes: #70

Thanks!


doc update : few suggestions to the gitbook doc

add doc about --silent
correct a few typos & phrasing

Thanks for taking the time to improve react-dsfr experience :)


Feature/checkbox group validation

Fixes #102

This change is

Pull Request Test Coverage Report for Build 812

9 of 9 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.4%) to 96.914%

Totals

Change from base Build 802:
0.4%

Covered Lines:
108

Relevant Lines:
108

💛  - Coveralls


Editor scroll, panes not in sync

When having a lot of url's in markdown, the html in the right pane does not line up anymore with what you are writing in the left pane (markdown).

Hi @flip111, and welcome to Ghost's github repo.
Is the behaviour similar to this one? https://github.com/TryGhost/Ghost/issues/5917
If yes, I'd close this. If not, can you expand a bit on how to reproduce your issue? There's a template you can use to report bugs over at the contributing.md of the project :)

It's not similar because the scrollbar does not jump around. Here is some markdown you can use
[Lorem](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [ipsum](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [dolor]((http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com)) [sit](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [amet](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com), [consectetur](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [adipiscing](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [elit](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com). [Donec](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [a](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [diam](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [lectus](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com). [Sed](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [sit](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [amet](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [ipsum](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [mauris](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com). [Maecenas](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) [congue](http://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com) ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis. Curabitur dapibus enim sit amet elit pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros.

notice that Lorem ipsum dolor sit amet is much lower placed in the left pane than it is in the right pane

Yes, it would be, because the left pane is displaying extra information (the actual link) that is not visible on the right hand side, since it's inside the non-rendering html attribute.
Because of that I don't think we can line up all sections perfectly.
On the flipside if you insert an image the left pane is only going to be one line:
![alt text for image](http://link-to-image)

Whereas in the right pane it will be expanded. If the image happens to be 9000px tall, then the content following will be that far below in the right pane.

If you can't line up the sections, perhaps you want to close the issue?

I can't. I don't have the necessary privileges for it. You can however.


[Feature request] Bump the speed of remixes

Problem: The speed of the initial mix is pretty fast, the speed of remixes can take ages.
Goal: To gain reasonable privacy in a reasonable time and then store my coins in cold storage multisig.
As I understand, this is at least partly a Whirlpool issue, however perhaps Sparrow devs could make a workaround or collaborate with Whirlpool devs.
So for the initial mix you pay a fee and the initial mix get's priority over remixes. This way the initial mix gets done a lot faster. Remixes are free, so that is a nice feature. However remixes can take ages to complete. I don't like it when my coins are vulnerable in a hot wallet while they are mixing, not to mention my computer has to stay online and I don't have the security of multisig when mixing.
Let's say I want 3 mixes, it would be nice to be able to choose to pay a fee for 2 initial mixes, speeding up the process a lot. After the 2 initial mixes the coins can go back to postmix for 1 more free mix.
I'd like to hear from anyone if this idea is feasible and if so, how much could be done in Sparrow itself without touching Whirlpool.
Finally, thanks to all the devs for the hard work being done.

I think you're missing the point by miles - to say it politely. I suggest you try to understand the design of whirlpool first. Good resources can be found here and here.
After reading these two articles I think you will appreciate the way whirlpool is implemented a bit more and maybe come to a different conclusion to the one given above.
That being said, I'm in no way a dev of Sparrow wallet and want to emphasize that this is just an users perspective.

One possible reason why remixes are slower than they could be is that some users run a modified client that register multiple outputs via multiple tor connections.
There is zero evidence of this happening but there's AFAIK no way to eleminate this kind of "cheating" with how whirlpool works. Joinmarket is working on fidelity bonds to incentivize the uniqueness of the entity you're mixing with.

I think you're missing the point by miles - to say it politely. I suggest you try to understand the design of whirlpool first. Good resources can be found here and here.
After reading these two articles I think you will appreciate the way whirlpool is implemented a bit more and maybe come to a different conclusion to the one given above.
That being said, I'm in no way a dev of Sparrow wallet and want to emphasize that this is just another users perspective.

I had read these articles before, but to make sure I have read them again.
I have come to the same conclusion, I don't see why my OP is missing the point.
I will quote here from the article you have linked:

For a coinjoin mix to happen, there needs to be 2 to 3 premix UTXOs in each transaction. This ensures that the entropy remains high, and we are not simply mixing the same coins with each other over and over, which would provide little benefit. In addition, the premix UTXOs provide the miner fees for the transaction.
There are generally many more postmix UTXOs than premix UTXOs available to the pool. In practice, this means that your premix UTXOs will usually be mixed to postmix quickly, but once in the Postmix wallet it may take awhile before a postmix-to-postmix transaction happens. Selecting postmix UTXOs for remixing is done at random and therefore subject to variance - you might get several mixes in a short period, or wait a day for progress. Leave Sparrow open in the background (note the Minimize to System Tray functionality in the View menu) and postmix transactions will occur as the UTXOs get selected into a round. Note also that random periods between mixes helps break pattern analysis.

So it is clear that it takes a lot longer to remix because the target is to have at least to premix UTXOs in the pool. My question/suggestion was to make it possible to do for example 2 "initial mixes" and after that let it do the regular remixes for free.
My thought was that this would be a trade-off: a faster, more expensive remix with a bit less privacy improvement compared to a regular free remix.
Now this is an idea, I have seen many complaints about how slow the remixes are in Whirlpool, but I haven't come across suggestions to fix it. If there is a similar discussion going on already I apologize, if not, and people can explain me how this is not possible, or give other workarounds, that is fine as well.

One possible reason why remixes are slower than they could be is that some users run a modified client that register multiple outputs via multiple tor connections. There is zero evidence of this happening but there's AFAIK no way to eleminate this kind of "cheating" with how whirlpool works. Joinmarket is working on fidelity bonds to incentivize the uniqueness of the entity you're mixing with.

That may be possible, but premixes are prioritized over remixes in the protocol, as I mentioned above, so we don't have to look further than that for now imho.

since the count is a very bad proxy for "anonset gained".

Okay, so now you lost me completely here, if there is no gain in anonset gained from remixing

I don't follow @Transisto: do you suggest that somebody is sybil attacking by having multiple instances or that a person just tries to increase his "count" unfairly? Bc the later point would be kind of stupid, since the count is a very bad proxy for "anonset gained".

Assuming that by "count" you mean the number of mixes, the articles you mentioned clearly states that more mixes means a better anonset, and that was also my understanding before. So am I misunderstanding you or what am I missing?

I don't follow @Transisto: do you suggest that somebody is sybil attacking by having multiple instances or that a person just tries to increase his "count" unfairly? Bc the later point would be kind of stupid, since the count is a very bad proxy for "anonset gained".

Since there is supposed to be no association between any of your UTXO after the first mix, all of your outputs could be registered independently for remix.
The fact that sparrow and samourai client allow you to only register a single UTXO per pool is a completely artificial limitation. Either someone could run many instances or they could modify the open-source code to remote that limit.

Hmm, perhaps I should just run more instances of Sparrow so I can mix faster :)

One possible reason why remixes are slower than they could be is that some users run a modified client that register multiple outputs via multiple tor connections. There is zero evidence of this happening but there's AFAIK no way to eleminate this kind of "cheating" with how whirlpool works. Joinmarket is working on fidelity bonds to incentivize the uniqueness of the entity you're mixing with.

That may be possible, but premixes are prioritized over remixes in the protocol, as I mentioned above, so we don't have to look further than that for now imho.

That's not possible with how whirlpool works. The first mix is not the same as remix, Because the coordinator fees and network fees are to be taken out of the extra amount set by the premix.
Remix are free and 3/5 of participant in a mix have to be remix. There is thus an imbalance that slows things down. I've been running a rpi remixing for about two years 24/7, Should I feel bad for using free remix? No because it's providing liquidity to someone wanting mix large amount with as many unique participant.
Anyway whirlpool seems to be working at providing privacy, but I'd never trust the privacy of a single mix and remixes take an inconvenient amount of time.  Adjust your time preference accordingly.

One possible reason why remixes are slower than they could be is that some users run a modified client that register multiple outputs via multiple tor connections. There is zero evidence of this happening but there's AFAIK no way to eleminate this kind of "cheating" with how whirlpool works. Joinmarket is working on fidelity bonds to incentivize the uniqueness of the entity you're mixing with.

That may be possible, but premixes are prioritized over remixes in the protocol, as I mentioned above, so we don't have to look further than that for now imho.

That's not possible with how whirlpool works. The first mix is not the same as remix, Because the coordinator fees and network fees are to be taken out of the extra amount set by the premix.
Remix are free and 3/5 of participant in a mix have to be remix. There is thus an imbalance that slows things down. I've been running a rpi remixing for about two years 24/7, Should I feel bad for using free remix? No because it's providing liquidity to someone wanting mix large amount with as many unique participant.
Anyway whirlpool seems to be working at providing privacy, but I'd never trust the privacy of a single mix and remixes take an inconvenient amount of time. Adjust your time preference accordingly.

So I understand what you are saying, we need the premix/remix system and there is an imbalance which is hard to avoid.
I have no issues with the fact that remixes are free, I understand that they provide liquidity.
And yes more mixes is better, my target is at least 3 rounds, if it would be faster I would do more.
I like the Sparrow wallet and it is great that Whirlpool supports multiple wallets (Sparrow and Samourai for now afaik).
Now all that being said, I was looking for ideas to speed up my own and everyone else their coinjoins. Both Wasabi and Joinmarket are quite a bit faster (from my testing, experiences may vary).
We all know the issues with Wasabi, and once Wasabi 1.x liquidity dries up, my main coinjoin solution (in pure throughput) will be needing a replacement and I am sure I am not alone. But many old Wasabi users will be put off my the speed of the remixes.
Joinmarket seems a good long term (more decentralized) alternative, but the client implementations are pretty bad right now and the mixes fail too often imho.
Perhaps the Sparrow devs could add Joinmarket in addition to Whirlpool, that might be nice.
Anyway, I will continue on my quest for faster coinjoins until then :)

So it looks like running multiple instances of Sparrow is easy, just need to create a new wallet for each instance and off we go ;)
It seems that this is the solution for me, for now.

So for the initial mix you pay a fee and the initial mix get's priority over remixes. This way the initial mix gets done a lot faster.

The initial mix doesn't get "priority" by paying "the fee" or "a higher fee". It is the reason the mix starts in the first place. Like you already discovered and quoted above, it is needed to provide new liquidity. Since the remixers have all equal output utxos, they are also needed to provide the transaction fees for the coinjoin.

since the count is a very bad proxy for "anonset gained".

Okay, so now you lost me completely here, if there is no gain in anonset gained from remixing
Assuming that by "count" you mean the number of mixes, the articles you mentioned clearly states that more mixes means a
better anonset, and that was also my understanding before. So am I misunderstanding you or what am I missing?

Okay lets say you did your first mix. Your mix count sits for days on count 1, what you equate to a anonset of 5 (since that's the number of participants).
What your missing is that one of your mixing peers might have been chosen for a remix. Your anonset increased to 9 without your mix count changing (you hide in a crowd of your utxo, the one of the 3 non mixing peers + 5 for the one who has done a remix, which resulted in 5 more equal outputs in his consecutive coinjoin).
So without you ever getting an increasing mix count your anonset can grow to 5+4*n where 0 <= n <= 4 so maximal 21 (n is the number of peers who participated in your initial mix but had a remix). And that is just the result of TWO layers of coinjoin. The math behind this is like an avalanche: it explodes with time. There's a tool called boltzmann in the samourai repo which can do the math for you and "follow" all possible paths. You'd be surprised how fast it can grow with time.

My question/suggestion was to make it possible to do for example 2 "initial mixes" and after that let it do the regular remixes for free.

You would break the equal outputs of whirlpool. (3 equal utxos + 2 unequal premix utxos) go in, 5 equal outputs come out. How do you want to transfer your "speedy" bonus fee to the outputs? After all, if all outputs are equal which one is the one the whirlpool coordinator should "speed up"?
tl;dr: you're missing the point if you think that the mix count is the definite benchmark for your anonset. It isn't. It is a rather bad proxy. You shouldn't aim to increase it a all costs. Since you have 4 coinjoin peers vs your ONE utxo, I'm inclined to think that you should even hope that your peers get a remix, since you can achieve a faster and way bigger anonset if they keep remixing. It's a numbers game and the numbers are better off if you don't view peers as competition but helpful friends.

tl;dr: you're missing the point if you think that the mix count is the definite benchmark for your anonset. It isn't. It is a rather bad proxy. You shouldn't aim to increase it a all costs. Since you have 4 coinjoin peers vs your ONE utxo, I'm inclined to think that you should even hope that your peers get a remix, since you can achieve a faster and way bigger anonset if they keep remixing. It's a numbers game and the numbers are better off if you don't view peers as competition but helpful friends.

Your answers gave me better insights in the way it works. I understood only the very basics, but there is more nuance to it (there always is more nuance and deeper understanding in Bitcoin :) ).
Just to make it clear, I never meant to imply that free remixes were bad or that coinjoin peers are competition, I was just hoping to pay a bigger fee and get the remixes done faster.
It also is a matter of representation, in the Sparrow wallet, the only thing to go on to get an idea how big the anon set is are the number of mixes.
Anyway thanks all for the help and insights.

Sorry if I my explanation wasn't the best but it was well after midnight here. Keep on studying and if you have Telegram Messenger hop into the Samourai and Sparrow group. You will gain tremendous knowledge regarding the tools, their incentives and functioning.

It also is a matter of representation, in the Sparrow wallet, the only thing to go on to get an idea how big the anon set is are the number of mixes.

100% on point. The representation with mix counts is a bad one (same applies to Samourai, this isn't Sparrow specific) but all other possibilities are way more computation intensive. So it is born out of the lack of better alternatives.

For future reference a newer article explaining whirlpool:
Track Me If You Can — How Bitcoin Forward-Looking Anonymity Sets Work


Added maven publish git action workflow

Describe your changes :

Added maven publish git action workflow

Type of change :

[x] Improvement
[x] New feature

Checklist:

[x] I have read the CONTRIBUTING document.
[x] I have commented on my code, particularly in hard-to-understand areas.
[ ] I have added tests that prove my fix is effective or that my feature works.
[x] All new and existing tests passed.

Reviewers
@mohityadav766 @harshach

@mohityadav766, can you please add a safe to test label so checks can run?


Refine Public Interface or Interfaces

The main interface (for React) might look something like:
<Shape className="..." type="curyvy" orientation="vertical" padding={ 32 } />

But maybe some wrapper on top of that and/or different interfaces could be helpful, such as:
<Shape className="..." type="curyvy" orientation="vertical" padding={ 32 } repeat={ [8. 16] } />
<Shapes className="..." config={ [{ ... }, { ... }] } />

On the other hand, we need to decide what properties and values are we going to support and if a higher level abstraction could be helpful for some or some combinations of them.
Some additional considerations:

If the size (width and height) of the SVG is set to 1em, the user will be able to change the size using the font-size CSS property, without having to pass that as a prop.
If the color of the SVG is set to currentColor, the user will be able to change it using the color CSS property, without having to pass that as a prop.
If the shape area has paddings, we might want to respect that.
Being able to set individual classes for each shape could be useful if the user wants more control to do something like animations or fancy rich data visualization (like a shape-based heatmap).
The user might want to set a global theme for the shapes. Still, this can always be done spreading a constant that contains the common properties, so would be low prio. In any case, it can be done with a Provider.
There's always a random component when generating the shapes. The user could "freeze" that using a seed property.

@vincentropy I'll leave it to you to document the current (low-level I guess) interface in the README and link it here, for now I just added some things we could consider when tweaking them.

@Danziger I updated the public interface and expanded the readme to describe how it (currently) works.

I disabled themes for now, until we can figure out how to do this properly (see #5)
the current interface enables drawing specific shapes inside a react component

proposed "repeat" will be available through the "complexity" parameter
proposed "orientation" is available through the transform style parameter (i.e. by setting rotation)
in principle size can also be set through the style parameters but I have not yet changed the default

some parameters still need to be implemented. see #7 #6

See #4 for all changes.
I'm splitting some of the suggestions from above into separate issues. I would propose having separate issues for styling #8 and themes #5.


actix-web support

Hello !
I would like to use this crate with actix-web. Is this possible ?
I don't see any may to pass rustls-acme's output to actix HTTPServer
Maybe this crate would need to implement ServerServiceFactory in order to use ServerBuilder::listen ?

You may be correct about implementing ServerServiceFactory, I'm not 100% sure yet. But I suspect that using a smart rustls config with HttpServer::listen_rustls or HttpServer::bind_rustls may do the trick as well. I'll look into this later today.

Yes, exactly. acme-rustls used to work like that, but then people started running into issues with alpn negotiation (iirc, if the client specifies alpn protocols and the server as well, there needs to be a match to proceed).  But since actix already adds “h2” and “http/1.1” I don't think this applies here.
Could you something like this and report back:
    let mut state = AcmeConfig::new(args.domains)
        .contact(args.email.iter().map(|e| format!("mailto:{}", e)))
        .cache_option(args.cache.clone().map(DirCache::new))
        .directory_lets_encrypt(args.prod)
        .state();
    let rustls_config = state.challenge_rustls_config();

    spawn(async move {
        loop {
            match state.next().await.unwrap() {
                Ok(ok) => log::info!("event: {:?}", ok),
                Err(err) => log::error!("error: {:?}", err),
            }
        }
    });

    HttpServer::new(|| App::new().route("/", web::get().to(HttpResponse::Ok)))
        .bind_rustls_021(("<IP_ADDRESS>", 8080, ), rustls_config)?
        .run()
        .await

I'm happy to add a low_level_actix-web example similar to low_level_tokio.rs if that works.

It works, thank you ! It's a little bit magical to see it do everything automatically :)
rustls-acme will be in SQLPage v0.17 !

[2023-11-25T02:11:09.643Z INFO  sqlpage] Starting server on <IP_ADDRESS>:8080
[2023-11-25T02:11:09.643Z INFO  sqlpage::webserver::http] Will start HTTPS server on <IP_ADDRESS>:443
[2023-11-25T02:11:09.643Z INFO  sqlpage::webserver::https] Starting HTTPS configuration for testtls.ophir.dev
[2023-11-25T02:11:09.644Z INFO  actix_server::builder] starting 8 workers
[2023-11-25T02:11:09.644Z INFO  actix_server::server] Actix runtime found; starting in Actix runtime
[2023-11-25T02:11:09.651Z INFO  sqlpage] Server started successfully.
        SQLPage is now running on http://<IP_ADDRESS>:8080/ and on https://testtls.ophir.dev
        You can write your website's code in .sql files in /home/olojkine/dev/sqlpage.
[2023-11-25T02:11:09.652Z INFO  sqlpage::webserver::https] ACME configuration event: AccountCacheStore
[2023-11-25T02:11:09.672Z DEBUG rustls::client::hs] No cached session for DnsName("acme-staging-v02.api.letsencrypt.org")
[2023-11-25T02:11:09.672Z DEBUG rustls::client::hs] Not resuming any session
[2023-11-25T02:11:10.003Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:10.003Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:10.004Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:10.004Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:10.186Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:10.457Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:10.457Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:10.457Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:10.457Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:10.617Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:10.895Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:10.896Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:10.896Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:10.896Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:11.140Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:11.535Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:11.535Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:11.535Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:11.535Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:11.727Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:12.028Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:12.028Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:12.028Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:12.028Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:12.229Z DEBUG rustls_acme::acme] response: "{\n  \"status\": \"pending\",\n  \"expires\": \"2023-12-02T02:11:12Z\",\n  \"identifiers\": [\n    {\n      \"type\": \"dns\",\n      \"value\": \"testtls.ophir.dev\"\n    }\n  ],\n  \"authorizations\": [\n    \"https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/9668899504\"\n  ],\n  \"finalize\": \"https://acme-staging-v02.api.letsencrypt.org/acme/finalize/126687904/12514248154\"\n}"
[2023-11-25T02:11:12.239Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:12.525Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:12.525Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:12.526Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:12.526Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:12.693Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:13.075Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:13.075Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:13.075Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:13.075Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:13.279Z DEBUG rustls_acme::acme] response: "{\n  \"identifier\": {\n    \"type\": \"dns\",\n    \"value\": \"testtls.ophir.dev\"\n  },\n  \"status\": \"pending\",\n  \"expires\": \"2023-12-02T02:11:12Z\",\n  \"challenges\": [\n    {\n      \"type\": \"http-01\",\n      \"status\": \"pending\",\n      \"url\": \"https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/9668899504/rZtzQQ\",\n      \"token\": \"vTY6qQj8AiSGG7o73fDzUAMGa3ynjRV8UQ_WpaiwMlw\"\n    },\n    {\n      \"type\": \"dns-01\",\n      \"status\": \"pending\",\n      \"url\": \"https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/9668899504/prQZAA\",\n      \"token\": \"vTY6qQj8AiSGG7o73fDzUAMGa3ynjRV8UQ_WpaiwMlw\"\n    },\n    {\n      \"type\": \"tls-alpn-01\",\n      \"status\": \"pending\",\n      \"url\": \"https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/9668899504/DRzKsg\",\n      \"token\": \"vTY6qQj8AiSGG7o73fDzUAMGa3ynjRV8UQ_WpaiwMlw\"\n    }\n  ]\n}"
[2023-11-25T02:11:13.279Z INFO  rustls_acme::state] trigger challenge for testtls.ophir.dev
[2023-11-25T02:11:13.290Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:13.689Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:13.689Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:13.690Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:13.690Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:13.906Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:14.305Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:14.305Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:14.306Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:14.306Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:14.508Z DEBUG rustls_acme::acme] response: "{\n  \"type\": \"tls-alpn-01\",\n  \"status\": \"pending\",\n  \"url\": \"https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/9668899504/DRzKsg\",\n  \"token\": \"vTY6qQj8AiSGG7o73fDzUAMGa3ynjRV8UQ_WpaiwMlw\"\n}"
[2023-11-25T02:11:14.793Z DEBUG rustls::server::hs] decided upon suite TLS13_AES_128_GCM_SHA256
[2023-11-25T02:11:14.793Z DEBUG rustls::server::tls13::client_hello] Client unwilling to resume, DHE_KE not offered
[2023-11-25T02:11:14.794Z DEBUG rustls::server::hs] Chosen ALPN protocol [97, 99, 109, 101, 45, 116, 108, 115, 47, 49]
[2023-11-25T02:11:14.910Z DEBUG rustls::common_state] Sending warning alert CloseNotify
[2023-11-25T02:11:15.246Z DEBUG rustls::server::hs] decided upon suite TLS13_AES_128_GCM_SHA256
[2023-11-25T02:11:15.246Z DEBUG rustls::server::tls13::client_hello] Client unwilling to resume, DHE_KE not offered
[2023-11-25T02:11:15.246Z DEBUG rustls::server::hs] Chosen ALPN protocol [97, 99, 109, 101, 45, 116, 108, 115, 47, 49]
[2023-11-25T02:11:15.513Z DEBUG rustls::common_state] Sending warning alert CloseNotify
[2023-11-25T02:11:15.520Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:15.840Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:15.840Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:15.840Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:15.840Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:16.055Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:16.454Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:16.454Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:16.455Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:16.455Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:16.635Z DEBUG rustls_acme::acme] response: "{\n  \"identifier\": {\n    \"type\": \"dns\",\n    \"value\": \"testtls.ophir.dev\"\n  },\n  \"status\": \"pending\",\n  \"expires\": \"2023-12-02T02:11:12Z\",\n  \"challenges\": [\n    {\n      \"type\": \"http-01\",\n      \"status\": \"pending\",\n      \"url\": \"https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/9668899504/rZtzQQ\",\n      \"token\": \"vTY6qQj8AiSGG7o73fDzUAMGa3ynjRV8UQ_WpaiwMlw\"\n    },\n    {\n      \"type\": \"dns-01\",\n      \"status\": \"pending\",\n      \"url\": \"https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/9668899504/prQZAA\",\n      \"token\": \"vTY6qQj8AiSGG7o73fDzUAMGa3ynjRV8UQ_WpaiwMlw\"\n    },\n    {\n      \"type\": \"tls-alpn-01\",\n      \"status\": \"pending\",\n      \"url\": \"https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/9668899504/DRzKsg\",\n      \"token\": \"vTY6qQj8AiSGG7o73fDzUAMGa3ynjRV8UQ_WpaiwMlw\"\n    }\n  ]\n}"
[2023-11-25T02:11:16.635Z INFO  rustls_acme::state] authorization for testtls.ophir.dev still pending
[2023-11-25T02:11:16.643Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:16.927Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:16.927Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:16.928Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:16.928Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:17.182Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:17.191Z DEBUG rustls::server::hs] decided upon suite TLS13_AES_128_GCM_SHA256
[2023-11-25T02:11:17.191Z DEBUG rustls::server::tls13::client_hello] Client unwilling to resume, DHE_KE not offered
[2023-11-25T02:11:17.192Z DEBUG rustls::server::hs] Chosen ALPN protocol [97, 99, 109, 101, 45, 116, 108, 115, 47, 49]
[2023-11-25T02:11:17.356Z DEBUG rustls::common_state] Sending warning alert CloseNotify
[2023-11-25T02:11:17.488Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:17.488Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:17.488Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:17.488Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:17.683Z DEBUG rustls_acme::acme] response: "{\n  \"type\": \"tls-alpn-01\",\n  \"status\": \"pending\",\n  \"url\": \"https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/9668899504/DRzKsg\",\n  \"token\": \"vTY6qQj8AiSGG7o73fDzUAMGa3ynjRV8UQ_WpaiwMlw\"\n}"
[2023-11-25T02:11:17.778Z DEBUG rustls::server::hs] decided upon suite TLS13_AES_128_GCM_SHA256
[2023-11-25T02:11:17.778Z DEBUG rustls::server::tls13::client_hello] Client unwilling to resume, DHE_KE not offered
[2023-11-25T02:11:17.778Z DEBUG rustls::server::hs] Chosen ALPN protocol [97, 99, 109, 101, 45, 116, 108, 115, 47, 49]
[2023-11-25T02:11:17.882Z DEBUG rustls::server::hs] decided upon suite TLS13_AES_128_GCM_SHA256
[2023-11-25T02:11:17.882Z DEBUG rustls::server::tls13::client_hello] Client unwilling to resume, DHE_KE not offered
[2023-11-25T02:11:17.883Z DEBUG rustls::server::hs] Chosen ALPN protocol [97, 99, 109, 101, 45, 116, 108, 115, 47, 49]
[2023-11-25T02:11:17.894Z DEBUG rustls::common_state] Sending warning alert CloseNotify
[2023-11-25T02:11:18.094Z DEBUG rustls::common_state] Sending warning alert CloseNotify
[2023-11-25T02:11:18.209Z DEBUG rustls::server::hs] decided upon suite TLS13_AES_128_GCM_SHA256
[2023-11-25T02:11:18.209Z DEBUG rustls::server::tls13::client_hello] Client unwilling to resume, DHE_KE not offered
[2023-11-25T02:11:18.210Z DEBUG rustls::server::hs] Chosen ALPN protocol [97, 99, 109, 101, 45, 116, 108, 115, 47, 49]
[2023-11-25T02:11:18.399Z DEBUG rustls::common_state] Sending warning alert CloseNotify
[2023-11-25T02:11:19.695Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:20.037Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:20.037Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:20.038Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:20.038Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:20.255Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:20.563Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:20.563Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:20.563Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:20.563Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:20.755Z DEBUG rustls_acme::acme] response: "{\n  \"identifier\": {\n    \"type\": \"dns\",\n    \"value\": \"testtls.ophir.dev\"\n  },\n  \"status\": \"valid\",\n  \"expires\": \"2023-12-25T02:11:17Z\",\n  \"challenges\": [\n    {\n      \"type\": \"tls-alpn-01\",\n      \"status\": \"valid\",\n      \"url\": \"https://acme-staging-v02.api.letsencrypt.org/acme/chall-v3/9668899504/DRzKsg\",\n      \"token\": \"vTY6qQj8AiSGG7o73fDzUAMGa3ynjRV8UQ_WpaiwMlw\",\n      \"validationRecord\": [\n        {\n          \"hostname\": \"testtls.ophir.dev\",\n          \"port\": \"443\",\n          \"addressesResolved\": [\n            \"2a01:4f8:c0c:5754::2\"\n          ],\n          \"addressUsed\": \"2a01:4f8:c0c:5754::2\"\n        }\n      ],\n      \"validated\": \"2023-11-25T02:11:14Z\"\n    }\n  ]\n}"
[2023-11-25T02:11:20.755Z INFO  rustls_acme::state] completed all authorizations
[2023-11-25T02:11:20.765Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:21.164Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:21.164Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:21.165Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:21.165Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:21.378Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:21.654Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:21.654Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:21.654Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:21.654Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:21.881Z DEBUG rustls_acme::acme] response: "{\n  \"status\": \"ready\",\n  \"expires\": \"2023-12-02T02:11:12Z\",\n  \"identifiers\": [\n    {\n      \"type\": \"dns\",\n      \"value\": \"testtls.ophir.dev\"\n    }\n  ],\n  \"authorizations\": [\n    \"https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/9668899504\"\n  ],\n  \"finalize\": \"https://acme-staging-v02.api.letsencrypt.org/acme/finalize/126687904/12514248154\"\n}"
[2023-11-25T02:11:21.881Z INFO  rustls_acme::state] sending csr
[2023-11-25T02:11:21.900Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:22.296Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:22.296Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:22.296Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:22.296Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:22.505Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:22.783Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:22.783Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:22.783Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:22.783Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:23.008Z DEBUG rustls_acme::acme] response: "{\n  \"status\": \"processing\",\n  \"expires\": \"2023-12-02T02:11:12Z\",\n  \"identifiers\": [\n    {\n      \"type\": \"dns\",\n      \"value\": \"testtls.ophir.dev\"\n    }\n  ],\n  \"authorizations\": [\n    \"https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/9668899504\"\n  ],\n  \"finalize\": \"https://acme-staging-v02.api.letsencrypt.org/acme/finalize/126687904/12514248154\"\n}"
[2023-11-25T02:11:23.008Z INFO  rustls_acme::state] order processing
[2023-11-25T02:11:24.020Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:24.442Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:24.442Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:24.442Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:24.442Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:24.656Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:24.929Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:24.929Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:24.930Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:24.930Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:25.158Z DEBUG rustls_acme::acme] response: "{\n  \"status\": \"valid\",\n  \"expires\": \"2023-12-02T02:11:12Z\",\n  \"identifiers\": [\n    {\n      \"type\": \"dns\",\n      \"value\": \"testtls.ophir.dev\"\n    }\n  ],\n  \"authorizations\": [\n    \"https://acme-staging-v02.api.letsencrypt.org/acme/authz-v3/9668899504\"\n  ],\n  \"finalize\": \"https://acme-staging-v02.api.letsencrypt.org/acme/finalize/126687904/12514248154\",\n  \"certificate\": \"https://acme-staging-v02.api.letsencrypt.org/acme/cert/fae847b77e0534dcf0cb5a3957970e02fbce\"\n}"
[2023-11-25T02:11:25.158Z INFO  rustls_acme::state] download certificate
[2023-11-25T02:11:25.170Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:25.568Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:25.568Z DEBUG rustls::client::tls13] Not resuming
[2023-11-25T02:11:25.569Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:25.569Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:25.782Z DEBUG rustls::client::hs] Resuming session
[2023-11-25T02:11:26.051Z DEBUG rustls::client::hs] Using ciphersuite TLS13_AES_256_GCM_SHA384
[2023-11-25T02:11:26.051Z DEBUG rustls::client::tls13] Resuming using PSK
[2023-11-25T02:11:26.051Z DEBUG rustls::client::tls13] TLS1.3 encrypted extensions: [ServerNameAck]
[2023-11-25T02:11:26.051Z DEBUG rustls::client::hs] ALPN protocol is None
[2023-11-25T02:11:26.286Z DEBUG rustls_acme::acme] response: "-----BEGIN CERTIFICATE-----\n ... -----END CERTIFICATE-----\n"
[2023-11-25T02:11:26.286Z INFO  sqlpage::webserver::https] ACME configuration event: DeployedNewCert
[2023-11-25T02:11:26.287Z INFO  sqlpage::webserver::https] ACME configuration event: CertCacheStore


https localhost  invalid

I open a local server for WKWebView.  When I use http normally, but https, it is invalid to add a certificate.  I use the certificate provided in demo.
But Xcode throw Error:
WebPageProxy::didFailProvisionalLoadForFrame: frameID=3, domain=NSURLErrorDomain, code=-1200
class ViewController: UIViewController, WKNavigationDelegate {
    var server: TelegraphServer!
    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        server = TelegraphServer()
        server.start()

        let url = URL(string: "https://localhost:9000/")!
        webView.load(URLRequest(url: url))
        webView.allowsBackForwardNavigationGestures = true
    }

    override func loadView() {
        webView = WKWebView()
        webView.navigationDelegate = self
        view = webView
    }
}

class TelegraphServer: NSObject {

    func start() {
        // Comment out this line if you want HTTP instead of HTTPS
        loadCertificates()
        setupServer()
    }

    private func loadCertificates() {
      // Load the P12 identity package from the bundle
      if let identityURL = Bundle.main.url(forResource: "localhost", withExtension: "p12") {
        print("indentityUrl \(identityURL)");
        identity = CertificateIdentity(p12URL: identityURL, passphrase: "test")
      }

      // Load the Certificate Authority certificate from the bundle
      if let caCertificateURL = Bundle.main.url(forResource: "ca", withExtension: "der") {
        caCertificate = Certificate(derURL: caCertificateURL)
      }

      // We want to override the default SSL handshake. We aren't using a trusted root
      // certificate authority and the hostname doesn't match the common name of the certificate.
      if let caCertificate = caCertificate {
        tlsPolicy = TLSPolicy(commonName: "localhost", certificates: [caCertificate])
      }
    }
}

I have solved  WKwebview need trust
    func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {

        if let serverTrust = challenge.protectionSpace.serverTrust {
            let credential = URLCredential(trust: serverTrust)
            completionHandler(.useCredential, credential)
        }else{
            completionHandler(.useCredential, nil)
        }
    }

Hi, sorry I haven't been really active in this project. Glad you found the solution.
Certificates can only be trusted if they have been issued by one of the trusted certificate authorities. Otherwise you need to explicitly trust the certificate on the client, like you did in your code.
In the demo app we do this using these lines: https://github.com/Building42/Telegraph/blob/main/Examples/Demo/TelegraphDemo.swift#L213


Make the sample based on docker-compose

@rberrelleza I think I am going to remove the code and point to our tutorial:
https://okteto.com/docs/tutorials/stacks-getting-started
as we do in the how-to tutorials we have to make it easier to maintain.
Thoughts?


Extract a single frame

Would it be feasible to extract just a single frame as an SVG?

Sure, that is what derhuerst/asciicast-to-svg does.
We'd have to implement this over at marionebl/svg-term-.

Ping @mathiasbynens (Guess I completed my comment edits after you read it)

Introduce via https://github.com/marionebl/svg-term-cli/commit/7ec55c4ec0b381bac237f0358eba48609544b674

$ yarn global add svg-term-cli@latest
$ svg-term --version
1.1.0

svg-term --cast=3 --out nyancat.svg --frame --from=3000 --to=6000 #1
svg-term --cast=rfS1M5ynKm1hGaBqJYJj0mGCi --out jsvu.svg --frame -at 40000 # 2

Did the --frame option get removed? It would have been really useful...

Ah never mind, you don't need --frame -at 10, just --at 10.


Add a dropdown to select the assembly in TestBrowser

Doesn't seem to be getting the correct framework tests for me:

Discussed and concluded that a method will be added to load an assembly that isn't referenced. At the moment all rulesets are referenced from osu.Desktop, so this will work, and I'm happy to merge this for now.


Proxy configuration

I have my backstage running in a Kubernetes cluster through the helm chart.
I have defined a proxy configuration for newrelic,
proxy:
  '/newrelic/apm/api':
    target: https://api.newrelic.com/v2
    headers:
      X-Api-Key: {{ .Values.newrelic.api.key}}

However, when I open the page for newrelic, I see it making calls to newrelic directly and not via the proxy. It fails as expected as API key will not be sent.
Request URL: https://api.newrelic.com/v2/applications.json
Request Method: GET
Status Code: 401 Unauthorized
Remote Address: x.x.x.x:443
Referrer Policy: strict-origin-when-cross-origin

Is there something I am missing. I have followed and done all steps for enabling proxy as mentioned in the docs.

That's rather strange! The setup looks correct, and looking at plugin-newrelic there's nowhere in the source that calls directly to api.newrelic.com. 🤔  Are you on the latest plugin version (0.3.9)?

I am using the helm chart provided in https://github.com/backstage/backstage/tree/master/contrib/chart/backstage
Will check if it has the right version of the plugin.


Question: is lefilament/odoo:14.0 ready for production ?

Hello,
As you probably know, I'm trying to put a Odoo instance in production using Le Filament's Ansible role and got some issues.
I would like to know if lefilament/odoo:14.0 image can be used in production at the moment with all Odoo modules developed by Le Filament.
Thanks for your feedback.

Dear @nqb normally you could use it in production. However we do not (yet), we only use it in demo/test environment and therefore we have not created any additional module for that version. (we are still using 12.0 and most of the additional modules we developed for v10.0 and v12.0 can be found on our GitLab instance here : https://sources.le-filament.com/lefilament
Also you will find that many OCA modules are not yet migration to version 14.0.

Thanks for your feedback. This was my feeling.


remove process signature from tokumx

What does this PR do?
The process signature of tokumx contains file path, which caused some problems when Processes team tries to use it to parse the command line. I discussed with @DataDog/agent-integrations they mentioned that this integration is old and deprecating, so we agreed to stop supporting it.
Motivation
cc: @DataDog/processes
Additional Notes

Review checklist (to be filled by reviewers)

[ ] Feature or bugfix MUST have appropriate tests (unit, integration, e2e)
[ ] PR title must be written as a CHANGELOG entry (see why)
[ ] Files changes must correspond to the primary purpose of the PR as described in the title (small unrelated changes should have their own PR)
[ ] PR must have changelog/ and integration/ labels attached

no docs review needed


Add the torch pip install full command

maybe something like:
pip install torch===1.4.0 torchvision===0.5.0 -f https://download.pytorch.org/whl/torch_stable.html
just a suggestion.BTW,what is the os for the original setup?

Thanks for your interest!
That's a good idea, but I think it's okay to use the requirements file for version 1.4.
Please let me know if there are any inconveniences or problems that I haven't noticed when using the requirements file.
We used Ubuntu 16 and 18 in our experiments.

nah it is ok just a few searches away.I will close this then.^^


Support for stopping other hooks for receiving keystroke notifications

It would very useful to implement the return code for the hooks to stop certain keystrokes for monitored keyboards to reaching also the standard input.
My use case is that a barcode scanner input get captured but the input also arrives on the System.in InputStream too.
An R/W marker method setHandled(), or stopProcessing() could indicate that the CallNextHookEx() should by bypassed for this iteration.
ref: https://learn.microsoft.com/en-us/windows/win32/winmsg/lowlevelkeyboardproc
If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.
If nCode is greater than or equal to zero, and the hook procedure did not process the message, it is highly recommended that you call CallNextHookEx and return the value it returns; otherwise, other applications that have installed WH_KEYBOARD_LL hooks will not receive hook notifications and may behave incorrectly as a result.
If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the rest of the hook chain or the target window procedure.

Hey @c-giannoulis, sounds like a good addition. Thanks for providing the reference to the API. Feel free to provide a PR adding this feature. At the moment I don't have the time to work on the project, but I would be happy to review & merge a PR any point in time. Thanks.


Merging Sauce Connect content

Thank you for contributing to the sauce-docs project!
A well described pull request helps maintainers quickly review and merge your change
Before submitting your PR, please check our contributing
guidelines, applied for this repository. Avoid large PRs, help reviewers by making them as simple
and short as possible.

Description

Motivation and Context

Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[X] Documentation fix (typos, incorrect content, missing content, etc.)

Checklist

[ ] I have read the contributing document.
[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.
[ ] I have added tests to cover my changes.
[ ] All new and existing tests passed.

@lauramthomas are you revising the changes? Apologies for this falling through the cracks.

Yes! No worries--I found some errors that would have made it fail anyway.
On Fri, Apr 16, 2021 at 11:40 AM James Tacker @.***>
wrote:

@lauramthomas https://github.com/lauramthomas are you revising the
changes? Apologies for this falling through the cracks.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/saucelabs/sauce-docs/pull/310#issuecomment-821300131,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ANMRAY7OAP5CEMOEFWCUA5TTJBR6LANCNFSM4255YDXQ
.

--
Laura Thomas


Downstream thunder fix to R4_2

Downstream below PR to R4_2 to fix OpenCDMI Release issue and Thunder crash issue
https://github.com/rdkcentral/Thunder/pull/1510
https://github.com/rdkcentral/Thunder/pull/1514
https://github.com/rdkcentral/Thunder/pull/1535
https://github.com/rdkcentral/Thunder/pull/1553

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


[add-resource] New Theme (Dark Quark)

I would like to add my new plugin/theme to the Grav Repository.
Here are the project details: HeavyWolfPL/grav-theme-darkquark
It is just a dark, eye-friendly during the night version of Quark theme with some changes. I've noticed that people wanted a darker version of Quark so here it is, DarkQuark!

Added in GPM - will be available soon.
Thanks! 👍


Submit revised eye care artifact materials to CDS Connect

I'm currently wrapping up presentational changes to connect.json, and @ssebast2 is expecting a version for review (by their team) NLT Monday.

Has been published


[Feature] Implement hive connector

What type of PR is this：

[ ] bug
[x] feature
[ ] enhancement
[ ] others

Which issues of this PR fixes ：

Fixes #
related with https://github.com/StarRocks/starrocks/issues/5840
Problem Summary(Required) ：

HiveMetadata will be submitted in the next patch.

[FE PR Coverage check]
:disappointed: fail : 35 / 45 (77.78%)
file detail

path
covered line
new line
coverage

:large_blue_circle:
com/starrocks/connector/Connector.java
0
1
00.00%

:large_blue_circle:
com/starrocks/connector/ConnectorMgr.java
5
8
62.50%

:large_blue_circle:
com/starrocks/external/hive/HiveRepository.java
9
12
75.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveConnector.java
12
15
80.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveMetadata.java
3
3
100.00%

:large_blue_circle:
com/starrocks/server/MetadataMgr.java
1
1
100.00%

:large_blue_circle:
com/starrocks/external/hive/HiveMetaCache.java
4
4
100.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveConnectorFactory.java
1
1
100.00%

run starrocks_fe_unittest

[FE PR Coverage check]
:disappointed: fail : 35 / 45 (77.78%)
file detail

path
covered line
new line
coverage

:large_blue_circle:
com/starrocks/connector/Connector.java
0
1
00.00%

:large_blue_circle:
com/starrocks/connector/ConnectorMgr.java
5
8
62.50%

:large_blue_circle:
com/starrocks/external/hive/HiveRepository.java
9
12
75.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveConnector.java
12
15
80.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveMetadata.java
3
3
100.00%

:large_blue_circle:
com/starrocks/server/MetadataMgr.java
1
1
100.00%

:large_blue_circle:
com/starrocks/external/hive/HiveMetaCache.java
4
4
100.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveConnectorFactory.java
1
1
100.00%

let's add todo for the comments, which should be handled in the final version

[FE PR Coverage check]
:disappointed: fail : 35 / 45 (77.78%)
file detail

path
covered line
new line
coverage

:large_blue_circle:
com/starrocks/connector/Connector.java
0
1
00.00%

:large_blue_circle:
com/starrocks/connector/ConnectorMgr.java
5
8
62.50%

:large_blue_circle:
com/starrocks/external/hive/HiveRepository.java
9
12
75.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveConnector.java
12
15
80.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveMetadata.java
3
3
100.00%

:large_blue_circle:
com/starrocks/server/MetadataMgr.java
1
1
100.00%

:large_blue_circle:
com/starrocks/external/hive/HiveMetaCache.java
4
4
100.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveConnectorFactory.java
1
1
100.00%

[FE PR Coverage check]
:disappointed: fail : 35 / 45 (77.78%)
file detail

path
covered line
new line
coverage

:large_blue_circle:
com/starrocks/connector/Connector.java
0
1
00.00%

:large_blue_circle:
com/starrocks/connector/ConnectorMgr.java
5
8
62.50%

:large_blue_circle:
com/starrocks/external/hive/HiveRepository.java
9
12
75.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveConnector.java
12
15
80.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveMetadata.java
3
3
100.00%

:large_blue_circle:
com/starrocks/server/MetadataMgr.java
1
1
100.00%

:large_blue_circle:
com/starrocks/external/hive/HiveMetaCache.java
4
4
100.00%

:large_blue_circle:
com/starrocks/connector/hive/HiveConnectorFactory.java
1
1
100.00%


feat(APIM-79): add endpoint to get parties by search text

Introduction
This PR is to add the GET /party?searchText={searchText} endpoint.
Resolution
The endpoint:

gets an ID token from FIS IdP,
sends an authenticated GET /Party/Search/{searchText} to ACBS,
transforms the response to extract the relevant fields.

To do this, I've added:

a party module for the new controller
a get-party-by-search-text service in the party module

Should this endpoint be renamed to /parties in accordance with API spec guidelines, as this endpoint returns an array of parties that match the search text?

Should this endpoint use searchtext (as Mulesoft does) or searchText (in line with the camel casing used for other parameters, e.g. partyIdentifier)?

Should this endpoint use searchtext (as Mulesoft does) or searchText (in line with the camel casing used for other parameters in other endpoints, e.g. partyIdentifier)?

happy for it to change to searchText. Just remember to update the spreadsheet to indicate this change

Should this endpoint be renamed to /parties in accordance with API spec guidelines, as it returns an array of parties that match the search text?

yes, please. remember to update the spreadsheet to indicate this change

Should this endpoint be renamed to /parties in accordance with API spec guidelines, as it returns an array of parties that match the search text?

yes, please. remember to update the spreadsheet to indicate this change

Cool, I've updated the spreadsheet


get step name within container

Feature request
I noticed we can get info like taskrun name (pod name) by $(context.task.name), but is there a way to get step name (container name) within the container?
https://tekton.dev/vault/pipelines-v0.17.3/variables/
Use case

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: task-get-context
spec:
  steps:
    - name: step-get-context
      image: ubuntu
      script: |
        #!/bin/bash
        echo "TaskRunUID: $(context.taskRun.uid)"
        echo "Task name: $(context.task.name)"
        echo "TaskRun name: $(context.taskRun.name)"
        echo "Step name: $(spec.steps[0].name)"                  # does not work
        cat /etc/hostname

@LilyHolms this is not supported today. Do you have a specific use case for this feature?


Kotlin

It works!!
Test runner started.
Found 1 fully qualified test methods
Finished in 160 ms
Running 1 tests
Successfully scheduled test matrix: matrix-qmxikcq0nmq
0 / 1 complete
FINISHED
Test run finished
1 / 1 complete.

Fetching test results...
Billable minutes: 1m
        Test duration: 7s
        "Run duration: 206s
        "Name: Instrumentation test
        Targets: class com.example.app.ExampleInstrumentedTest#useAppContext
        Dimensions:   Model: NexusLowRes
  Version: 25
  Locale: en
  Orientation: portrait

        Outcome: success
        https://console.firebase.google.com/project/delta-essence-114723/testlab/histories/bh.58317d9cd7ab9ba2/matrices/5563083458558020755

1 tests. successful: 1, failed: 0
Billable minutes: 1
Physical device cost: $0.08
Virtual  device cost: $0.02
Finished in 3m 49s

Nice! Good work with this.


Skip report notifications

Describe the bug
When an unsupported notification is send to the plugin there is no [accepted] in the response.
For example Report notifications
Fix in Shopware 6 plugin: https://github.com/Adyen/adyen-shopware6/blob/develop/src/Service/NotificationReceiverService.php#L271-L274
To Reproduce
Steps to reproduce the behavior:

Adyen customer area send REPORT notification
Plugin can't handle this type of notification
Plugin returns [notification save error] instead of [accepted]
Adyen customer area mentions that notifications are not accepted well.

Expected behavior
@acampos1916 , I'm not sure 100% about this:
When a notifications can't be handle correctly the plugin must catch the error and always return [accepted] instead of returning the error.
Currently there is validation for the 'existence of an order' when creating the notification and when processing the notification. The validation when creating a notification is not needed: https://github.com/Adyen/adyen-shopware5/blob/develop/Components/Builder/NotificationBuilder.php#L64-L68

@acampos1916
Currently the following responses are sent from calling /notification/adyen call:

'[Invalid or missing auth]' (failed auth)
'[wrong hmac detected]'  (failed HMAC validation)
'[notification save error]' (issue during notification processing)
'[accepted]' (call was processed)

Since sending back a response something else than '[accepted]'would  stop the Adyen notifications center,
Is it more prudent to treat it more like a webhook and always send '[accepted]' back when the call has been received?
Or to split it in:

on failed authentication or HMAC: sent the error response
in other cases send back '[accepted]'

@acampos1916
Currently the following responses are sent from calling /notification/adyen call:

'[Invalid or missing auth]' (failed auth)
'[wrong hmac detected]'  (failed HMAC validation)
'[notification save error]' (issue during notification processing)
'[accepted]' (call was processed)

Since sending back a response something else than '[accepted]'would  stop the Adyen notifications center,
Is it more prudent to treat it more like a webhook and always send '[accepted]' back when the call has been received?
Or to split it in:

on failed authentication or HMAC: sent the error response
in other cases send back '[accepted]'

Hey @bortefi,
Coincidentally I'm taking a look at #81 which also touches up on this subject. Indeed all responses should return [accepted] if the authentications are valid. In that case your proposal is the desired way.

Hey @bortefi,
Coincidentally I'm taking a look at #81 which also touches up on this subject. Indeed all responses should return [accepted] if the authentications are valid. In that case your proposal is the desired way.


Refactor code based on review

I've reviewed this code for the following article: https://zsmb.co/lets-review-pokedex/
These are the changes I'm suggesting in that article, take any or all of them as you wish! :)

I was reading your blog post and I wanted to place a question. Since there's no way to comment (I don't use Twitter), and no "issues" tab is available in this repo, I'm going to comment on this pull request. Hope you don't mind ^^.
Instead of:
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    pokedexViewModel = ViewModelProviders.of(this).get(PokedexViewModel::class.java)
}

Couldn't we just (I use Dagger and Data Binding):
    @Inject
    lateinit var viewModelFactory: ViewModelFactory
    protected val viewModel: ViewModel by lazy { ViewModelProvider(this, viewModelFactory).get(getViewModelClass()) }
    protected lateinit var binding: ViewBinding

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        binding = DataBindingUtil.inflate(inflater, getLayoutResId(), container, false)
        binding.setVariable(BR.viewModel, viewModel)
        binding.lifecycleOwner = viewLifecycleOwner
        ...
        return binding.root
    }

What do you think of this?
Thanks for your time!

First of all, I've now added an Issues tab over there for discussions, didn't realize that GitHub doesn't have one for forks by default (which I believe is what happened?).
And yes, sure, lazy initialization of a ViewModel makes sense, and should work perfectly fine!
However, since I know that I'll be using it at some point anyway (thus never actually avoiding its creation), I would probably just initialize it at one known point in the code, which makes it easier to reason about. Plus lazy has a tiny bit of overhead by default for its locking behaviors and checks for whether the value is initialized, which you could also avoid by just creating it in a lifecycle method.
(And then in my actual applications, I have ViewModel creation abstracted away by some base classes. so I never actually write code like this myself.)

Yup all this kind of logic is abstracted in BaseClasses, normally my ChildActivities/Fragments, only have to "initViews" and manage the observe logic, etc.
Thanks for your input :)


Make NodesTranslator async

NodesTranslator have a lot of sync code that block main thread.
 It's unacceptable long time.
But this only scan, when page translation are not lazy, it take a lot of time to translate nodes and add blocking time.
We have to

[ ] Research locking places and measure time
[ ] Make code async, to handle pages by chunks with delays

As described in #219, we call observe -> unobserve -> observe.
So for one translation we take 4 seconds to scan a page

But except this delay, it looks that we have one more delay after scan. The delay affects on getting translation data

We should try to limit a number of nodes that await translation

Before work on this task, we have to create e2e tests


UX for credential exchange within a messaging context

Define user experience for exchange of credentials and other attachments within a DIDComm message context

duplicate of #55


TypeError: load_platform() missing hass_config argument in HA 0.80+

Upgrading to Home Assistant 0.83.2 broke goldair_heater with the error
TypeError: load_platform() missing 1 required positional argument: 'hass_config'
Seems to be due to hass_config becoming a required argument to load_platform() possibly in Home Assistant 0.80 (refer https://github.com/home-assistant/home-assistant/pull/17952).
Fixed by adding config as an argument to all the load_platform() calls in golder_heater.py. Patch load_platform.patch.txt attached.

Closing this as there has been no activity and many updates since. If there is still an issue, please open a new ticket. Thanks!


Flaky failures turned red on NNBD Mac ARM64 JIT bots for standalone/io/named_pipe_script_test

The tests
standalone/io/named_pipe_script_test RuntimeError (expected Pass)

are failing on configurations
dartk-strong-mac-release-arm64
dartk-weak-asserts-mac-release-arm64

These tests have been flaky since early March, now finally went red.

This is a dup of https://github.com/dart-lang/sdk/issues/28737


UniqueMessageId and LocalTime is automatically embedded in Payload

I was trying below code
            ` options.ApplicationMessageInterceptor = context =>
              {
                  if (MqttTopicFilterComparer.IsMatch(context.ApplicationMessage.Topic, "gateway/msgRequest"))
                  {
                       string msg = System.Text.Encoding.UTF8.GetString(context.ApplicationMessage.Payload);
                       var messageObj = JObject.Parse(msg);
                 }
            };`

I see that context.ApplicationMessage.Payload is having UniqueMessageId and LocalTime embedded automatically. Is it by design?

Please close this, It's  a bug in my code. I was appending these values in my client :(


Add Plants vs. Zombies wiki redirect

Recently, the Plants vs. Zombies wiki move to wiki.gg from Fandom. I'm requesting that the new wiki link should be added to the list of sites.
Link: https://plantsvszombies.wiki.gg

Never mind, it's already listed. Oops.


Make tool more robust

Currently the tool fails, when the ARC cannot be parsed. Instead the tool should try to salvage any information it can find and write an output file in any case.

0eacbcb38f09b9681f59a4f4beaeb7b0de7bd4ec


Implement RESPONSE_ARGS

This issue describes how to implement the RESPONSE_ARGS variables
There are two specific use cases:

JSON
GraphQL

For JSON we will just copy the behavior from the request body processor by collapsing the json into a map, like:
{
  "foo": "bar",
  "bar": [1, 2]
}

into:
m map[string][]string = {
  "json.foo": {"bar"},
  "json.bar.0": {"1"},
  "json.bar.1:: {"2"},
}

Some specific requirements for this implementation:

Are we setting the response body processor by using ctl:setResponseBodyProcessor?
Should we add additional directives to handle the maximum buffer sizes?
If there is no response body processor what happens?
Should we default to json when the response mime is json?

Let's continue the discussion in https://github.com/corazawaf/coraza/issues/480


Added Translation Template

Signed-off-by: Amit Kumar Jaiswal<EMAIL_ADDRESS>

Coverage remained the same at 93.691% when pulling 4ea986103b23074bbdc538b32122dc699b18d008 on amitkumarj441:patch-1 into 7d4f7a8c2a9a8df0e9748b2d322814a142a2a9af on openwisp:master.

Coverage remained the same at 93.691% when pulling 4ea986103b23074bbdc538b32122dc699b18d008 on amitkumarj441:patch-1 into 7d4f7a8c2a9a8df0e9748b2d322814a142a2a9af on openwisp:master.

@amitkumarj441 great document!
Can you go ahead and proceed with creating the translation strings in the django app and ensure those are linked to transifex?
Find out more about how to do this here:
https://docs.djangoproject.com/en/1.11/topics/i18n/translation/

Closed for inactivity.


Fix failing tests due to upstream changes

Change language scraping test to lemonde.fr
as the hu site now uses xml:lang instead of
lang. TODO: investigate xml:lang.
Apparently jsonld.com stopped actually
having and jsonld in their page (???) so
remove that site from being checked.
Fortune.com no longer provides the author
in their open graph metadata :/
Afposten added an additional field to
their Twitter metadata

Self-merging as it's just tests ;)

:+1:


Working on issues # 12, 11 and 4

Created

homepage in view
fleetpage in view
flightpage in view
aboutus page in view
-fixed template in view

Thanks Steven


Deep comparison of Iterables?

Summary
This is a common testing pattern. But I'm new to AssertJ and it's not clear to me if AssertJ offers any support. Advice?
The Problem
A test wants to verify that an actual Iterable contains exactly the contents expected. (For now, assume this means "in any order", although the order-specific variation is also common.) Where "exactly" means that:

each expected element has an actual counterpart that is equals to it
and each expected element and its actual counterpart match using property-by-propery comparison
and the same strategy is applied recursively to all element properties that implement Iterable
and a failure message identifies each expected or actual element without an equals counterpart
and, when all elements have equals counterparts, a failure message for any property mismatch identifies exactly which property of which element (property) failed to match.

Deep comparison = identity + values
The problem arises because "deep comparison" of Iterable instances involves two distinct questions:

Identity: Does an expected element exist?
Values: Does an actual element contain all of the values expected for it?

So choosing to compare either by equals (identity, i.e. "primary key" fields) or by properties (values, i.e. non-key fields) is insufficient. You need to do both. First by identifying equals counterparts, then by matching properties. And recursively applying the same comparison to Iterable property values.

I know AssertJ lacks a user guide but I'm working on it (here's a wip version https://assertj.github.io/doc/).
Use containsExactly for exact comparison (including the order) or containsExactlyInAnyOrder if the order does not matter.
AssertJ allows to compare elements field by field recursiveley with usingRecursiveFieldByFieldElementComparator.  It compares elements fields (honoring equals if a field type has an overridden equals method).
It does not exactly matches your need, the comparison fails at the first difference and does not show the field difference but the assertion error message (like containsExactly).
Note that a work is in progress to revamp the recursive comparison API in #1002.

Done and documented https://assertj.github.io/doc/#assertj-core-recursive-comparison-for-iterable


Only latest annotation with BrushLabel is saved in Completion

Describe the bug
I open already submitted Completion and update it with Brush and save changes, after opening it again only latest mask is visible (as well as content of completion .json is rewritten i.e. size is significantly smaller if new mask is smaller).
To Reproduce
Steps to reproduce the behavior:

Use following config:

<View>
    <BrushLabels name="tag" toName="img">
        <Label value="Label" background="blue" />
    </BrushLabels>
    <Image name="img" value="$image" zoom="true" zoomControl="true" />
</View>

Create annotation task and open it for labeling.
Create big mask with brush and submit.
JSON file for the completion appeared on disk in ./label-studio/my_project/completions and its size is 3 Mb.
Open completion again.
Either create new brush mask or click on existing and create additional mask segment (smaller size) and press Update button.
Size of the same JSON file changed to 246K.
Open task for labeling again.
Only second mask is displayed.

Please note that the same behavior is observed if new Brush region created instead of extending the existing one.
Expected behavior
The initial segmentation mask is extended with added segment. Previously created mask is not disappeared.
Screenshots
Step 3:

Step 6:

Step 9:

Environment (please complete the following information):

OS: Ubuntu 18.04
Browser: Chrome
Version: 83
docker-compose version: 1.26.0
docker version: 19.03.12

@a99user We've just released label-studio 0.7.4rc2 with a lot of fixes regarding to brushes, including this issue. If it's still actual, please check it. Also we've added brush converters on export page to save the results as numpy 2d arrays and PNG.
pip uninstall label-studio
pip install label-studio==0.7.4rc2

Fixed in https://github.com/heartexlabs/label-studio/releases/tag/v0.7.4


Adding Notebooks with Colab links

Adding notebooks
The purpose of all that is to make it super easy for others to quickly experiment and test out using a notebook like Google Colab.
The notebook contains the exact same code logic written in the main repo's README file.

I have added a directory called notebooks.
Added 2 notebooks namely: training and inference
The notebooks have a clickable link to Google Colab.

I've cleaned up some silly errors from the last versions and added some code separations.


No display of loading result

When clicking "process" there shoould be displayed that the result is 'loading' until there's an answer from the server. At the moment nothing happens, there's displayed 'No Result' until you get an result.
functional review: @TobiasNx
code review: @fsteeg

Looks good.

Deployed to https://metafacture.org/playground/


order versions appear broken due to recent fsspec changes

@martindurant I see that fsspec.asyn module got rid of maybe_sync function, but older versions of s3fs still rely on the method which now fails to import. For example s3fs==0.5.2 now does not seem to work after a clean install. I see that s3fs requirements.txt asked for fsspec>=0.8.0 and that is now incompatible without an upper boundary.

Yes, you are right.
This is not unusual! If you know you need an older version of s3fs, then you will have to analyse your full set of packages to find compatible versions.
For reference, I mean in the future to do two things:

move to calendar versioning, since the "semantics" of x.y.z are often confusing for a dev-facing library like this
always release fsspec, s3fs and gcsfs together
explicitly pin s3fs and gcsfs's version to the co-released fsspec. That means more work for me.

Thanks for responding. As another option I could also see reserving y in x.y.z for breaking changes and specifying upper bound always in a proactive way. If I have to choose between always using the bleeding edge dependency and using one that definitely works I'd always choose the latter. In any case, thanks again for keeping it alive and improving!

"breaking changes" are too hard to identify for libraries so closely tied

I encounter another error related to fsspec when I run pytest
scrapy_project/project/utils.py:9: in <module>
    import s3fs
../../.conda/envs/d-scraper/lib/python3.8/site-packages/s3fs/__init__.py:1: in <module>
    from .core import S3FileSystem, S3File
../../.conda/envs/d-scraper/lib/python3.8/site-packages/s3fs/core.py:11: in <module>
    from fsspec.utils import infer_storage_options, tokenize, setup_logging
E   ImportError: cannot import name 'setup_logging' from 'fsspec.utils' (/home/me/.local/lib/python3.8/site-packages/fsspec/utils.py)
================================================================== short test summary info ===================================================================
ERROR  - ImportError: cannot import name 'setup_logging' from 'fsspec.utils' (/home/me/.local/lib/python3.8/site-packages/fsspec/utils.py)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
====================================================================== 1 error in 1.00s ======================================================================

@psdon - the function is there in the 0.9.0 fsspec code. Please see the discussion above and update your version of fsspec.


Update SDK godocs

What were you trying to achieve?
Currently the SDK godocs are outdated from the recent changes.
What are the expected results?
Update SDK godocs to reflect recent changes.
What are the received results?
Past permissions like owner  is  still in the docs but they are no longer being used. Some of the examples are failing.
Steps To Reproduce

Update the relations and permissions.
Test and update the examples individually.

In what environment did you encounter the issue?
Magistrala
Additional information you deem important
No response

Some of the SDK function godocs have invalid relations ,
Listing endpoints of groups and channel (may be domain ) can list with Permissions and Relations
We need to check the funcationalies of endpoints and update the godocs for List , assign ,unassign and other endpoint
Example:
In below function , godocs have owner but we don't have owner relation. Like we need to  check and modify the godocs
	// ListUserChannels list all channels belongs a particular user id.
	//
	// example:
	//	pm := sdk.PageMetadata{
	//		Offset: 0,
	//		Limit:  10,
	//		Permission: "edit", // available Options:  "administrator", "delete", edit", "view", "share", "owner", "admin", "editor", "viewer"
	//	}
	//  channels, _ := sdk.ListUserChannels("user_id_1", pm, "token")
	//  fmt.Println(channels)
	ListUserChannels(userID string, pm PageMetadata, token string) (ChannelsPage, errors.SDKError)
	```


Improved null check for varargs

Adding null checks for cases:

If literal null is passes
No value passed
A variable is passed with null value during runtime

cleanup

Codecov Report
Attention: Patch coverage is 0% with 2 lines in your changes are missing coverage. Please review.

Project coverage is 34.50%. Comparing base (59551e4) to head (e236fab).
Report is 144 commits behind head on master.

Files
Patch %
Lines

...main/java/org/apache/pinot/client/BrokerCache.java
0.00%
1 Missing :warning:

...e/pinot/common/function/scalar/ArrayFunctions.java
0.00%
0 Missing and 1 partial :warning:

Additional details and impacted files
@@              Coverage Diff              @@
##             master   #12673       +/-   ##
=============================================
- Coverage     61.75%   34.50%   -27.25%
+ Complexity      207        6      -201
=============================================
  Files          2436     2377       -59
  Lines        133233   130206     -3027
  Branches      20636    20216      -420
=============================================
- Hits          82274    44926    -37348
- Misses        44911    81951    +37040
+ Partials       6048     3329     -2719

Flag
Coverage Δ

custom-integration1
?

integration
<0.01% <0.00%> (-0.01%)
:arrow_down:

integration1
<0.01% <0.00%> (-0.01%)
:arrow_down:

integration2
0.00% <0.00%> (ø)

java-11
0.00% <0.00%> (-61.71%)
:arrow_down:

java-21
34.50% <0.00%> (-27.13%)
:arrow_down:

skip-bytebuffers-false
34.50% <0.00%> (-27.25%)
:arrow_down:

skip-bytebuffers-true
<0.01% <0.00%> (-27.73%)
:arrow_down:

temurin
34.50% <0.00%> (-27.25%)
:arrow_down:

unittests
46.16% <0.00%> (-15.58%)
:arrow_down:

unittests1
46.16% <0.00%> (-0.73%)
:arrow_down:

unittests2
?

Flags with carried forward coverage won't be shown. Click here to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Reusable Workflows

Create a reusable workflow in .github/workflows/scripts to create a comment on a pull request, attempting to delete any existing bot comments.

The scope of this can be expanded to create re-usable plugin components for GitHub Actions, to reduce the conditional behaviour of job execution.
Each workflow should correlate to a single trigger.
Reusing workflows

https://akjaw.com/github-actions-reducing-duplication-boilerplate/


DB corrupt after Power Failure

I found some issue regarding DB corrupt after power failure while working on a project that is using bigcouch. I have already asked question in project's mailing list, but they suggested to get back to bigcouch community for help.
I also noticed, usually it happens when we use SSD hard disk on the physical machine. Also when I check database at the time of issue, I found only accounts related dbs were missing and all the other dbs like offnet, system_config were available.
So I am not sure if this issue is related to bigcouch or application specific. Is there any way we can avoid such type of problem so that the system we build will be a production ready.
Thanks
Gaurav

@gauravsaini03: It's difficult to diagnose based on merely "DB corrupt" but I could imagine a couple ways this could be theoretically feasible.

Something's up at the OS level or application level and some/all files have been removed from disk. That is, not BigCouch's fault. I'd put my money on this option.

The /dbs meta-database had not checkpointed recent data at the time of power loss. This is unlikely given the replication topology of /dbs, but it could be possible, especially if you're running with delayed_commits=true and/or some odd cluster configuration and/or some odd hardware configuration. If this is the case (identifiable by the presence of shards on disk) you could simply add the relevant shard mappings to /dbs on port 5986 and your databases would be resurrected.

@banjiewen Thanks for looking into this. I understand your point, actually, we are using Kazoo 2600hz with uses bigcouch as it's database. In case of power failure, we found some accounts databases gone missing and all other are in the database. I raised the concern in the 2600hz mailing list but they recommended to discuss once here also. (https://groups.google.com/forum/#!searchin/2600hz-dev/database$20corrupted|sort:relevance/2600hz-dev/TTcvio8-0wg/O8wMcGcvDAAJ)
Also, I have made delayed_commits=false but that didn't worked as well.
Thanks


Balls of Steel

Sadly this great pinball game runs slowly on linux with Wine. When try using cnc-ddraw the tables won't load. Just showing a black screen. Here is the log file:
cnc-ddraw-1.log

Hm, it does work for me. What if you try to enable windowed mode, does it work then?
Note: The menu is not using DirectDraw (AKA cnc-ddraw), only the tables.

The game is working fine on windows. Note that the menu is not using DirectDraw (AKA cnc-ddraw), only the tables do.
I tried to get it working on linux it's crashing right away on startup (before I even get to the tables). My version got a bunch of weird additional exe files in the folder that seem to "reset your display profile". Maybe running on of them can fix the black screen?

Nevermind, it does work fine if you wait on the splash screen. Do not press ESC, do not click!
Game is working fine here. No issues. I'm using the RIP version from myabandonware

Yes the RIP version is v1.0 and for Windows95 only. The patches basically patch to v1.3 and then to 1.3c. I use the GOG version, which have the patches already included. But still no luck. Starting bos.exe to run the game. Bosloader.exe won't run on WINE.
The patch says:
Changes:

fixes for keyboard speed, gfx profiler, directdraw crashes

The game runs but slow. When i then use cnc-ddraw directdraw crashes if i load a table (black screen), What you mean by "wait on splash screen"? I wait there to load the menu, but when i start a table the described problem.

Yes the RIP version is v1.0 and for Windows95 only. The patches basically patch to v1.3 and then to 1.3c. I use the GOG version, which have the patches already included. But still no luck. Starting bos.exe to run the game. Bosloader.exe won't run on WINE.

Yes the RIP version needs you to create a 32bit wine prefix, this will allow you to set the windows version to windows 95 in winecfg and will get rid of the error message (the game will now start without complaining)

The patch says:
Changes:

fixes for keyboard speed, gfx profiler, directdraw crashes

The game runs but slow. When i then use cnc-ddraw directdraw crashes if i load a table (black screen), What you mean by "wait on splash screen"? I wait there to load the menu, but when i start a table the described problem.

Maybe they've done some changes in the GOG version which break cnc-ddraw? Not sure, I don't have the GOG version so I can't test it.
The RIP version will crash on startup if you click or press ESC, maybe they've fixed that in the GOG version.

Here are my test results:
v1.0 CD version - Doesn't work at all
v1.2 RIP version - Shows Windows95 required error, but can be workarounded (see previous post) and then works fine
v1.2 CD version - Works fine - no issues
v1.3 CD version - Doesn't load table - failed to determine refresh rate error - Can be fixed by setting "Limit game speed" to "Sync with monitor refresh rate" in "Compatibility settings" with cnc-ddraw config.exe

Thanks for investigating my problem. I still have no luck.
Patching to v1.2 with the mentioned bos12reg.exe fails to start the game with my Wine version. Either with cnc-draw or without. Even starting on Windows 10 brings the same error.
Using the mentioned bos13rp.exe (v1.3) won't start the tables. Also when i change ddraw.ini to maxgameticks=-2.
I believe the GOG version is just v1.3c with the bos loader exe.
I use Batocera v39, which uses a recent version of Wine Glorious Eggroll. Older Batocera versions had Wine Lutris or Proton, but still the same results in BOS.

About v1.2: What error do you get? Did you try to downgrade v1.3 to v1.2? Maybe you can't downgrade and that's why it fails?
About v1.3: Did you try to start the game in a window? I also didn't notice the error message before (it was hidden behind the window). Maybe If you run the game in a window it may be possible to get some additional info. In my game, the first start of the game had a whit message in the top left saying something about profiling me display hardware and then I got the failed to determine refresh rate error.
About v1.3c: I've seen those files (4 different numbered patches in a zip) but those didn't work for me. It didn't recognize my game executable so I can't say anything about it.

About v1.2: I upgraded from v1.0 (CD) to v1.2 like you did. I get the following error when i start a table (even on native Windows 10):
Application Error: C:\Temp\bos\barbarin.DDP
An privileged instruction was executed at address 00431c7c
Click on OK to terminate the application
About v1.3: I started the game full screen. I saw no profiling message. I will try v1.3 this week on a regular linux distro and post my results.

Just been toying around with this again and noticed it never actualyl worked properly. The game runs too fast I think, it feels really weird.
I got the 1.3 version slightly better working now so I'm leaving a test build here:
cnc-ddraw-BOS.zip
TBH, I think I'll never be able to get this working properly - It's just pure luck and it will behave differently on each system so I'm closing this here now, sorry

Hi FunkyFr3sh,
i just had time to test your test build. And its working with this version! I even use 1.3c (GOG version).
And yes the game runs too fast. But after investigating with the native version on Windows, its excactly twice the time it should be. Maybe a refresh rate problem, like 30 instead of 60.
Anyway good work and big thanks.

Addition: Parameter maxgameticks only works for the loading screen (with the bar). All values beside -1 will be ignored showing the pinball, but work at loading screen.

Maybe a refresh rate problem, like 30 instead of 60.

Yeah, it's something like that. The game got some very weird method to determine the refresh rate, it's difficult to replicate that behavior.
This might be a lot easier to fix with a game patch

Is it possible the parameter maxgameticks working on the pinball screen too? So a value of 30 will do the trick.

Is it possible the parameter maxgameticks working on the pinball screen too? So a value of 30 will do the trick.

I don't think so - The game runs a test upfront to determine the refresh rate and then keeps using that value

@quakeguy44 Not sure if you still need it, but I recently fixed some issues in another game that fix also made BOS working properly now as well.

Install Balls of Steel and make sure you patch it to 1.2 (I used the myabandonware RIP for testing)
Add a dll override for "ddraw" and "winmm"
Extract cnc-ddraw_Balls_of_Steel_1.2.zip into your game folder

When the game starts, make sure you don't click and don't press any keys, let the splash screen disappear on its own or else it will crash (some weird bug in the game, not cnc-ddraw related)

Today i tested your fix. At first i tried version 1.3 (1.3c GOG). I couldn't start the game. So i installed version 1.2 again. This time the game works like a charm. Big thanks ;)
I changed a few ddraw.ini settings to properly run the game:
fullscreen=true
maintas=true
vsync=true
And don't set scrolling to auto. Then the game will crash when it switches the mode. I just recognized this behaviour. Thats of course no cnc-ddraw issue. Must be a wine thing...


Docker repo team management

Select Docker Repository for central management, distribution and team access (GitHub Container?)
Create and manage team access
Update Packer build instructions to utilise repo as default
Update Helm charts to pull images from repo

Initial setup of GitHub Containers on the AIS Org site appears successful.
Initial push and creation of repo worked.
To do:

team permissions setup
documentation writeup


How do I launch windows application with runas different user option using WinAppDriver

Is is possible to launch windows application runas different user using WinAppDriver?
My desktop application always we launch with run as different user option, and I am looking for options how can we automate in this situations?
Or Is is possible to attach below process code to WinAppDriver, In below case we can launch our application but how this WinAppDriver session maintains to this to find elements?
System.Diagnostics.Process proc = new System.Diagnostics.Process();
System.Security.SecureString ssPwd = new System.Security.SecureString();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.FileName = ApplicationPath + "\" + ApplicationName;
proc.StartInfo.WorkingDirectory = ApplicationPath;
proc.StartInfo.Arguments = Arguments;
proc.StartInfo.Domain = Domain;
proc.StartInfo.UserName = Username;
proc.StartInfo.Password = Password;
proc.Start();

Yes you can start the application with the code and acquire a session with the opened window? Please check #1600


Adopt a slightly more opaque representation for defs, theorems and axioms

probably use records, and still allow to query the subcomponents (now, they are maps).

this is now done in master.


Add peers: and validate: keywords.

Two new keywords for processes. peers: lets us specify the peers to talk to (for the purposes of history and overlay) independent of the quorum, though it defaults to quorum if not provided. validate: lets us disable validation-seeds for a given process, making read-replicas.

:+1:


Add Chronicle to Oracles list

Add Chronicle to Oracles list as well as an example on how to read data

Thank you Bianca for your contribution. @hsutaiyu will look into this.