oauth2-azure-2.0.0 with AAD V2 authorization and token endpoints, Graph V1 and phpMailer

I have finally managed** to get PHPMailer working successfully with AAD V2 authorization and token endpoints, Graph V1 and oauth2-azure-2.0.0
This necessitated the following client overrides:
$provider->urlAPI = https://graph.microsoft.com/;
$provider->API_VERSION = '1.0';
$provider->defaultEndPointVersion = TheNetworg\OAuth2\Client\Provider\Azure::ENDPOINT_VERSION_2_0;

But one code change was needed in Azure.php itself: somewhere around line 207 ‘graph.windows.net’ was amended to ‘graph.microsoft.com’
If would be most helpful if all these, but especially the latter one, could be included in the next update to Azure.php.
** after a struggle: client scopes have one URI and the corresponding AAD permissions another URI, and Graph does not support V2 tokens, only V1. And MSFT initial said that SMTP AUTH would not be included in Graph’s permissions list but only in O365’s. But mid-2020 it suddenly appeared in Graph but vanished from O365, and an enable/disable switch was added to the tenant (accessible via Powershell) which could be overridden at user level (accessible via a pulldown in the user account). What was not widely publicised was that the default for new tenants was ‘disabled’. Etc

Thanks, this information is very useful. I've updated the code accordingly but am still getting the error you mention in #114 .  I'm developing an OAuth2 module (CMS based) to more easily support OAuth2 with PHPMailer.  Did you ever resolve the "invalid grant" issue?

@imclean557 what error exactly are you getting please?

In my case it appears it was a side-effect of having a Graph-specific client scope operand when authenticating, but since MSFT themselves were at the same time changing e.g. default settings, testing was a choppy sea.
If AAD Graph permissions are null (!!) and the client scope is just https://outlook.office.com/SMTP.Send, the access token has an ‘aud’ of https://outlook.office.com and an ‘scp’ of SMTP.Send, and authentication is OK.
But if the client scope also contains a Graph scope such as Mail.Send, ‘aud’ changes to  00000003-0000-0000-c000-000000000000 (aka Graph) and subsequent authentication fails with ‘incorrect credentials’. I would have expected a “scope asking for one token for two different resources” type error message from the token endpoint but the V2 authorization endpoint does not flag that as a specific error. Other error messages such as 'invalid grant' also seem possible.
And, as would be expected, if the client scope is just SMTP.Send (or https://graph.microsoft.com/SMTP.Send; the Graph URI prefix being now the default) authentication fails with ‘incorrect credentials’
@imclean557 might find the SendOauth2 PHP wrapper for PHPMailer useful, if only to check the provider factory. It built to handle the numerous sending endpoints in typical website, and  was our intent to add it to GitHub in April (there is already a placeholder) after other work completes. We will try to bring this forward as we have had requests offboard, but Ian  is welcome to a copy if he  emails us via the decomplexity,com website.

Thanks @decomplexity .  The requested scopes are offline_access https://outlook.office.com/SMTP.Send.  See attached for the MS Graph permissions. Should these be removed completely?  It looks like I haven't added any scopes for the application under "Expose an API".  Should there be something there?

Sorry, I'm not very MS literate.  I'm configuring a test account to help a client.
Thanks for the offer of SendOAuth2 PHP.

@hajekj The exact error is "invalid_grant AADSTS9002313: Invalid request. Request is malformed or invalid".

@decomplexity I filled in the contact form on your website and received the an error when submitting it:  "Sending failed. Error message"

Would you mind showing how your scopes are configured in the code? I haven't tried the SMTP.Send scopes so maybe it has a different behavior.

Sorry Ian - if you tried to send via the website between around 20.15 through 22.30 AEDT (UTC+11) Monday or whatever your time-zone is, one of my colleagues - now with a smartly smacked wrist - was trying out some CAPTCHA changes on the live system. If it wasn't then, I'll get someone to have a look; it seems to be working today as we have already received a couple of emails that route.
Please email me direct on<EMAIL_ADDRESS>To your earlier points: your client scope is fine and your Graph permissions as fine (although, as I mentioned in a prior post, authentication + authorisation appear to work with no Graph permissions at all! Microsoft have as yet been unable to clarify how they have set this up: my pure guess is that they have defined  SMTP.Send, openid and offline_access as default permissions to  Exchange Online (aka https://outlook.office.com/) but not allowed these to be visible or altered via AAD. Note that the minimum scopes needed are:

for get_auth_token (i.e. to get the refresh token): the two you quote
for subsequent PHPMailer authentication: just  https://outlook.office.com/SMTP.Send (i.e. if you add offline-access here, I assume you will get a new refresh token each time you authenticate)

@hajekj The scopes are configured as an array: $provider->scope = ['offline_access', 'https://outlook.office.com/SMTP.Send'];
However, I haven't specified a scopeSeparator.
@decomplexity Thanks, I've removed "offline_access"  from the PHPMailer auth and am still getting the same error. Retrieving the original refresh token ("code") works fine. Are there any logs at the Microsoft end of things I can check for more detailed error messages?
Also, this is a new tenant so even though the SMTP permission is available, is it possible SMTP needs to be enabled somewhere else?

Hi all, i'm working on phpmailer+oauth2+microsoft from some days, and i'm in struggle with this.
I was using stevenmaguire as provider, with many option, many tentatives, many errors, token unreadable on jwt.io, ecc.
So first ideas was "stop and %$& this". But i really need to configure oauth with phpmailer and a provider that can work. with stevenmaguire, smtp auth fail without log or reason, so i've read october decomplexity post so ok, i can try a new provider but i need some guides or assistance to implement it. i need to send a single mail when user make login (on other portal), and now only send mail task is missing., someone can help with also a partial code for this? thanks

Hi Matteo
Have a look at the PHPMailer\PHPMailer Wiki document called "Microsoft OAuth2 SMTP issues" that I filed there in December.

Hi Decomplexity, i've read all. I've understood difference for Graph and "office.com". I'm assuming that a backend status about API  and frontend (scope) are not mutated from your post (october 2022). So in this case, i've wrote correctly scope, api url, checked for smtp auth in user and checked for every permission in azure portal. i'm stuck in this situation with a classic 535 5.7.3.
I'm available also to change a provider if this can help, but from my side i'm out of ideas. any advice?

As detailed in the Wiki document in the Token Scope section, could you post the value shown for the Resource field in the Basic Info tab and also for the Oauth Scope Info field in the Additional Details tab.
Could you also post the access token that is failing: temporarily amend PHPMailer / OAuth.php / function getToken() to:
	$accesstoken = $this->provider->getAccessToken(
        $this->getGrant(),
         ['refresh_token' => $this->oauthRefreshToken]
        );
        var_dump($accesstoken);
	return $accesstoken;

For your security, you may wish to wait for two hours or so before posting to allow the token to expire

Hi Decomplexity, sorry for my late reply but i was out of city for work.
Token is 0.ATEAhP1wn2rkq0OCoIIy4LqLQXYehM83fd1DtUxXvP8pBsYxANs.AgABAAEAAAD--DLA3VO7QrddgJg7WevrAgDs_wQA9P-e6UD6P3D9spQNkw5hIR55-KJm0Ap3p-0Nlc7AO3ihUE2TZ52mUhMc9o7DcvOmN3P8-qN7oM1ZoziNLCpmsAWJiu5ske_BJ-dZh9I5TktWRAjQmuqcb2857uK3w9XrF-oZva83cnrg7_quBy78sRJg5cGJ8zzxtGWFIYx8FCuDKb1e4FFbBROY1-403vzYBM0N9SMYmRT1ZnDXqWHkS0dp5dZFLhTxiS21W32lCOmgFXiqGR0RyO-iO9fzOKkv-xYDM6SKPSUz3dWBL0StScGra40QXkwEcceDlAhJgqjS279AIurLc3qp-TxHRx3eKrbzS50EinVxV97W0T3FIm2ZyNK0ZQNf1afBesYwzQLjTVbkCUmJuWzjfjU-RfhNmZ7cQiSsqXvq7eay_ECpfZZK3ZGNALKv87uhXKX0FKCjlZx0eNw6Cl5kXzWDfcREznqkMtFCXXY5zUd3h1s9RvO74J4AxzHPg0RJel1KRZBAKAIwmLQsgGSDMVMB4w6dercK_xO0vBqOSCpt5jRIlPCpG9XsxLq5a9aukxTOgMMA1G8ZREAY4Wl6B08S2rQa8ULQ3zXXlViwKFePUbMlIqVlgyAtjwlqrbD64-iPfVsIbd14YGlchB5tSVXEK5aORur0Qf5N3oaneNZ7iWb8lOJfJ1zdTZUZlVqrcFfC_V5sLSjJImVS6wZTyhhuhUIEZKcyLu73AdZtK6XA4MSz7e3TMnjl5ch3DO_OpW3H1kK5_ak7Mp783zlWnF3v-Kuu0oEMBXobsfRWlJboES55jWYyN_B1OqK9ohGRhR30xs7ftaRT6B_ZGrwlsU8ZPC6cBfmOEW9CoOXy6wljQ1WUNb8KSu4EmY0z9aPaZgriw11u4l57IovnplhYnXFEY12SvKU1hjH-Qq3c9NGUuPWVG30lIonORQQioLfOgQwKONv91XdjmZg4hdjZsh9z9gydfypGbxKpqTbqjVv05wZugPW6uPCImj-7m2n4Axh3zkK3jHob-07Q9tU9fe7Ao7htnxYFETYWSgGxZ5isH21zTQtoken: 0.ATEAhP1wn2rkq0OCoIIy4LqLQXYehM83fd1DtUxXvP8pBsYxANs.AgABAAEAAAD--DLA3VO7QrddgJg7WevrAgDs_wQA9P-e6UD6P3D9spQNkw5hIR55-KJm0Ap3p-0Nlc7AO3ihUE2TZ52mUhMc9o7DcvOmN3P8-qN7oM1ZoziNLCpmsAWJiu5ske_BJ-dZh9I5TktWRAjQmuqcb2857uK3w9XrF-oZva83cnrg7_quBy78sRJg5cGJ8zzxtGWFIYx8FCuDKb1e4FFbBROY1-403vzYBM0N9SMYmRT1ZnDXqWHkS0dp5dZFLhTxiS21W32lCOmgFXiqGR0RyO-iO9fzOKkv-xYDM6SKPSUz3dWBL0StScGra40QXkwEcceDlAhJgqjS279AIurLc3qp-TxHRx3eKrbzS50EinVxV97W0T3FIm2ZyNK0ZQNf1afBesYwzQLjTVbkCUmJuWzjfjU-RfhNmZ7cQiSsqXvq7eay_ECpfZZK3ZGNALKv87uhXKX0FKCjlZx0eNw6Cl5kXzWDfcREznqkMtFCXXY5zUd3h1s9RvO74J4AxzHPg0RJel1KRZBAKAIwmLQsgGSDMVMB4w6dercK_xO0vBqOSCpt5jRIlPCpG9XsxLq5a9aukxTOgMMA1G8ZREAY4Wl6B08S2rQa8ULQ3zXXlViwKFePUbMlIqVlgyAtjwlqrbD64-iPfVsIbd14YGlchB5tSVXEK5aORur0Qf5N3oaneNZ7iWb8lOJfJ1zdTZUZlVqrcFfC_V5sLSjJImVS6wZTyhhuhUIEZKcyLu73AdZtK6XA4MSz7e3TMnjl5ch3DO_OpW3H1kK5_ak7Mp783zlWnF3v-Kuu0oEMBXobsfRWlJboES55jWYyN_B1OqK9ohGRhR30xs7ftaRT6B_ZGrwlsU8ZPC6cBfmOEW9CoOXy6wljQ1WUNb8KSu4EmY0z9aPaZgriw11u4l57IovnplhYnXFEY12SvKU1hjH-Qq3c9NGUuPWVG30lIonORQQioLfOgQwKONv91XdjmZg4hdjZsh9z9gydfypGbxKpqTbqjVv05wZugPW6uPCImj-7m2n4Axh3zkK3jHob-07Q9tU9fe7Ao7htnxYFETYWSgGxZ5isH21zTQ

Hi Matteo
This doesn't look like an Access token - and it appears to be two identical tokens or codes (see from character 1140).
Each one could be the Refresh token as refresh tokens are not decodable.
If you present this to PHPMailer as an Access token you are sure to get a 535 5.7.3
The one provider I can promise works is the present one (TheNetworg), we use it on our many websites, and I have never found   installation errors or bad request or uncaught function.  It is worth checking that your installation directory structure is correct:
vendor/thenetworg/oauth2-azure/src/Grant/....
vendor/thenetworg/oauth2-azure/src/Provider/...
vendor/thenetworg/oauth2-azure/src/Token/...
plus TheLeague OAuth2 abstract providers etc:
vendor/league/oauth2-client/....
plus vendor/   firebase, guzzlehttp, paragonie, psr, ralouphie, symfony
and assuming you installed using composer:
composer and autoload.php

Hi, i can confirm that directory structure is correct, just verified, and yes i'm using composer and autoload.php.
with thenetworkg i've problems about implementations, so do you have example code?

A bit baffled by this! Since you have TheNetworg producer installed,  I guess you could download the four wrapper modules from decomplexity/SendOauth2 or Packagist (plus the examples for invoking them) and see if you get errors with them. You just need to add your client ID, secret and so on in SendOauthD.  (In passing, new version of SendOauth2 will be released in March that refreshes refresh tokens automatically, supports certificates as well as client secrets and so on)

Hi, i've downloaded it with examples and i've added my info (client id, secret, etc...) to SendOauthD.
Mylack, i don't understand storage organization so let me know if correct:

four file SendOauth2D, 2C,2B,2A will be kept in decompleity/sendoauth2/src
3 file Send...-settings.php, 2D-invoke.php and 2A-invoke.php will be kept at the same level of vendor folder.
file SendOauth2D-invoke.php can be used as-is to send mail, with SendOauth2D-settings.php filled? otherwise how i can "construct" a working file? actually i've this kind of error:

[Thu Jan 19 16:23:35.141965 2023] [php:error] [pid 155233] [client <IP_ADDRESS>:61836]
PHP Fatal error:  Uncaught Error: Call to undefined method PHPMailer\PHPMailer\PHPMailer::aAddBCC() in /var/www/host.domain.com/public_html/auth2/vendor/decomplexity/sendoauth2/src/SendOauth2A.php:466\n
Stack trace:\n#0 /var/www/host.domain.com/public_html/auth2/vendor/decomplexity/sendoauth2/src/SendOauth2A.php(341): decomplexity\SendOauth2\SendOauth2A->assignValues()\n#1
/var/www/host.domain.com/public_html/auth2/file.php(7): decomplexity\SendOauth2\SendOauth2A->__construct()\n#2 {main}\n
thrown in /var/www/host.domain.com/public_html/auth2/vendor/decomplexity/sendoauth2/src/SendOauth2A.php on line 466
i'm not a developer, i'm system administrator, so i'm not used to this envoronment.
thanks!

The four files SendOauth2D, 2C, 2B, 2A should be kept in vendor/decomplexity/sendoauth2/src
Your invoking files (SendOauth2D_invoke.php and whatever you call your mainline PHPMailer calling file) would typically be in one directory level above /vendor, perhaps just php/
If you send me your email address via the Contact page of decomplexity.com I will send you a newer version of SendOauth2A.php.
Did you successfully get a refresh token using SendOauth2D_invoke.php?

No when using SendOauth2D_invoke.php i got back error in my previous post, so no token at all for a moment.
New SendOauth2A.php file will be in same version of older, right?
ok for invoking file, i will put in un level up, that is /vendor parent folder(in error you can see that public_html is web root, oauth2 is folder that contains all file and composer installation. my difficulty at the moment is "join" invoke file with phpmailer file, i was using phpmailer file with mail function when using old provider. now, i'm supposing (wrong?) that sendoauth istance will trigger phpmailer class itself.  probably i'm wrong, and for this i see that error in previous post. do you have a semi-completed file?
ah, just for "fun", this is customer purpose: user login on web page in a custom portal (made by another developer). at login task, user must receive a mail with a otp code (otp engine is inside web application), but due to deprecation of plain auth, we need to implement oauth2. i've create azure app, with a (long) list of permission, authorized app as tenant administrator, put as redirect url the same url of invoke file. mail sender will be noreply@domain.com(exchange plan 1 license), i've autorized app and made first login as<EMAIL_ADDRESS>(no license, only admin rights with otp in microsoft authenticator app).
hope that now my purpose is clearer to you, let me know if not
i will write you via contact page in a minute.

Hi Matteo
My reply to the email address you sent via my Contact page was bounced by GitHub "due to organizational settings".
Do you have a normal business or personal email address?

yes, give me 1 minutes

This mail is on Office365, now it should arrived correctly

Still being bounced!

Sent another one!

And still being bounced!

do you know what provider is correctly working?

TheNetworg !
On 20 Jan 2023 18:37, matteo-cavalli @.***> wrote:
do you know what provider is correctly working?
—
Reply to this email directly, view it on GitHubhttps://github.com/TheNetworg/oauth2-azure/issues/127#issuecomment-1398785857, or unsubscribehttps://github.com/notifications/unsubscribe-auth/APQ3IL4XJDY66C35EY2VQNLWTLLOLANCNFSM4TP2WJBA.
You are receiving this because you were mentioned.Message ID: @.***>

sorry, i mean mail provider...to avoid mail bounce. so if you know if gmail, hotmail or others works, let me know and i will write from one of them, or register a mail account on it if i don't have
thanks

The only email address I have for you is the @github one you sent me. Emailing via our Contact page ignores the sender's email address (unless it is in the text of the message) to try to block spam.
Github itself is blocking my replies to you.
You can email me directly at:
<EMAIL_ADDRESS>from any @outlook.com or @gmail.com or similar address.

Hi Max,
this is my situation, it's a little bit different form once that you send mail via mail but tell me if i need to change something:
domain
/auth
SendOauth2D-invoke.php
SendOauth2D-settings.php
SendOauth2A-invoke.php
/vendor
/decomplexity
/sendoauth2
/src
SendOauth2A.php
SendOauth2B.php
SendOauth2C.php
SendOauth2D.php
At the same level of decomplexity folder, i have firebase, guzzlehttp, league, paragonie, phpmailer, psr, ralouphie, src, symfony, thenetworg, composer, autoload.php
I've configured all parameters in SendOauth2D-settings.php.
When call via browser domain/auth/SendOauth2D-invoke.php, i get this error(via ssh apache log):
PHP Fatal error:  Uncaught Error: Class "decomplexity\sendoauth2\SendOauth2C" not found in domain/auth/vendor/decomplexity/sendoauth2/src/SendOauth2D.php:159\n
Stack trace:\n#0 domain/auth/SendOauth2D-invoke.php(11): decomplexity\sendoauth2\SendOauth2D->__construct()\n#1 {main}\n  thrown in domain/auth/vendor/decomplexity/sendoauth2/src/SendOauth2D.php on line 159
i've made also change for redirect url in azure but.
thanks!


Open Order not being fully deserialized -> missing fields.

deserialize_contract_proxy not fully deserializing open_order_msg. Not deserializing whether it's a MKT or LMT order, and if it's a LMT order, the cost. Trying to implement it myself but am confused as to what order_types is supposed to be. You have it set as a default string vec, howver shouldn't it be an OrderType enum between MKT and LMT and other OrderTypes?
https://www.interactivebrokers.com/campus/ibkr-api-page/twsapi-doc/#fa-orders
order = Order()
order.action = "BUY"
order.orderType = "MKT"
order.totalQuantity = 50
order.faGroup = "MyTestProfile"

I see you have some of this and am confused as to what it covers.
    #[inline]
    fn order_types(&self) -> &Vec<String> {
        match_poly!(self;
            Self::Forex(t)
            | Self::Crypto(t)
            | Self::Stock(t)
            | Self::Index(t)
            | Self::SecFuture(t)
            | Self::SecOption(t)
            | Self::Commodity(t) => t.order_types()
        )
    }

What I did so far replicated from OrderSide:
executions.rs
#[derive(Debug, Clone, Copy, Ord, PartialOrd, PartialEq, Eq, Hash, Serialize, Deserialize)]
/// The possible order types for an order
pub enum OrderType {
    #[serde(rename = "MKT")]
    /// A market order
    Mkt,
    #[serde(rename = "LMT")]
    /// A limit order
    Lmt,
    #[serde(rename = "MIDPRICE")]
    /// A mid-price order
    MidPrice,
    #[serde(rename = "MTL")]
    /// A market-to-limit order
    Mtl,
    #[serde(rename = "STP")]
    /// A stop order
    Stp,
    #[serde(rename = "STP LMT")]
    /// A stop-limit order
    StpLmt,
    #[serde(rename = "TRAIL")]
    /// A trailing stop order
    Trail,
    #[serde(rename = "TRAIL LIMIT")]
    /// A trailing stop limit order
    TrailLimit,
    #[serde(rename = "REL")]
    /// A relative order
    Rel,
    #[serde(rename = "RPI")]
    /// A retail price improvement order
    Rpi,
    #[serde(rename = "PEG MID")]
    /// A pegged to midpoint order
    PegMid,
    #[serde(rename = "PEG BEST")]
    /// A pegged to best order
    PegBest,
    #[serde(rename = "SNAP MKT")]
    /// A snap market order
    SnapMkt,
    #[serde(rename = "SNAP MID")]
    /// A snap mid order
    SnapMid,
    #[serde(rename = "SNAP PRIM")]
    /// A snap primary order
    SnapPrim,
    #[serde(rename = "MOC")]
    /// A market-on-close order
    Moc,
    #[serde(rename = "LOC")]
    /// A limit-on-close order
    Loc,
    #[serde(rename = "IBALGO")]
    /// An IB algorithmic order
    IbAlgo,
    #[serde(rename = "Adaptive (IBALGO)")]
    /// An adaptive IB algorithmic order
    AdaptiveIbAlgo,
}

#[derive(Debug, Default, Clone, thiserror::Error)]
#[error("Invalid value encountered when attempting to parse an order type. No such order type: {0}. Valid order types include \"MKT\", \"LMT\", \"MIDPRICE\", etc.")]
/// An error returned when parsing an [`OrderType`] fails.
pub struct ParseOrderTypeError(String);

impl std::str::FromStr for OrderType {
    type Err = ParseOrderTypeError;
    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "MKT" => Ok(Self::Mkt),
            "LMT" => Ok(Self::Lmt),
            "MIDPRICE" => Ok(Self::MidPrice),
            "MTL" => Ok(Self::Mtl),
            "STP" => Ok(Self::Stp),
            "STP LMT" => Ok(Self::StpLmt),
            "TRAIL" => Ok(Self::Trail),
            "TRAIL LIMIT" => Ok(Self::TrailLimit),
            "REL" => Ok(Self::Rel),
            "RPI" => Ok(Self::Rpi),
            "PEG MID" => Ok(Self::PegMid),
            "PEG BEST" => Ok(Self::PegBest),
            "SNAP MKT" => Ok(Self::SnapMkt),
            "SNAP MID" => Ok(Self::SnapMid),
            "SNAP PRIM" => Ok(Self::SnapPrim),
            "MOC" => Ok(Self::Moc),
            "LOC" => Ok(Self::Loc),
            "IBALGO" => Ok(Self::IbAlgo),
            "Adaptive (IBALGO)" => Ok(Self::AdaptiveIbAlgo),
            other => Err(ParseOrderTypeError(other.to_owned())),
        }
    }
}

Or did you do Vec to decode all of them instead of an enum for as right now the order_type: Vec for the open_order_msg returns empty.

Yeah, I've struggled on the implementation here. It's somewhat complicated to reassemble the order fields. It's not necessarily clear what information is guaranteed to be included. Working on a fix

Yeah, I've struggled on the implementation here. It's somewhat complicated to reassemble the order fields. It's not necessarily clear what information is guaranteed to be included. Working on a fix

Maybe just replicate the output of the rust-ibapi library on lib.rs?
https://docs.rs/ibapi/latest/ibapi/orders/enum.OrderDataResult.html

Yeah I'll take a look. It looks like their solution is quite "dynamic" (uses lots of Option), but I think that's find for this case.  Will work on this shortly.


406 Not Acceptable

From http://jsonapi.org/format/#fetching :

JSON API requests MUST include an Accept header specifying the JSON API media type. This header value MUST also include media type extensions relevant to the request. Servers MUST return a 406 Not Acceptable status code if this header is missing or specifies an unsupported media type.

2 reasons against:

Not always you can control http headers in request (especially CORS). It should not prevent you to make a request.
This limitation should not be for the sake of limitation. Why should we increase number of failed requests? Just because "standard" wants it? In real world, sometimes projects uses POST instead of GET, what is much greater violation, but.. Standard should not add limitation just for the sake of limitation - there are recommendations for it.

I'm not going to implement this proposal of standard because of your position about "PATCH" verb and "id" field in responses, so I don't see reasons to argue and closing all my issues.


Update exceptions.json adding RetroDECK xdg-access

From https://github.com/flathub/flathub/issues/4786

Closing as per matrix conversation and https://github.com/flathub/flatpak-builder-lint/pull/229#discussion_r1426685382

Turns out that that arg is needed for displaying the dark theme on GTK.
It seems to be a Valve side bug that is under review: https://github.com/ValveSoftware/SteamOS/issues/803
SteamOS 3 doesn't have GTK portal.


[Feature]: Translation string character limit

Describe the problem
We need to add character limit field to translation files and make Trasifex understand it.
Description also
Describe the solution
No response
Additional context
No response

Testing will be performed implicitly. Moving to Done.


Unexpected voltage curve after modifying model parameters

PyBaMM Version
v24.1
Python Version
3.12.1
Describe the bug
I am looking into modifying the parameter set to experiment with different voltage limits.
As en example I have used the following:
`model = pybamm.lithium_ion.DFN()
parameter_values = pybamm.ParameterValues("Mohtat2020")
min_v = 1.0
max_v = 5.0
parameter_values['Open-circuit voltage at 0% SOC [V]'] = min_v
parameter_values['Open-circuit voltage at 100% SOC [V]'] = max_v
parameter_values['Lower voltage cut-off [V]'] = min_v
parameter_values['Upper voltage cut-off [V]'] = max_v`
When I run the experiment charging to maximum voltage I get unexpected voltage curve when exceeding default upper voltage cut-off value. Could you please advise where this might be coming from? Also could you please advise how can I modify the starting voltage? the simulation still starts at the default voltage level.

Steps to Reproduce
run charging experiment until new max voltage
Relevant log output
No response

Hi @mmichal9, the voltage cutoffs are part of the parameterization of the model. To adjust that you would also need to change the open circuit potential and probably a few other parameters.
PyBaMM does not do much sanity checking when parameters are changed. It is sort of assumed that the cell models are fit and tested before they are used inside PyBaMM

The easiest way to modify the starting voltage is to do e.g. sim.solve(initial_soc="3.4V").
Regarding the behavior at the end of charge, it looks like you may be reaching the min or max stoichiometry of one of the electrodes, at which point the voltage goes to infinity. Can you plot "Negative electrode stoichiometry" and "Positive electrode stoichiometry" and "X-average negative electrode surface concentration" and "X-average positive electrode surface concentration"?

I have not found the bottom 2 parameters but the closest i seen was 'X-averaged negative particle surface concentration' and 'X-averaged positive particle surface concentration' please see the plots below:

@mmichal9 Regarding the end of the curve, the open circuit potentials for Mohtat2020 look something like this:

You can see that the upper and lower bounds of the voltage are limited by the potentials themselves. The black curve is the overall open circuit potential for the cell, and the voltage limits are set by the ends of that curve. When you try to go to voltages higher than the default maximum or lower than the default minimum, the OCP cannot reach those values.
You can use voltages between the default maximum and minimum, and using them is equivalent to changing the state of charge, but going outside the default range would require changing a lot more of the parameter set than just the voltage cutoffs.

To add to Eric's comment, we force the OCV to go to plus or minus infinity close to 0 and 1:
https://github.com/pybamm-team/PyBaMM/blob/fe4ac31c6fa3aacc402433d1b8c97dceba5d583a/pybamm/parameters/lithium_ion_parameters.py#L623
This is to make sure that the stoichiometries can't leave the range (0,1) without the voltage cutoff getting triggered. If the stoichiometries were to leave that range, it would cause the solver to fail because of the sqrt(c(1-c)) term in the exchange-current density.

Thank you for the support and the detailed explanation. I will look into the parameter sets in more detail son. For now will try to stick to the default.


[BEAM-498] Make StreamingPCollectionViewWriterFn and its data public

Be sure to do all of the following to help us incorporate your contribution
quickly and easily:

[x] Make sure the PR title is formatted like:
[BEAM-<Jira issue #>] Description of pull request
[x] Make sure tests pass via mvn clean verify. (Even better, enable
Travis-CI on your fork and ensure the whole test matrix passes).
[x] Replace <Jira issue #> in the title with the actual Jira issue
number, if there is one.
[x] If this contribution is large, please file an Apache
Individual Contributor License Agreement.

This enables a smooth migration path whereby the runner can notice the class and extract these values, to run them without OldDoFn.

R: @bjchambers

LGTM


[SPARK-41354][CONNECT] Implement DataFrame.repartitionByRange

What changes were proposed in this pull request?

Implement DataFrame.repartitionByRange for scala API
Add a new relation RepartitionByExpression.

Why are the changes needed?
API coverage
Does this PR introduce any user-facing change?
Yes, added new API function.
How was this patch tested?
Unit tests.

Can one of the admins verify this patch?

would you mind resolving the conflicts and update the PR description and title (it aims to adds the proto, not for scala API)?

would you mind resolving the conflicts and update the PR description and title (it aims to adds the proto, not for scala API)?

@zhengruifeng Thank you for you comments, Do you mean change title to RepartitionByExpression, I have change it.

sorry, would you minding resolving the conflicts? @dengziming

Merged into master, thank you @dengziming
BTW, would you minding also adding the repartitionBy* APIs in Client ?

adding the repartitionBy* APIs in Client ?

Do you mean adding them to python client? yes, I'm working on it.

@dengziming thank you so much


Drawer Visibility

I created a form contain 2 textinput inside a drawer in React project. I use Drawer API Javascript to controls show and hide of the drawer. I console.log to check visibility the drawer with drawer.isVisible() in textinput onchange. The bug is every time I type in textinput, drawer visibilty is set to false, but the drawer and backdrop is still showing.
If i dont type anything in textinput, the drawer and the backdrop run normally.
But when type in textinput then visibilty is false, I close the drawer, normal. but the backdrop still showing, I have to click manually the backdrop to close it.

Also experiencing this (when i click a link), and the open/close toggle stops working after that.

Hello! I have another issue with Vue
I use this component - https://flowbite.com/docs/components/sidebar/#default-sidebar , and in mobile version, when I click on toggle sidebar button - two drawer-backdrops are appearing, instead of one
And as a result, when I close sidebar by clicking on the backdrop - only one is closing, but another one still exist and blocking the page.

Same issue

Same issue

Any news on this? This is also happening for me! Back to modals for now then so it seems

Hey everyone,
From the v2.1.0 release the double backdrop issue should be fixed: https://github.com/themesberg/flowbite/releases/tag/v2.1.0
Can you please try upgrading and see if the issue still persists in your local environments?
Thanks,
Zoltan


z-index problem in fullscreen

Hi there!
First thanks for your nice plugin, I've tested all of panorama plugin and  yours is from far number one!
I can't say my problem is a bug as your demo don't have it... but you'll probably be able to help me out.
As explain in the title I'm having issue configuring z-index on full screen. Even if I change the css to give pannellum container the higher z-index, some element of my design still show up on top of the panorama.
You can see this problem on the live website under projects section. (click on 360 and choose a panorama)
Hope you have a solution or maybe a hint.
Cheers

Great photography and website Jim. I didn't see any evidence of the problem you describe; however, I did note losing the ability to pan the image when in full screen mode. I'm using Chrome  63.0.3239.84 on Linux Mint 18.2.
This is the only message I see on the Developer's console:
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://www.youtube.com') does not match the recipient window's origin ('https://immersion-pictures.com').
f.C @ www-widgetapi.js:114

Hello @MmmDee !
Thank you for your comment 😄 !
The overlay you notice on chrome is the overlay of the landing fullscreen video...
I don't understand how pannellum fullscreen works as even if I change the z-index of pannellum to be superior to this overlay it's always visible... (you can try from the console)
In safari it's even worst as pannellum doesn't show up on full screen!
PS: also could you remove the url of my website in your comment please, it's not good for SEO. thank you 😄 !!

@jimblue
Deleted the link per your request. It appears Firefox works as you intend, but Safari and Chrome (latest version on Linux) do not.  Safari on an iPhone 8+with IOS 11.1.1 shows the "small" pan-able image, but won't switch to full-screen.
Again, great website, good luck to you.

Please note that for z-index having any effect the element must be either positioned absolute - or relative. z-index is ignored for defaut position: static.

I'm closing this issue since there's no link for me to look at.

Sorry @mpetroff here is a link: https://goo.gl/ruxjWb

@strarsis yes I use absolute position and z-index... Still it doesn't seems to have effect.

This appears to be a bug in Chrome itself. I can make other elements on the page that don't have Pannellum fullscreen and still show the issue, e.g. open the lightbox for one of the videos and run document.querySelector('.project-wrapper').webkitRequestFullScreen() in the browser console. I found something that suggests it might have to do with the CSS animation: https://stackoverflow.com/questions/44321110/youtube-full-screen-video-behind-html-content


Value references should be allowed to exist on an untied peer if they are not accessed

whoops that already works


Static IP

Networking is working.
Right now the server always have an ip address
and the client needs to enter his ip address
We want this to be automatic - so when client and server are working they would auto connect.
Therefore we need a static known ip
Tailscale might be out solution.
it would allow both computers to have a vpn and static ip
need to have a test / command we can run that will auto connect to that vpn that validate this
We have a budget for it if it's less then 50 NIS

https://tailscale.com/kb/1033/ip-and-dns-addresses/

Tailscale seems like a viable solution for our requirements. A client needs to be installed per endpoint (two endpoints total in our case). Once the clients are installed, the static IP address provided by the client can be found on the context menu:


Cost API calls SecretsManager AWS

Hello there,
How does the cost work with the provider, for example AWS Secrets Manager?
In the aws documentation, I saw that it has a cost for each store and per API call.
The parameter   refreshInterval: 1h           # rate SecretManager pulls GCPSM.    Does it mean that every 1 minute we will have an API call in secretsManager?
My environment has almost 5k secrets, soon i will have 5k externalSecrets objsects making calls every 1 min.
Is that right or am I mistaken? Does anyone have such a scenario?
Thanks

Hi @rafaelsilvaaa10 ! RefreshInterval: 1h will make the reconcile in one hour.  If you configure it to 1m, it would indeed make 1 call per minute :)


Wool to 4 string recipe

What would you like to see added/changed?
Any color wool placed anywhere in a 2x2 or 3x3 should make 4 string.
This is the opposite of 4 string to one white wool.

Thank you for your suggestion! It will be added in the first beta v1.7.0, after 1.21 releases.

Added in v2.0.0-alpha1 - thanks again for your suggestion!


Add config support for link groups. Doesn't use group config yet.

lgtm. are additional attributes a reason to bump the version? (i don't know how that's accomplished in this repo)

At least this portion of the work is backwards compatible, so I wasn't going to bump the version yet.


After dragging, map crash

When the print map is loading the tiles it can be dragged. Please disable this.
But thats not the problem. After dragging the map, the print window is displayed, but then the map is white and all objects are gone.
To Reproduce
Steps to reproduce the behavior:

Click on the print button (no matter which type)
Drag the map
Cancle Print Window

Desktop (please complete the following information):

OS: Windows
Browser Firefox
Version 66.0.5

Hi,
Thank you for reporting this. Plugin updated.
Regards,
Igor


Strange failure to configure

I have a really strange failure to configure which-key. I'm using packer and delegating config to separate files. Here's what a relevant section in my packer setup looks like:
      use {
          'edluffy/specs.nvim',
          config = function() require('config.edluffy_specs') end
      }

      use {
          'folke/which-key.nvim',
          config = function() require('config.wk') end
      }

My ./config/wk.lua file looks like:
require('which-key').setup()

require('which-key').register({
    ["<leader>x"] = { "<cmd>enew<cr>", "New File" }
})

It doesn't get read. If I run WhichKey <leader> there is no entry for "New File". Like this:
     b ➜ pymode#breakpoint#operate(line('.')) f ➜ +prefix
     g ➜ BlamerToggle                         m ➜ +prefix
     r ➜ PymodeRun                            t ➜ +prefix
     \ ➜ +prefix                              w ➜ +prefix

If however I comment out the contents of that file, or just implicitly ignore it, and instead edit my ./config/edluffy_specs.lua file in the neighboring entry like so:
require('specs').setup({
    -- edluffy specs stuff goes here ...
})

-- Same which-key contents as in the other file
require('which-key').setup()

require('which-key').register({
    ["<leader>x"] = { "<cmd>enew<cr>", "New File" }
})

then it magically works and the keymapping is there when I WhichKey <leader>. Like this (bottom left corner):
     b ➜ pymode#breakpoint#operate(line('.')) \ ➜ +prefix                                w ➜ +prefix
     g ➜ BlamerToggle                         f ➜ +prefix
     r ➜ PymodeRun                            m ➜ +prefix
     x ➜ New File                             t ➜ +prefix

I have tried copying, moving, renaming, writing from scratch my which-key config standalone file. Modes are the same as the modes for all my other config files (i.e. it's not chmod 000 or anything).
Any ideas why this might be happening? A dependency issue? There is nothing obvious when I run nvim -V99nvimlog somefile.txt with it not working or with my workaround hack.
I'd really, really prefer to have a standalone mapping file for which-key rather than hack it by moving the config in with another plugin's config. I'm trying to migrate from vimpeccable to which-key and this simple attempt has roadblocked me.
Also relevant, I've completely removed which-key from my packer setup (and :PackerSync) and reinstalled it so I'm starting from a totally clean base a couple of times.

OK you can ignore this issue @folke. I spent a whole extra bunch of time on it. I reproduced the steps above with my colleague watching and he can vouch I'm not (too) crazy - it happened again and again. But I persevered with a number of different steps and somewhere along the way of moving things around it fixed itself.
One thing that seemed to help was I commented out the require('which-key').setup {} line and just left the binding and ran it and maybe then or shortly thereafter it started working. Yet strangely enough I now have that line reintroduced and it's still working.
Regardless, I have now migrated my whole vimpeccable across except for one complex function, which I'll do once I modularize it a bit. Nice plugin, thanks.


Jszip bug

A jszip error occurred

Library works only with .docx files (Office Open XML format). Looks like you used invalid or corrupted file.


Increment progress AFTER middleware execution

I'm using the progress property to update a progress bar, the bar was hanging at 100%. All downloads had completed, but my last middleware function was still executing.
Middleware functions may be long running, do not increment the progress or emit the progress event until the middleware has been executed.

:+1:


write_through_unbound_process method fails

write_through_unbound_process method fails with error log TI process does not have security access to sandbox ''
Upon debugging it's because disablesandboxing configuration was active in the instance.
To resolve this I suggest that we check if disablesandboxing is F before adding the below line to the TI.
https://github.com/cubewise-code/tm1py/blob/a44842d5012f61d970f2b1b8d873e417e32184fe/TM1py/Services/CellService.py#L421

@rkvinoth
please confirm if PR #462 fixes this issue

@rkvinoth
please confirm if PR #462 fixes this issue

I wonder why we have this exception (no knowledge here)?
https://github.com/cubewise-code/tm1py/blob/34703812f9cb7adccd732a92eb15cc253ceab005/TM1py/Services/CellService.py#L421
If its actually needed:

We should document that we have to switch off use_changeset when using use_ti
or
Automatically switch off use_changeset when using use_ti

I wonder why we have this exception (no knowledge here)?
https://github.com/cubewise-code/tm1py/blob/34703812f9cb7adccd732a92eb15cc253ceab005/TM1py/Services/CellService.py#L421
If its actually needed:

We should document that we have to switch off use_changeset when using use_ti
or
Automatically switch off use_changeset when using use_ti

I wonder why we have this exception (no knowledge here)?
https://github.com/cubewise-code/tm1py/blob/34703812f9cb7adccd732a92eb15cc253ceab005/TM1py/Services/CellService.py#L421
If its actually needed:

We should document that we have to switch off use_changeset when using use_ti
or
Automatically switch off use_changeset when using use_ti

Agree. It's not friendly now.
Just changed it. Now if use_ti is True we simply ignore use_changeset.
What do you think?

I wonder why we have this exception (no knowledge here)?
https://github.com/cubewise-code/tm1py/blob/34703812f9cb7adccd732a92eb15cc253ceab005/TM1py/Services/CellService.py#L421
If its actually needed:

We should document that we have to switch off use_changeset when using use_ti
or
Automatically switch off use_changeset when using use_ti

Agree. It's not friendly now.
Just changed it. Now if use_ti is True we simply ignore use_changeset.
What do you think?

I can see that those lines are added by @rclapp.. are you sure about removing that (I don't know why he added that)?

I can see that those lines are added by @rclapp.. are you sure about removing that (I don't know why he added that)?

I asked @rclapp to add the Exception during a review. But with use_changelog set to True by default, it's a bit unfriendly IMO.

I asked @rclapp to add the Exception during a review. But with use_changelog set to True by default, it's a bit unfriendly IMO.

I would switch both use_ti and use_changeset OFF. Let the user/developer decide what to use. Your thoughts?

I would switch both use_ti and use_changeset OFF. Let the user/developer decide what to use. Your thoughts?

A one liner about use_changeset will be really helpful in the docstring.
Like: Enable ChangesetID: True or False
Also, docstring has to be updated for write_dataframemethod's arguments.

A one liner about use_changeset will be really helpful in the docstring.
Like: Enable ChangesetID: True or False
Also, docstring has to be updated for write_dataframemethod's arguments.

Thanks for the feedback @rkvinoth. I incorporated your requested improvements 8055ea68740e958f7097f384617b91c0cf7f6867

Thanks for the feedback @rkvinoth. I incorporated your requested improvements 8055ea68740e958f7097f384617b91c0cf7f6867


[Docs] Docs don't explain how to create an offline bundle

I'm looking at this link:
http://facebook.github.io/react-native/docs/running-on-device-ios.html
at: "Using the offline bundle", but the code doesn't match up to what is in my ios/YourApp/AppDelegate.m. It's telling me to uncomment the line jsCodeLocation = [[NSBundle mainBundle] .., but that doesn't exist in my AppDelegate.m.
Could this be related  to the 0.29 feature for not having to change localhost to my computer's IP address to run the app on my device?
Thanks

@jefflau Think you are right. The line to uncomment referenced by the docs was removed in this commit 8c29a52c54392ce52148e7d3aa9f835537453aa4 "Implemented automatic IP detection for iOS."

It seems like a bit more information will be needed.
For most of developers it may remain a bit unclear.

@facebook-github-bot duplicate #8716


Ivector optiomization issue

I'm getting this problem randomly with the most recent version of Kaldi (this problem seems to happen with TEDLIUM 3 too)
WARNING (ivector-extract-online2[5.5.643~1-ab82de]:LinearCgd():optimization.cc:549) Doing linear CGD in dimension 100, after 15 iterations the squared residual has got worse, 5.59071 > 4.92847.  Will do a
n exact optimization.
LOG (ivector-extract-online2[5.5.643~1-ab82de]:SolveQuadraticProblem<double>():sp-matrix.cc:686) Solving quadratic problem for called-from-linearCGD: floored 3 eigenvalues.
WARNING (ivector-extract-online2[5.5.643~1-ab82de]:LinearCgd():optimization.cc:549) Doing linear CGD in dimension 100, after 15 iterations the squared residual has got worse, 14.5627 > 7.93962.  Will do a
n exact optimization.
LOG (ivector-extract-online2[5.5.643~1-ab82de]:SolveQuadraticProblem<double>():sp-matrix.cc:686) Solving quadratic problem for called-from-linearCGD: floored 3 eigenvalues.
WARNING (ivector-extract-online2[5.5.643~1-ab82de]:LinearCgd():optimization.cc:549) Doing linear CGD in dimension 100, after 15 iterations the squared residual has got worse, 216.241 > 6.63521.  Will do a
n exact optimization.
LOG (ivector-extract-online2[5.5.643~1-ab82de]:SolveQuadraticProblem<double>():sp-matrix.cc:686) Solving quadratic problem for called-from-linearCGD: floored 2 eigenvalues.
WARNING (ivector-extract-online2[5.5.643~1-ab82de]:LinearCgd():optimization.cc:549) Doing linear CGD in dimension 100, after 15 iterations the squared residual has got worse, 28.3819 > 15.9563.  Will do a
n exact optimization.
LOG (ivector-extract-online2[5.5.643~1-ab82de]:SolveQuadraticProblem<double>():sp-matrix.cc:686) Solving quadratic problem for called-from-linearCGD: floored 3 eigenvalues.
WARNING (ivector-extract-online2[5.5.643~1-ab82de]:LinearCgd():optimization.cc:549) Doing linear CGD in dimension 100, after 15 iterations the squared residual has got worse, 843.787 > 30.8869.  Will do a
n exact optimization.
LOG (ivector-extract-online2[5.5.643~1-ab82de]:SolveQuadraticProblem<double>():sp-matrix.cc:686) Solving quadratic problem for called-from-linearCGD: floored 3 eigenvalues.
WARNING (ivector-extract-online2[5.5.643~1-ab82de]:LinearCgd():optimization.cc:549) Doing linear CGD in dimension 100, after 15 iterations the squared residual has got worse, 6840.46 > 34.1176.  Will do a
n exact optimization.
ASSERTION_FAILED (ivector-extract-online2[5.5.643~1-ab82de]:SymPosSemiDefEig():sp-matrix.cc:62) Assertion failed: (-min <= tolerance * max)

[ Stack-Trace: ]
ivector-extract-online2(kaldi::MessageLogger::LogMessage() const+0xb42) [0x55be19470674]
ivector-extract-online2(kaldi::KaldiAssertFailure_(char const*, char const*, int, char const*)+0x6e) [0x55be19471370]
ivector-extract-online2(kaldi::SpMatrix<double>::MaxAbsEig() const+0) [0x55be19445962]
ivector-extract-online2(double kaldi::SolveQuadraticProblem<double>(kaldi::SpMatrix<double> const&, kaldi::VectorBase<double> const&, kaldi::SolverOptions const&, kaldi::VectorBase<double>*)+0x578) [0x55b
e1943fec3]
ivector-extract-online2(int kaldi::LinearCgd<double>(kaldi::LinearCgdOptions const&, kaldi::SpMatrix<double> const&, kaldi::VectorBase<double> const&, kaldi::VectorBase<double>*)+0xb6c) [0x55be1946ef14]
ivector-extract-online2(kaldi::OnlineIvectorEstimationStats::GetIvector(int, kaldi::VectorBase<double>*) const+0x8c) [0x55be1929b678]
ivector-extract-online2(kaldi::OnlineIvectorFeature::UpdateStatsUntilFrame(int)+0x13b) [0x55be19293d29]
ivector-extract-online2(kaldi::OnlineIvectorFeature::GetFrame(int, kaldi::VectorBase<float>*)+0x4e) [0x55be1929421a]
ivector-extract-online2(main+0xd15) [0x55be1927b29e]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7f5b9c286b97]
ivector-extract-online2(_start+0x2a) [0x55be1927a47a]

LOG (copy-feats[5.5.643~1-ab82de]:main():copy-feats.cc:143) Copied 5 feature matrices.
# Accounting: time=2 threads=1
# Ended (code 0) at Tue Feb 18 10:18:27 CET 2020, elapsed time 2 seconds

As per https://groups.google.com/forum/#!topic/kaldi-help/BxvNZuxTgz0 this might be related to OpenBLAS and the solution seems to be to either use ATLAS with Kaldi (but everything is 2x as slow) or to use the most recent open og OpenBLAS and compile it with:
make USE_THREAD=0 USE_LOCKING=1
I am currently recompiling Kaldi with the OpenBLAS git version 0.3.9.dev and will give this a try.

Solved by compiling the newest open blas tar.gz (https://github.com/xianyi/OpenBLAS/archive/v0.3.7.tar.gz from Aug 2019) with "make USE_THREAD=0 USE_LOCKING=1" as well as setting threads from 2 to 1 in the ivector code.
Not sure what did the trick, but now it works again. I was not able to compile the newest Kaldi with the openblas git version.


Adversarial Autoencoder minor fix

:cry:

@jrdi Sorry, should have posted an explanation when I closed this. I closed it because in this case the distribution that we want to model is a normal distribution. Therefore the sample from a normal distribution (at line 134) in this case can be seen as the "real" one, and the sample generated by the encoder as the "fake" one.

@eriklindernoren makes sense. Thank you for the explanation!


fonttools merge doesn't detect identical character

Hello,
I was doing some manupilation with fonttools merge in order to see its behaviour when we merge the same font file or when we merge  a subset non compact and a compact subset that contains the same characters. But the result was that fonttools keeps all the characters, so we end up with redundant characters in the output file.
You will find attached the files in and the files out, in the first manipulation, we try to merge file1NoCompact with file1NoCompact which lead to merge1.otf and in the second manipulation we merge file1NoCompact with file1Compact which lead to merge2.otf.
manupilation.zip
I wonder if we can use an option in order to avoid redundant characters.
Regards,
ZINEB

Duplicate of #2490

Hello,
I use the  version 04.33.3 of fonttools, and I have duplicate glyphs in the merge file. I checked the original tickets, I found that two commits were done to solve the problem, they are referenced by the  #2475
My fonttools is supposed to contain the fixes, but I still have duplicate glyphs with suffix #1 in the second glyph.
Please let me know how can I keep only one glyph per character in the output merge file.
Regards,
ZINEB


Make it possible to have right aligned column

Allow to style text inside table cells to make them right aligned in a backward compatible way.

 Align column with amount to the right on the customer invoices page

Do you have a screenshot of where right aligned is needed?

Do you have a screenshot of where right aligned is needed?

Find the screen shot where right aligned columns are used.

How it used to be with custom table

This change was requested by Andreas.

Find the screen shot where right aligned columns are used.
How it used to be with custom table
This change was requested by Andreas.

Thanks! So do I understand it correctly that numbers/currency only should be right aligned, and that this should be a part of our design system? If so, does it make sense to make it more explicit by creating numberHeader or currencyHeader or something? This way, it is slightly harder to forget, especially across teams and projects.

Find the screen shot where right aligned columns are used.
How it used to be with custom table
This change was requested by Andreas.

Thanks! So do I understand it correctly that numbers/currency only should be right aligned, and that this should be a part of our design system? If so, does it make sense to make it more explicit by creating numberHeader or currencyHeader or something? This way, it is slightly harder to forget, especially across teams and projects.

I like the idea. But not sure should it be part of design. At least on the internet some people advice that numeric data is right aligned


TypeScript 1.8

Everything is busted with TypeScript 1.8 and it's tsify's fault. :frowning:
https://github.com/TypeStrong/tsify/issues/110

Not going to let this hold back 2.0 I don't think; it can wait.

This looks resolved on the tsify end, hooray!
Now it's just a matter of upgrading and testing with the new version of TypeScript.

Integrated!


Change Email View Controller

Prepopulate with current email, and send PUT request upon change.
Blocked by https://github.com/DoSomething/dosomething/issues/4526

Closing this for now, to re-open when Profile sync is available and this work gets green light.


Disabling Redactor & CodeMirror

Hi, I'm loving this gem!
Is there a way to disable Redactor and CodeMirror altogether? I'm looking to add a textarea to pages that I can attach SirTrevorJS to.

Yeap. Just follow these instructions: https://github.com/comfy/comfortable-mexican-sofa/wiki/Replacing-default-wysiwyg-editor-with-redactor
You can change wysiwygs and codemirror editors to whatever you want by overriding some javascript.

Nice one, thanks a lot.

the content on that article is empty


Library is detecting a different iOS port to what's recommended

Thanks for implementing this library. I'm sure there's a good reason for this, but how come the library is detecting different ports to the ones Maestro recommends. Should these be changed?

Hello, @matt-dalton I think that documentation is outdated. This port was available around CLI version 1.19.
Based on the slack discussion from CLI v. 1.23 we should access different port. Android stays the same.


Expansion Header Missing

The path on the EmbeddedView for the headers in the Expansion Panel/Panel component is trying to point to Components/Expansion Panel/Test/Header that is missing from the project.
Is this still a work-in-progress?

@dylandaigle you probably closed this because you realized this, but I'll explain if others find this (and for my future reference) the views for the header and the content of the expansion panels are up to the user to create. It seems like a good point that it may be worth including some example views for them in the framework project though. Thanks for the feedback!


Loading modules from a bundle VFS fails if using relative paths in nested imports

Example:
main.lua loads MyAPI.lua, which in turn imports ./MyModule.lua. The first import will work, but the second won't, because it's trying to load MyModule from the file system instead of the bundled zip.
If loading this from disk, everything works as expected because the module loader resolves the relative path.
In a bundle (ZIP), all paths start with ./ and there's no "file system root" (or bundle root) conceptually. Fixing this may involve improving the bundle functionality itself or maybe even implement a fully-fledged snapshot VFS similar to that used by pkg... or maybe it's much simpler after all and I'm just not seeing it.
The result of this is that complex imports that can easily be used during development won't work in bundled apps. This is very unfortunate since it requires hacky workarounds that aren't intuitive at all, so it should be fixed rather swiftly. No code should need to be changed in order to run a bundle when compared to running it from the local file system directly.

For now, this is blocked by #39 because I don't want to touch the legacy code without having a safety net in place.

This is a consequence of the crappy import mechanism that never really worked well with bundled apps.


Model sticks when Players Disconnect

When players disconnect using a non-default model, their model often gets stuck in their last position permanently, also I've noticed if this happens sometimes I cant leave my game and I have to  Alt f4 to close it. A work around Ive noticed is to switch back to a default/reskin of the default model before leaving the game.

I don't have the ability to test this right now, but when this bug was first introduced it was traced to MoreCompany, which has a bug that prevents players from actually leaving the lobby, and instead teleports them somewhere else.

Ah I see, so this would be a bugfix that they would have to fix?

Disconnecting with morecompany works the exact same as vanilla

Thank you for your input! I hoping the dev will implement a bugfix for this.

@1A3Dev @BunyaPineTree i don't like to remind this again
but only MC 1.8.1 with newest version MRAPI won't have this issue, i perfer this bc some mistake are made by MRAPI, but idk is already a month now

I did some testing a while back with a friend and found that this bug doesn't even happen with only MRAPI installed. I don't have time to work on my own mod anymore, much less fix compatibility issues that I didn't cause. If the person in question doesn't want to look into the issue, it will have to be resolved with a PR.

I did some testing a while back with a friend and found that this bug doesn't even happen with only MRAPI installed. I don't have time to work on my own mod anymore, much less fix compatibility issues that I didn't cause. If the person in question doesn't want to look into the issue, it will have to be resolved with a PR.

i like the problem to be solved, and i don't like the problem to be pushed off all the time, as a user, gamer, community member or whatever u like to call but i did hope u can fix this issue, i can tell u don't like to wipe someone's mess, but many people are using MoreCompany

@BunyaPineTree i like the problem to be solved, and i don't like the problem to be pushed off all the time, as a user, gamer, community member or whatever u like to call but i did wish u can fix this issue (i think i can tell u don't like to wipe someone's mess), but many people are using MoreCompany, one of my friend was annoyed that he had to downgrade MoreCompany or endure this issue, until today he tell me even now this issue still there.

i will left this comment for the future
also a mod related to MC and MRAPI, this mod won't fix any about this issue: https://thunderstore.io/c/lethal-company/p/Citroel/MoreCompanyFix


fix map alignment

Fixes Issue
closes #5432

Changes proposed

[x] remove justify-center class from container in map page to default to flex-start

Check List (Check all the applicable boxes)

[x] My code follows the code style of this project.
[ ] My change requires changes to the documentation.
[ ] I have updated the documentation accordingly.
[x] All new and existing tests passed.
[x] This PR does not contain plagiarized content.
[x] The title of my pull request is a short description of the requested changes.

Screenshots

I think it looked better before? @amandamartin-dev what do you think?

I think it looked better before? @amandamartin-dev what do you think?

I personally prefer it centered as well but open to opinions always.
Slightly related - I do think we should address the style on the clear button in another issue if there isn't one open as it seems out of place and would likely look better if it matched with the UI of the tags.

Thanks Amanda!
Thank you @probablyArth for your contribution 👍 I think we update the issue to address the button as Amanda suggested. So I will close this PR (sorry for the confusion) and update the issue, I will leave the issue assigned to you, but let me know if you prefer not to continue


Spreading attributes from object requires comma

Better to show an example:
Invalid
button(type="button" ...props)

Proof
Valid
button(type="button", ...props)

Proof
Will be nice to have both cases working.

This should just be a case of treating ... as a special case like we do with : in https://github.com/pugjs/pug/blob/2f1110ec2ed8656253331e1e4b1b20b9d12185ee/packages/pug-lexer/index.js#L1221

@ForbesLindesay thank you, that helped! Created pull request to pug-lexer:
https://github.com/pugjs/pug/pull/3152

Fixed in v7.0.1


[flake] slsa-verifier: command not found

Tests often fail with the following error. This seems to be due to go install failing to install the verifier binary. When re-run the tests typically pass.
  **** Provenance content verification *****
/home/runner/work/example-package/example-package
Checking dist-tag: 0.0.11 == 0.0.11
go: downloading github.com/slsa-framework/slsa-verifier v1.4.2-0.20221130213533-128324f48837
go: github.com/slsa-framework/slsa-verifier/v2/cli/slsa-verifier@main: module github.com/slsa-framework/slsa-verifier@main found (v1.4.2-0.20221130213533-128324f48837), but does not contain package github.com/slsa-framework/slsa-verifier/v2/cli/slsa-verifier
**** Verifying provenance authenticity with verifier at HEAD *****
Testing against builder args
  **** Default parameters (annotated tags) *****
slsa-verifier verify-npm-package /tmp/tmp.Z5PqCPjHcj --builder-id=https://github.com/slsa-framework/slsa-github-generator/.github/workflows/builder_nodejs_slsa3.yml@refs/heads/main --attestations-path /tmp/tmp.OJwnYDZlNq --package-name @slsa-framework/e2e-nodejs-push-main-disttag-slsa3 --package-version 0.0.11 --source-uri github.com/slsa-framework/example-package
./.github/workflows/scripts/e2e-verify.common.sh: line 306: slsa-verifier: command not found

Example run: https://github.com/slsa-framework/example-package/actions/runs/5233921111/attempts/1

yeah it's really strange. it happens regularly too...

Yeah, I'm not sure what it is. It's just a regular go install command and it seems to fail randomly. Not just when we change something.

For some reason it's trying to download slsa-verifier at tag 1.4.2 rather than the latest which is v2.3.0. Also, v1.4.2 doesn't exist: https://github.com/slsa-framework/slsa-verifier/releases/tag/v1.4.2


Choosing initial Path for file picker and requestStorageAcess

Is there an option to choose file picker and requestStorageAccess initial path?
For requestStorageAcess choosing between sd Card and internal storage is possible using
StorageType.EXTERNAL
StorageType.SD_CARD

Is more precise path possible?
Also for file picker I don't see any option to choose even sd card or internal storage.

Added in version 1.5.0.
Here's the example:
// this constructor only supports API 30+
val fullPath = FileFullPath(context, StorageType.EXTERNAL, "DCIM")

// for API 29 and lower, you can:
val fullPath = FileFullPath(context, StorageId.PRIMARY, "DCIM")

storageHelper.requestStorageAccess(initialPath = fullPath)
storageHelper.openFolderPicker(initialPath = fullPath)


modified the lre file path

Description
In this PR, I modified the LRE file path and instead of keeping lre.mdx, I removed the .mdx extension from it.
Here is a problem
Even if the .mdx is removed, the page still shows me a 404 page not found error. First of all, there is no lre.mdx file in the explanation directory; the second point is that a README.md file is present in the local-remote-execution containing the LRE content.
What did I do?

I tried to give a path of the local-remote-execution/README.md file but it gave me this error.

You can there is a 404 error.
Plus the next and the previous page links are also gone that are normally present in the 404 error page

I created a lre.mdx file in the explanations directory but it gave me this error.

Now let me know what are the improvements that are required for this page to work. I have tried these possibilities based on my knowledge.
Thank you!
Type of change
Please delete options that aren't relevant.

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[x] Breaking change (fix or feature that would cause existing functionality to
not work as expected)
[ ] This change requires a documentation update

How Has This Been Tested?
Please also list any relevant details for your test configuration
Checklist

[x] Updated documentation if needed
[ ] Tests added/amended
[ ] bazel test //...  passes locally
[ ] PR is contained in a single commit, using git amend see some docs

This change is

 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.


Security: Kibana 未授权访问

In GitLab by @luotian-github on Mar 10, 2020, 02:06
Security: Kibana 未授权访问 board容器平台安全测试总结2.0.pdf
See attachment

In GitLab by @tmon546596046 on May 27, 2020, 24:37
assigned to @luotian-github and unassigned @tmon546596046

In GitLab by @tmon546596046 on May 27, 2020, 24:37
mr http://open.inspur.com/TechnologyCenter/board/merge_requests/2420 fix this issue

In GitLab by @luotian-github on Aug 31, 2020, 06:30
removed milestone


GTK TreeView: panic when using more than two columns

Hi everyone.
I hope I am not missing anything but, when trying out your simple TreeView example, if I add one more column, the program just crashes.
First off, I am using these dependencies:
[dependencies.gtk]
version = "0.9.0"
features = ["v3_16"]

[dependencies.gio]
version = ""
features = ["v2_44"]

Here is a gist with the changed code: https://gist.github.com/RomeuG/b1c20a4e7bbd3c715fa1e962695bb661
The crash is this:
thread 'main' panicked at 'assertion failed: `(left == right)`
  left: `2`,
 right: `3`', /home/romeu/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/macros.rs:16:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

The backtrace offers more information on the line of code this is happening:
13: <O as gtk::list_store::GtkListStoreExtManual>::insert_with_values
             at /home/romeu/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/macros.rs:16
14: liststore::create_and_fill_model
             at src/main.rs:21

Correct me if I am wrong, but can't ListStore have more than 2 columns? Is it something I am forgetting?
Thanks!

        model.insert_with_values(None, &[0, 2], &[&(i as u32 + 1), &entry, &more_entries[i]]);

You're here inserting 3 values (the last parameter) into 2 columns (the second parameter, &[0, 2]). That doesn't work, you always have to provide the same number of elements for both.
Maybe that function should be changed to take a slice of tuples instead so this mistake is prevented by the API. @GuillaumeGomez @bilelmoussaoui, opinions?

Oh, wow. I get it now, I should use something like &[0, 1, 2].
I will be honest I was reading &[0, 2] as a range of values from 0 to 2 inclusive.
I don't really know what is best in this case, so I will let you discuss it.
Thanks!

Maybe that function should be changed to take a slice of tuples instead so this mistake is prevented by the API. @GuillaumeGomez @bilelmoussaoui, opinions?

So that you would write the code above like
model.insert_with_values(None, &[(0, i + 1), (1, &entry), (2, &more_entries[i])]);

? If that's the case, it looks good to me. We just need to ensure it's properly documented.

Yes like that. I don't know how to document that without it causing problems with the gobject-introspection-provided docs. @GuillaumeGomez ?

rustdoc-stripper-ignore-next is the keyword it seems, see https://github.com/gtk-rs/gtk4-rs/blob/master/gtk4/src/dialog.rs#L44

Actually the gobject-introspection docs that are already inserted for this function are describing how the new function works... because they incidentally come from the varargs variant of the function instead of the valuesv variant. So the docs are fine and it all works much closer to the C API now.
@bilelmoussaoui I leave backporting to GTK4 to you.


Table component - setTimeout and message handler violation issues

There are lot of setTimeout and message handler issues are coming while scrolling table component because of that page gets hanged or sometime start responding slowly.

@cal-smith @zvonimirfras

Hey @abhisheksinghrana sorry this has taken so long, we've been pretty swamped with some of the v4/v11 work ... I did some preliminary testing, and it does seem like as the rows increase some of the interactions do slow down quite significantly. That being said, in order for it to slow down to a noticeable degree I had to add quite a few rows - have you explored using pagination as a way to reduce the number of rows visible on screen?

Weighing in and @cal-smith has a good point. Another suggestion I have for the issue author is following below steps:

Go to Performance tab
Hit the Record (icon) button
Run the use case that shows the console log in question
Click on the Stop button
Hit the Save profile (icon) button and select the download location
Post the downloaded file here

In this way, the team can have much clearer insight of what the offending code is, without having to spending time to guess how to re-create the performance problem. Hope this helps!
BTW agreed with @cal-smith that pagination is a "must" for ensuring performance. Without it, the page can have excessive amount of DOM nodes that Carbon Angular library would have no control over for the performance.

Any updates on this?

closing for now - reopen if needed


Decide whether to use tendermint or cosmos for Liquidity module REST endpoints

Summary

Problem Definition
Currently REST endpoint path is using /tendermint/liquidity/v1beta1/* Liquidity Swagger
But for the consistency with cosmos-sdk modules It could be /cosmos/liquidity/v1beta1/* Comos Swagger
Proposal

[ ]  Decide whether to use tendermint or cosmos for Liquidity module REST endpoints
[ ]  If it is decided to be cosmos, plan to proceed with the work below.

[x]  Change endpoints to use cosmos on .proto https://github.com/tendermint/liquidity/pull/405
[ ]  Update documentations
[ ]  ...

ref

https://github.com/cosmos/gaia/pull/859

For Admin Use

[ ] Not duplicate issue
[ ] Appropriate labels applied
[ ] Appropriate contributors tagged
[ ] Contributor assigned/self-assigned

I apologize for being late on this.  I've been super sick..


Naming Runspaces

Describe the Change
When inspecting a Pode server we often see several runspaces in different states. I know there are several runspaces for schedules and route listenings. It would be useful if the runspaces where named.
Currently

Find the PODE Process ID
Enter-PSHostProcess -Id <pid>
Get-Runspace

[Process:9048]: PS > Get-Runspace

 Id Name            ComputerName    Type          State         Availability
 -- ----            ------------    ----          -----         ------------
  1 Runspace1       localhost       Local         Opened        Available
  2 Runspace2       localhost       Local         Opened        Busy
  4 Runspace4       localhost       Local         Opened        Busy
  5 Runspace5       localhost       Local         Opened        Busy
  6 Runspace6       localhost       Local         Opened        Busy
  8 Runspace8       localhost       Local         Opened        Busy
 10 Runspace10      localhost       Local         Opened        Busy
 11 Runspace11      localhost       Local         Opened        Busy
 12 Runspace12      localhost       Local         Opened        Available
 13 Runspace13      localhost       Local         Opened        Busy
 15 Runspace15      localhost       Local         Opened        Busy
 16 Runspace16      localhost       Local         Opened        Busy
 17 Runspace17      localhost       Local         Opened        Busy
 18 Runspace18      localhost       Local         Opened        Busy
 19 RemoteHost      localhost       Local         Opened        Busy
 25 Runspace25      localhost       Local         Opened        Available
 32 Runspace32      localhost       Local         Opened        Available
 37 Runspace37      localhost       Local         Opened        Available

If we had runspaces that were labeled for schedule tasks that may help troubleshooting, etc.

You beat me to it @mdaneri! lol

I think it's done.
The only one that are not  named are the user tasks and schedule

I was actually hoping those would be part of them, but the helper should suffice.

you can assign a name.
I wrote this on the documentation
Customizing and Managing Runspace Names
Distinguishing Runspace Names in Pode
In Pode, internal runspaces are automatically assigned distinct names. This naming convention helps in identifying and managing these runspaces efficiently during debugging and monitoring. However, this is not the case for runspaces created by user tasks and schedules (excluding AsyncTask). These user-created runspaces typically have names in the Runspace<number> format, which can make it challenging to distinguish between different runspaces.
Customizing Runspace Names
To provide clarity and better manageability, you can set custom names for runspaces within your Pode tasks or schedules. This can be achieved using the Set-PodeCurrentRunspaceName cmdlet. By assigning meaningful names to your runspaces, you can easily identify and work with them, especially during debugging or performance monitoring.
Another useful cmdlet is Get-PodeCurrentRunspaceName, which retrieves the current runspace's name. This can be helpful if you need to log or display the runspace name dynamically.
Example
Here is an example demonstrating how to set a custom name for a runspace in a Pode task:
Add-PodeTask -Name 'Test2' -ScriptBlock {
    param($value)
    # Set a custom name for the current runspace
    Set-PodeCurrentRunspaceName -Name 'Test2'
    Start-Sleep -Seconds 10
    "A $($value) is never late, it arrives exactly when it means to" | Out-Default
}

In this example, the Set-PodeCurrentRunspaceName cmdlet is used to assign the name 'Test2' to the runspace executing the task. This makes it easier to identify the runspace in logs or during debugging sessions.


Disable default Docker default NAT network

This is not reliable to be used with the DC/OS DNS component since we'll be having the gateway added to the Docker containers' DNS servers list.
The DC/OS DNS agent (either Spartan or dcos-net) doesn't listen on the Docker gateway interface.

Tested as well.


feat: allow object to define how they are mapped to array

I wrote an object that I wanted to be mapped to array differently then just property -> value. PHP supports this with the JsonSerialize interface. So I wrote a simple check (with test) for that!
For the example, I think the test speaks for itself.

Makes sense 👍


Make Redis Prod Ready

Now that Redis is in BETA, we need to make sure the CG team is ready to support the service once it moves into prod
Acceptance Criteria

[ ] Have developed support documentation on how CG members will support the broker going forward
[ ] For paid plans set the final monthly costs
[ ] Tie Redis instance name to CF Service instance guid (AWS does not support tags on Redis instances)

Security considerations

[ ] SCR is ready

Implementation sketch
[links to background notes, sketches, and/or relevant documentation

[ ] Documentation is located in internal docs
[ ] Instance name work is complete
[ ] Enable service for all CF orgs on the pipeline

Let's add to this:

[ ] Customers have a clear long-term patch/upgrade path

[ ] Backup & Recovery?

no longer relevant


Education Detail for Json Resume not Given

I don't know if I am posting this issue in the correct place but it seems The education details is not displayed on the final draft of the PDF:
It just returns the name and dates
education": [
    {
      "institution": "King Williams University",
      "area": "Brandonsberg",
      "studyType": "Bachelor",
      "startDate": "2009-01",
      "endDate": "2011-12",
      "gpa": "",
      "courses": [
        "Minors: Accounting 1, Economics 1, Management 1, Mathematics 102, Electrical Physics, Economics 202, Statistics 1D",
        "Majors: Computer Science and Information Systems"
      ]
    },

Thanks for the report @surfer190. Looks like the themes are stingy with education info. Will work this into the next themes release (you can also modify them locally, of course) today or tomorrow and update here.

@surfer190 check a few things for me and compare them to my resume.json or my generated resume.html.
The theme I'm using is a slightly modified version of Slick.
If you look at the resume.template, you'll notice the template loops through courses:
{{#if courses.length}}

  {{#each courses}}

{{.}}

  {{/each}}

{{/if}}

Take a look at the source code of your template to see if your template iterates over courses as well.
If you used one of HackMyResume supported themes, you'll find the source code of your theme in the Fluent Themes Github repo.


Byregot's Brow

The simulator wants to use Byregot's Brow constantly, even without setting up Inner Quiet. I initially thought BB had changed in game but the macro's definitely don't work. Really excited to see that the optimizer was updated and hoping this issue can be fixed soon!
Cheers,
Garr

@ermad I think you changed that recently? Could you take a look?

Hmm, suddenly not doing it now. Could different seeds be responsible for when it does / does not appear?

And now it is back. How odd.

I don't think any new bug was introduced, just that Byregot's Brow was buffed enough that if you were able to cast it without Inner Quiet it might be a reasonable thing to do.
I'll put some additional checks on the action so it doesn't work without Inner Quiet active.

@ermad I try to avoid putting in restrictions that are artificial. If
Byregot's truly works irl without inner quiet, I would leave it like that
and not put an artificial restriction that might close off a non-standard
approach.
As you say there are some circumstances where it might be beneficial to use
without IQ.
On Thu, Jul 13, 2017 at 9:51 AM Ermad<EMAIL_ADDRESS>wrote:

I don't think any new bug was introduced, just that Byregot's Brow was
buffed enough that if you were able to cast it without Inner Quiet it might
be a reasonable thing to do.
I'll put some additional checks on the action so it doesn't work without
Inner Quiet active.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/doxxx/ffxiv-craft-opt-web/issues/156#issuecomment-315083777,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF1dd4GqT_HdDsVUe03Zbb1KGzVEEdd5ks5sNiDYgaJpZM4OW9ON
.

It doesn't, you can't even cast any of the Byregot's actions until you have 2 stacks of Inner Quiet. Previously this was modelled for Byregot's Miracle, but not Brow or Blessing.

Should be fixed in c7cc30ae.

Deployed to beta.

Thanks for the fix, however I don't think it is reflected on the beta: http://ffxiv-beta.lokyst.net/#/solver (in case I have the wrong url).  You'll have to rerun the solver to get a fresh result.

OK, I have a cached version, it worked when I brought it up in incognito. Sorry for being stupid! By the way this site has completely changed how I viewed crafting in this game. You both do amazing work.

No worries. I think our webhost does some aggressive caching, which we unfortunately don't have control over.
And thanks!


Add documentation to help with customisation of contrib.modeladmin

Just a rough outline for now. I will fill in the blanks as I have more time. Documentation writing is certainly not my strongest area, so contributions / advice from others welcome!

Relates to #2712 and #2717

This has taken me the best part of 3 full days to put together so far, and it's still needs a lot of work. Is anyone able to help pad this out with descriptions / examples? I'm happy to grant edit permissions on my fork.

@tomdyson I feel like I've covered everything I want to cover for now. It just needs some tidying up. I'm very unfamiliar with restructured text, so I'm sure I've probably got a few things wrong there with syntax/links etc.
I've dropped the 'recipes/examples' part for now, because I feel like the main cause for confusion has simply been that the documentation never explained anything properly, and this goes a long way in resolving that. Examples can always be added at a later date if needed, right?

@tomdyson apologies. Just broke things during a rebase. I'll get a new PR sorted


DBZ-3505: Better handling of invalid SQL Server connector configuration

See DBZ-3505.
With the proposed change, the invalid configuration is reported as follows:
Caused by: java.lang.IllegalArgumentException: Filtered column list for table testDB.dbo.tablea is empty

Testing considerations:

There doesn't seem to be a way to add a unit test for this code since it's part of the private API with the closest public caller being RelationalSnapshotChangeEventSource#doExecute.
It is possible to add an integration test for it like follows:@Test(expected = ConnectException.class)
@FixFor("DBZ-3505")
public void shouldFailOnInvalidColumnFilter() throws Exception {
    final Configuration config = TestHelper.defaultConfig()
            .with(SqlServerConnectorConfig.COLUMN_INCLUDE_LIST, ".^")
            .build();

    AtomicReference<Throwable> exception = new AtomicReference<>();
    start(SqlServerConnector.class, config, (success, message, error) -> exception.set(error));

    waitForConnectorShutdown("sql_server", "server1");
    consumeRecord();

    final Throwable e = exception.get();
    if (e != null) {
        throw (RuntimeException) e;
    }
}

But this test would pass even without the fix since it only expects the connector to fail. Digging a few levels deeper into the details of the caught exception doesn't seem very reasonable.

This code might be made better testable in the future if extracted to its own component which could be reused across other connectors. Currently, some of the other connectors just do SELECT *.

@morozov Applied, thanks!


Specify UTF-8 charset for MSVC

On Windows systems with non-English locales, the UTF-8 chars may cause "Error C2001: Newline in constant".
2 solutions:
Save the file with UTF-8 with BOM (byte-order mark).
Specify UTF-8 charset for compilation. Used by this commit.
See discussions here:
https://github.com/libusb/libusb/issues/207#issuecomment-288664124

This is great, thank you! Before I hit merge, could you move the code to the existing if (MSVC) block that already adds a few other flags? I'm thinking somewhere around line ~115.

I'd prefer set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8") for consistency with the other flags that are set in the block around 115.
I'm all for migrating to target_compile_options(), but imo this is better done as an all-or-nothing thing, also using target_include_directories and fixing up dependencies etc.

Thanks again!


fix(#1088): combobox didn't allow aria-labels to be changed

Fixes #1088
Change-log:

all aria-labels and some titles were hard-coded
dropdown items didn't highlight title (as its content)
combobox story with custom templates was not testable

Glad to help!
Was looking at the board and decided to lend a hand. Let me know if you want a specific order, otherwise i might grab some other issue.


TestCafe server throws an exception if globalWaitFor failed

When globalWaitFor is failed, there is no err.relatedSourceCode, so server throws an exception in getStepCode.

@georgiy-abbasov is working on this


Adding a responsive footer

Feature Request
Description
To add a footer matching the UI of the page
Proposed Solution
I will add a responsive footer using Tailwind CSS
Additional Information
Kindly assign this to me under GSSoC'24

@Jagpreet153
Footer is already responsive.


WebWallet DID Comm flow: Samples

Issuer Invitation to webwallet with manifest:
{
  "invitation": {
    "@id": "f39d825f-c647-434d-893f-8c76dd6906a9",
    "@type": "https://didcomm.org/didexchange/1.0/invitation",
    "label": "user-agent",
    "recipientKeys": [
      "Fy1CAy7D7AxynyBRFMyZB8S2RNoVPPBqgSDERRYJPyM8"
    ],
    "routingKeys": [
      "Goobf693U36p7VZkoRCWdtkEJZVTPCzZwbjm77VKiALC"
    ],
    "serviceEndpoint": "http://localhost:10091"
  },
  "manifest": {
    "@context": [
      "https://www.w3.org/2018/credentials/v1",
      "https://trustbloc.github.io/context/vc/issuer-manifest-credential-v1.jsonld"
    ],
    "type": [
      "VerifiableCredential",
      "IssuerManifestCredential"
    ],
    "name": "Example Issuer Manifest Credential",
    "description": "List of verifiable credentials provided by example issuer",
    "id": "http://example.gov/credentials/ff98f978-588f-4eb0-b17b-60c18e1dac2c",
    "issuanceDate": "2020-03-16T22:37:26.544Z",
    "issuer": "did:factom:5d0dd58757119dd437c70d92b44fbf86627ee275f0f2146c3d99e441da342d9f",
    "credentialSubject": {
      "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
      "contexts": [
        "https://w3id.org/citizenship/v3"
      ]
    }
  }
}

RP presentation exchange Request With invitation:
{
  "web": {
    "VerifiablePresentation": {
      "query": [
        {
          "type": "PresentationDefinitionQuery",
          "presentationDefinitionQuery": {
            "submission_requirements": [
              {
                "name": "Education Qualification",
                "purpose": "We need to know if you are qualified for this job",
                "rule": {
                  "type": "pick",
                  "count": 1,
                  "from": [
                    "E"
                  ]
                }
              },
              {
                "name": "Citizenship Information",
                "purpose": "You must be legally allowed to work in United States",
                "rule": {
                  "type": "all",
                  "from": [
                    "C"
                  ]
                }
              }
            ],
            "input_descriptors": [
              {
                "id": "citizenship_input_1",
                "group": [
                  "C"
                ],
                "schema": {
                  "uri": [
                    "https://w3id.org/citizenship/v1",
                    "https://w3id.org/citizenship/v2",
                    "https://w3id.org/citizenship/v3"
                  ],
                  "name": "US Permanent resident card"
                },
                "constraints": {
                  "fields": [
                    {
                      "path": [
                        "$.credentialSubject.lprCategory"
                      ],
                      "filter": {
                        "type": "string",
                        "pattern": "C09|C52|C57"
                      }
                    }
                  ]
                }
              },
              {
                "id": "degree_input_1",
                "group": [
                  "E"
                ],
                "schema": {
                  "uri": [
                    "https://trustbloc.github.io/context/vc/examples-ext-v1.jsonld"
                  ],
                  "name": "University degree certificate",
                  "purpose": "We need your education qualification details."
                },
                "constraints": {
                  "fields": [
                    {
                      "path": [
                        "$.credentialSubject.degree.type"
                      ],
                      "purpose": "Should be masters or bachelors degree",
                      "filter": {
                        "type": "string",
                        "pattern": "BachelorDegree|MastersDegree"
                      }
                    }
                  ]
                }
              },
              {
                "id": "degree_input_2",
                "group": [
                  "E"
                ],
                "schema": {
                  "uri": [
                    "https://trustbloc.github.io/context/vc/examples-ext-v1.jsonld"
                  ],
                  "name": "Diploma certificate",
                  "purpose": "We need your education qualification details."
                },
                "constraints": {
                  "fields": [
                    {
                      "path": [
                        "$.credentialSubject.degree.type"
                      ],
                      "purpose": "Should have valid diploma",
                      "filter": {
                        "type": "string",
                        "pattern": "Diploma"
                      }
                    },
                    {
                      "path": [
                        "$.credentialSubject.degree.coop"
                      ],
                      "purpose": "Should have co-op experience",
                      "filter": {
                        "type": "string",
                        "pattern": "Y"
                      }
                    }
                  ]
                }
              }
            ]
          }
        },
        {
          "type": "DIDConnect",
          "invitation": {
            "@id": "ab07ff32-af0b-4393-bc79-29994d9631aa",
            "@type": "https://didcomm.org/didexchange/1.0/invitation",
            "label": "second-user-agent",
            "recipientKeys": [
              "xqrhQfkwQA5ZjYu4k1pF84ovsTbA85ABFptyY3qKTBZ"
            ],
            "routingKeys": [
              "b8rkKuLWixc18v2tnrMaqgsRfVaVoRr9SVXWcfqRRby"
            ],
            "serviceEndpoint": "http://localhost:10091"
          }
        }
      ],
      "challenge": "",
      "domain": ""
    }
  }
}

sample issue credential attachment from Issuer:
{
   "credentials~attach":[
      {
         "lastmod_time":"0001-01-01T00:00:00Z",
         "data":{
            "json":{
               "@context":[
                  "https://www.w3.org/2018/credentials/v1",
                  "https://www.w3.org/2018/credentials/examples/v1"
               ],
               "credentialSubject":{
                  "id":"sample-id-udc"
               },
               "id":"http://example.edu/credentials/1872",
               "issuanceDate":"2010-01-01T19:23:24Z",
               "issuer":{
                  "id":"did:example:76e12ec712ebc6f1c221ebfeb1f",
                  "name":"Example University"
               },
               "referenceNumber":83294847,
               "type":[
                  "VerifiableCredential",
                  "UniversityDegreeCredential"
               ]
            }
         }
      }
   ]
}

Sample Presentation Submission Response with DIDComm response
{
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://trustbloc.github.io/context/vp/presentation-exchange-submission-v1.jsonld"
],
"holder": "did:trustbloc:testnet.trustbloc.local:EiC6v1g1ab52xaohOJnshb2bxyi3mbQnsD4A17yrqmuU_w",
"presentation_location": {
"descriptor_map": [
{
"id": "citizenship_input_1",
"path": "$.verifiableCredential.[0]"
}
]
},
"presentation_submission": {
"descriptor_map": []
},
"proof": {
"created": "2020-07-13T11:58:37.32-04:00",
"domain": "localhost:8080",
"jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..3Fd4Q0LISPypM8VwoO08o-Jhy3ashzZy_wjSaTx_k4C4ngsSuYM188S1_AF44IWKAmhmzTdRjlysXO3VHmTyBw",
"proofPurpose": "authentication",
"type": "Ed25519Signature2018",
"verificationMethod": "did:trustbloc:testnet.trustbloc.local:EiC6v1g1ab52xaohOJnshb2bxyi3mbQnsD4A17yrqmuU_w#OgawIyrRw8MU8jm6e2w5"
},
"type": [
"VerifiablePresentation",
"PresentationSubmission"
],
"verifiableCredential": [
{
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://www.w3.org/2018/credentials/examples/v1"
],
"credentialSubject": "sample-id-udc",
"id": "http://example.edu/credentials/1872",
"issuanceDate": "2010-01-01T19:23:24Z",
"issuer": {
"id": "did:example:76e12ec712ebc6f1c221ebfeb1f",
"name": "Example University"
},
"referenceNumber": 83294847,
"type": [
"VerifiableCredential",
"UniversityDegreeCredential"
]
}
]
}

Also note: https://github.com/trustbloc/edge-agent/issues/214

This scenario demonstrates where a User Wallet establishes a DIDComm connection to an Issuer and learns the available credentials available for issuance. The RP sends a Presentation Exchange and DIDComm invitation via CHAPI to the User Wallet. When the User Wallet connects to a Relying Party, the User Wallet requests the Issuer for a credential via DIDComm and establishes a DIDComm connection to the RP. The User Wallet then submits the Presentation Exchange response to the RP via CHAPI.
See video at https://youtu.be/LDEPzKf3M04

@sudeshrshetty in which part of the flow is a VP like the one shown in https://github.com/trustbloc/edge-agent/issues/227#issuecomment-657674974 sent?

@sudeshrshetty I'm interested in an example showing the response to the RP Adapter.

@llorllale
Sample response with PRC
{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://trustbloc.github.io/context/vp/presentation-exchange-submission-v1.jsonld"
  ],
  "holder": "did:trustbloc:testnet.trustbloc.local:EiCzsakTk3yrv8aZixKt5BjhAfgJIeYQ1XciOcaWeLJTRw",
  "presentation_location": {
    "descriptor_map": [
      {
        "id": "citizenship_input_1",
        "path": "$.verifiableCredential.[0]"
      }
    ]
  },
  "presentation_submission": {
    "descriptor_map": []
  },
  "proof": {
    "challenge": "7ef2acd6-bd34-415e-91ef-8a167eefc97a",
    "created": "2020-07-15T13:38:12.07-04:00",
    "domain": "example.com",
    "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..AqUkXPIsGnX-XiNxR5hkgUaxkoV5x0_HZKD137aMmDR0sAmUHX7rcWnJgXnYlwzZAJnBCoFmqjFSp3ij5oEZBA",
    "proofPurpose": "authentication",
    "type": "Ed25519Signature2018",
    "verificationMethod": "did:trustbloc:testnet.trustbloc.local:EiCzsakTk3yrv8aZixKt5BjhAfgJIeYQ1XciOcaWeLJTRw#kBWT2LoutCVdOo6nv1vW"
  },
  "type": [
    "VerifiablePresentation",
    "PresentationSubmission"
  ],
  "verifiableCredential": [
    {
      "@context": [
        "https://www.w3.org/2018/credentials/v1",
        "https://w3id.org/citizenship/v1"
      ],
      "credentialSubject": {
        "birthCountry": "Bahamas",
        "birthDate": "1958-07-17",
        "commuterClassification": "C1",
        "familyName": "SMITH",
        "gender": "Male",
        "givenName": "JOHN",
        "id": "did:example:b56ca6cd37bbf23",
        "image": "data:image/png;base64,iVBORw0KGgo...kJggg==",
        "lprCategory": "C09",
        "lprNumber": "999-999-999",
        "residentSince": "2015-01-01",
        "type": [
          "PermanentResident",
          "Person"
        ]
      },
      "description": "Permanent Resident Card of Mr.John Smith",
      "expirationDate": "2029-12-03T12:19:52Z",
      "id": "http://example.gov/credentials/ff98f978-588f-4eb0-b17b-60c18e1dac2c",
      "issuanceDate": "2019-12-03T12:19:52Z",
      "issuer": {
        "id": "did:web:example.world",
        "name": "Border Service, NY"
      },
      "name": "Permanent Resident Card",
      "type": [
        "VerifiableCredential",
        "PermanentResidentCard"
      ]
    }
  ]
}

Sample response with Consent VC
{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://trustbloc.github.io/context/vp/presentation-exchange-submission-v1.jsonld"
  ],
  "holder": "did:trustbloc:testnet.trustbloc.local:EiCzsakTk3yrv8aZixKt5BjhAfgJIeYQ1XciOcaWeLJTRw",
  "presentation_location": {
    "descriptor_map": [
      {
        "id": "citizenship_input_1",
        "path": "$.verifiableCredential.[0]"
      }
    ]
  },
  "presentation_submission": {
    "descriptor_map": []
  },
  "proof": {
    "challenge": "7ef2acd6-bd34-415e-91ef-8a167eefc97a",
    "created": "2020-07-15T13:15:40.198-04:00",
    "domain": "example.com",
    "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..q-V21FjIftMNiE6Frj50tIIOsZRqIItb-F1V03xX7w5YcTTLlZFqmzu0RMv5_77Q7_-bSs7vPo0mAfcYdmiuCg",
    "proofPurpose": "authentication",
    "type": "Ed25519Signature2018",
    "verificationMethod": "did:trustbloc:testnet.trustbloc.local:EiCzsakTk3yrv8aZixKt5BjhAfgJIeYQ1XciOcaWeLJTRw#kBWT2LoutCVdOo6nv1vW"
  },
  "type": [
    "VerifiablePresentation",
    "PresentationSubmission"
  ],
  "verifiableCredential": [
    {
      "@context": [
        "https://www.w3.org/2018/credentials/v1",
        "https://trustbloc.github.io/context/vc/consent-credential-v1.jsonld"
      ],
      "credentialSubject": {
        "id": "urn:uuid:d7fc3aa8-a631-4515-bfac-bc18f3c5ecc4",
        "issuerDIDDoc": {
          "doc": {
            "@context": [
              "https://w3id.org/did/v1"
            ],
            "authentication": [
              ""
            ],
            "created": "2020-07-15T16:18:04.502004734Z",
            "id": "did:peer:1zQmeCpC1LcsjPzq7jV5a6qwWMuZQSetAv4PrfCmpjdY5Rd9",
            "publicKey": [
              {
                "controller": "#id",
                "id": "",
                "publicKeyBase58": "69KwRHJqJPiQCDYkMHVGtTkAJsgsPCWxqSkzea4d4S9s",
                "type": "Ed25519VerificationKey2018"
              }
            ],
            "service": [
              {
                "id": "#agent",
                "priority": 0,
                "recipientKeys": [
                  "69KwRHJqJPiQCDYkMHVGtTkAJsgsPCWxqSkzea4d4S9s"
                ],
                "routingKeys": null,
                "serviceEndpoint": "http://issuer.adapter.rest.example.com:9071",
                "type": "did-communication"
              }
            ],
            "updated": "2020-07-15T16:18:04.502004734Z"
          },
          "id": "did:peer:1zQmeCpC1LcsjPzq7jV5a6qwWMuZQSetAv4PrfCmpjdY5Rd9"
        },
        "rpDIDDoc": {
          "doc": {
            "@context": [
              "https://w3id.org/did/v1"
            ],
            "created": "2020-07-15T16:17:59.462831562Z",
            "id": "did:peer:1zQmdrvrSUriiidzQxPkJKquwagY6ud4652zxHgGbFwmkGRc",
            "publicKey": [
              {
                "controller": "#id",
                "id": "",
                "publicKeyBase58": "D9ubipuLruDb7Jd6k6BkvqW6JjFQrmRw4MKc1o986CZX",
                "type": "Ed25519VerificationKey2018"
              }
            ],
            "service": [
              {
                "id": "#agent",
                "priority": 0,
                "recipientKeys": [
                  "D9ubipuLruDb7Jd6k6BkvqW6JjFQrmRw4MKc1o986CZX"
                ],
                "routingKeys": null,
                "serviceEndpoint": "http://wallet.mock.example.com:9081",
                "type": "did-communication"
              }
            ],
            "updated": "2020-07-15T16:17:59.462831562Z"
          },
          "id": "did:peer:1zQmdrvrSUriiidzQxPkJKquwagY6ud4652zxHgGbFwmkGRc"
        },
        "userDID": "did:peer:1zQmdrvrSUriiidzQxPkJKquwagY6ud4652zxHgGbFwmkGRc"
      },
      "id": "urn:uuid:4887592e-922e-48e5-bef0-9818f1e42d93",
      "issuanceDate": "2020-07-15T16:18:04.503815114Z",
      "issuer": "urn:uuid:26d981f3-a81b-473d-8a75-ba2898c11f1b",
      "type": [
        "VerifiableCredential",
        "ConsentCredential"
      ]
    }
  ]
}


CARDS-2132 - PREMs: line about about supported browsers in the email keeps getting missed by recepients

All emails (invitation & reminders for all surveys) should reflect this change.
Example email body BEFORE this change:

Example email body AFTER this change:

@marta- I'm not sure why link in my screenshot isn't behaving as a link. I cannot click on it and the font is not blue. I took this screenshot from msgeml.com.

@marta- I'm not sure why link in my screenshot isn't behaving as a link.

That is normal, it is not supposed to be a link.


As a user, I can download the sponsorship deck

Implement the link to download the sponsorship deck:

Acceptance Criteria

Link is /sponsorship
Link to the downloadable PDF

Closed by #57