text:
Tons of  yii\web\BadRequestHttpException: Unable to verify your data submission

What steps will reproduce the problem?
I got tons of  yii\web\BadRequestHttpException: Unable to verify your data submission in my logs since the latest updates, what is going on?
Additional info
2021-02-12 00:59:16 [176.59.73.204][-][-][error][yii\web\HttpException:400] yii\web\BadRequestHttpException: Unable to verify your data submission. in /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Controller.php:209
Stack trace:
#0 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Controller.php(179): yii\web\Controller->beforeAction()
#1 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Module.php(534): yii\base\Controller->runAction()
#2 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Application.php(104): yii\base\Module->runAction()
#3 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Application->handleRequest()
#4 /home/pelock/www/public_html/pelock.com/frontend/web/index.php(20): yii\base\Application->run()

The exception is thrown at:
    /**
     * {@inheritdoc}
     */
    public function beforeAction($action)
    {
        if (parent::beforeAction($action)) {
            if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !$this->request->validateCsrfToken()) {
                throw new BadRequestHttpException(Yii::t('yii', 'Unable to verify your data submission.'));
            }

            return true;
        }

        return false;
    }

My config:
$config = [
    'components' => [

		'session' => [
			'cookieParams' => [
				'httpOnly' => true,
				'secure' => true,
				'sameSite' => yii\web\Cookie::SAME_SITE_STRICT
			]
		],

        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'XXX',

			'csrfCookie' => [
				'httpOnly' => true,
				'secure' => true,
				'sameSite' => yii\web\Cookie::SAME_SITE_STRICT
			],
        ],
    ],
];

But why now, after the update??? I know Chrome 88 rolled out, but is it related?
I'm looking at the logs right now, check this out:
2021-02-12 00:59:16 [XXX][-][-][error][yii\web\HttpException:400] yii\web\BadRequestHttpException: Unable to verify your data submission. in /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Controller.php:209
Stack trace:
#0 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Controller.php(179): yii\web\Controller->beforeAction()
#1 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Module.php(534): yii\base\Controller->runAction()
#2 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Application.php(104): yii\base\Module->runAction()
#3 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Application->handleRequest()
#4 /home/pelock/www/public_html/pelock.com/frontend/web/index.php(20): yii\base\Application->run()
#5 {main}
2021-02-12 00:59:16 [XXX][-][-][info][application] $_GET = [
    'group' => 'products'
    'name' => 'hash-calculator'
]

$_POST = [
    '_csrf' => 'KDXpDuKdX9Ad-jgo9oVQmiZC8jnf9nSD2qFZ6fKHUZl8ftk8g_AFmnStbE2C4RqiFQuYCeqROLqS7xCwmuMnzA=='
    'HashCalculatorForm' => [
        'value' => 'df24f3f8b8ec46f5857f547ff05584fa

'
        'crlf' => '1'
    ]
    'calculate-hash' => ''
]

$_FILES = []

$_COOKIE = []

$_SERVER = [
    'USER' => 'pelock'
    'HOME' => '/home/pelock'
    'HTTP_ACCEPT_LANGUAGE' => 'ru-RU,en-US;q=0.9'
    'HTTP_ACCEPT_ENCODING' => 'gzip, deflate'
    'HTTP_REFERER' => 'https://www.pelock.com/products/hash-calculator'
    'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'
    'HTTP_USER_AGENT' => 'Mozilla/5.0 (Linux; U; Android 10; ru-ru; Redmi Note 9S Build/QKQ1.191215.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.6.2-gn'
    'HTTP_CONTENT_TYPE' => 'application/x-www-form-urlencoded'
    'HTTP_UPGRADE_INSECURE_REQUESTS' => '1'
    'HTTP_ORIGIN' => 'null'
    'HTTP_CACHE_CONTROL' => 'max-age=0'
    'HTTP_CONTENT_LENGTH' => '251'
    'HTTP_HOST' => 'www.pelock.com'
    'SCRIPT_FILENAME' => '/home/pelock/www/public_html/pelock.com/frontend/web/index.php'
    'REDIRECT_STATUS' => '200'
    'SERVER_NAME' => 'www.pelock.com'
    'SERVER_PORT' => '443'
    'SERVER_ADDR' => 'XXX'
    'REMOTE_PORT' => 'XXX'
    'REMOTE_ADDR' => 'XXX'
    'SERVER_SOFTWARE' => 'nginx/1.19.6'
    'GATEWAY_INTERFACE' => 'CGI/1.1'
    'HTTPS' => 'on'
    'REQUEST_SCHEME' => 'https'
    'SERVER_PROTOCOL' => 'HTTP/2.0'
    'DOCUMENT_ROOT' => '/home/pelock/www/public_html/pelock.com/frontend/web'
    'DOCUMENT_URI' => '/index.php'
    'REQUEST_URI' => '/products/hash-calculator'
    'SCRIPT_NAME' => '/index.php'
    'CONTENT_LENGTH' => '251'
    'CONTENT_TYPE' => 'application/x-www-form-urlencoded'
    'REQUEST_METHOD' => 'POST'
    'QUERY_STRING' => ''
    'FCGI_ROLE' => 'RESPONDER'
    'PHP_SELF' => '/index.php'
    'REQUEST_TIME_FLOAT' => 1613091556.1384
    'REQUEST_TIME' => 1613091556
]

The cookies array is empty... But in other entries it's not:
2021-02-12 11:35:20 [XXX][-][-][error][yii\web\HttpException:400] yii\web\BadRequestHttpException: Unable to verify your data submission. in /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Controller.php:209
Stack trace:
#0 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Controller.php(179): yii\web\Controller->beforeAction()
#1 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Module.php(534): yii\base\Controller->runAction()
#2 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Application.php(104): yii\base\Module->runAction()
#3 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Application->handleRequest()
#4 /home/pelock/www/public_html/pelock.com/frontend/web/index.php(20): yii\base\Application->run()
#5 {main}
2021-02-12 11:35:20 [XXX][-][-][info][application] $_GET = []

$_POST = [
    '_csrf' => 'NoE5_KkQkpYs3ekiJlJfqabEjeieVUNb58KlqtPMavFn92y4nFPd2BuEoBQXYHKY6ozq0Kg4cC2znffTl_QDtA=='
    'CheckoutForm' => [
        'name' => '...'
    ]
]

$_FILES = []

$_COOKIE = [
    'crisp-client%2Fsession%2F022e663c-63c0-43f9-aea2-2d2215e75e4a' => 'session_7af7b028-74d0-4885-baf1-16f54ac79077'
    'PHPSESSID' => '5c8r8j250dj9v21ljf1v79et1a'
    '_csrf' => '36635741d3e942ee64945ae2f085a5092ddfa552c3f6531af675a3758cf3e9fda:2:{i:0;s:5:\"_csrf\";i:1;s:32:\"phNVEwgHG_kPoAtyoXAxvgh8uLzS1OiG\";}'
]

Q
A

Yii version
2.0.40

PHP version
7.4.14

Operating system
Debian 10

Using FF and testing a bit your website I can see this in console:

Cookie “__cfduid” has been rejected because it is in a cross-site context and its “SameSite” is “Lax” or “Strict”.

WIld guess is that it could be the source of problem.

And what the hell is "__cfduid" cookie? Cloudflare? I'm not using Cloudflare on this site at all.

Ok. From which version of Yii you have upgraded to 2.0.40? Is changing back to the previous one fixes the problem in Chrome 88?

Related to the following:

https://github.com/yiisoft/yii2/issues/16295
https://github.com/yiisoft/yii2/issues/16659
https://github.com/yiisoft/yii2/issues/16780

The case in this issue is different though.

I have upgraded from 2.0.38 but from the logs I was able to identify the same errors from time to time, but since upgrade to 2.0.40 I got a whole list of these errors in logs.
I have temporarily disabled csrf validation, but the problem is I cannot reproduce this error myself, I'm not sure what's the reason, I suspect it could have something to do with public release of Chrome 88.
Strange thing is in some of those requests, the COOKIE array is completely empty, so it's completely valid to reject the request based on csrf validation, right? But why would the cookies be empty?

Strange thing is in some of those requests, the COOKIE array is completely empty, so it's completely valid to reject the request based on csrf validation, right?

Yes, absolutely.

But why would the cookies be empty?

Many reasons. If no real user ever complained, it could be that a bot is masking for a user and doesn't read cookies for whatever reason (despite it being a simple task). Or it could be misconfiguration in case you have multiple domains. Or some kind of a proxy like CloudFlare that kills the cookie.

I have upgraded from 2.0.38 but from the logs I was able to identify the same errors from time to time, but since upgrade to 2.0.40 I got a whole list of these errors in logs.

Can you temporarily downgrade to check if the rate of these errors changes?

I would check for parent::init which has changed in the controllers.
Although that was in 2.0.35
https://github.com/yiisoft/yii2/blob/master/framework/UPGRADE.md#upgrade-from-yii-2035

I will put a logging code inside Yii2 code to catch those events and log as many details as possible.

I put this in web\Controller.php:
    /**
     * {@inheritdoc}
     */
    public function beforeAction($action)
    {
        if (parent::beforeAction($action)) {
            if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !$this->request->validateCsrfToken()) {

				\Yii::error("CSRF-FAIL");
				\Yii::error(var_export($this->enableCsrfValidation, true));
				\Yii::error(var_export(Yii::$app->getErrorHandler()->exception, true));
				\Yii::error(var_export($this->request->validateCsrfToken(), true));
				\Yii::error(var_export($this->request->getCsrfToken(), true));
				\Yii::error(var_export($this->request->getMethod(), true));
				\Yii::error(var_export($this->request, true));

                throw new BadRequestHttpException(Yii::t('yii', 'Unable to verify your data submission.'));
            }

            return true;
        }

        return false;
    }

It seems $this->request->validateCsrfToken() fails (false)
2021-02-12 19:53:51 [82.145.220.195][-][-][error][application] CSRF-FAIL
2021-02-12 19:53:51 [82.145.220.195][-][-][error][application] true
2021-02-12 19:53:51 [82.145.220.195][-][-][error][application] NULL
2021-02-12 19:53:51 [82.145.220.195][-][-][error][application] false
2021-02-12 19:53:51 [82.145.220.195][-][-][error][application] 'w2vQpHmzDVwa9sWYdKtbOBH3jNJEkNkgMSE3r_pDkKu3JIicKMAgJFO_it4zwDQJRb3JigHlsRJkbA7Cw3Lp7w=='
2021-02-12 19:53:51 [82.145.220.195][-][-][error][application] 'POST'
2021-02-12 19:53:51 [82.145.220.195][-][-][error][application] yii\web\Request::__set_state(array(
   'enableCsrfValidation' => true,
   'csrfParam' => '_csrf',
   'csrfCookie' =>
  array (
    'httpOnly' => true,
    'secure' => true,
    'sameSite' => 'Strict',
  ),
   'enableCsrfCookie' => true,
   'enableCookieValidation' => true,
   'cookieValidationKey' => 'OwePE_cQR2obhvet0me9Z0assyBZP3nr',
   'methodParam' => '_method',
   'parsers' =>
  array (
  ),
   'trustedHosts' =>
  array (
  ),
   'secureHeaders' =>
  array (
    0 => 'X-Forwarded-For',
    1 => 'X-Forwarded-Host',
    2 => 'X-Forwarded-Proto',
    3 => 'Front-End-Https',
    4 => 'X-Rewrite-Url',
  ),
   'ipHeaders' =>
  array (
    0 => 'X-Forwarded-For',
  ),
   'secureProtocolHeaders' =>
  array (
    'X-Forwarded-Proto' =>
    array (
      0 => 'https',
    ),
    'Front-End-Https' =>
    array (
      0 => 'on',
    ),
  ),
   '_cookies' =>
  yii\web\CookieCollection::__set_state(array(
     'readOnly' => true,
     '_cookies' =>
    array (
    ),
  )),
   '_headers' =>
  yii\web\HeaderCollection::__set_state(array(
     '_headers' =>
    array (
      'accept-encoding' =>
      array (
        0 => 'gzip, deflate',
      ),
      'cache-control' =>
      array (
        0 => 'max-age=0',
      ),
      'sec-fetch-user' =>
      array (
        0 => '?1',
      ),
      'origin' =>
      array (
        0 => 'https://www.pelock.com',
      ),
      'user-agent' =>
      array (
        0 => 'Mozilla/5.0 (Linux; U; Android 10; M2004J19C Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.152 Mobile Safari/537.36 OPR/53.2.2254.55976',
      ),
      'referer' =>
      array (
        0 => 'https://www.pelock.com/products/pubg-mobile-config-encoder-decoder',
      ),
      'sec-fetch-mode' =>
      array (
        0 => 'navigate',
      ),
      'save-data' =>
      array (
        0 => 'on',
      ),
      'content-type' =>
      array (
        0 => 'application/x-www-form-urlencoded',
      ),
      'accept' =>
      array (
        0 => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9,image/webp',
      ),
      'sec-fetch-site' =>
      array (
        0 => 'same-origin',
      ),
      'sec-fetch-dest' =>
      array (
        0 => 'document',
      ),
      'accept-language' =>
      array (
        0 => 'en-US,en;q=0.9',
      ),
      'content-length' =>
      array (
        0 => '1709',
      ),
      'upgrade-insecure-requests' =>
      array (
        0 => '1',
      ),
      'host' =>
      array (
        0 => 'www.pelock.com',
      ),
    ),
  )),
   '_rawBody' => NULL,
   '_bodyParams' =>
  array (
    '_csrf' => 'Q04tY3cUSBx41xCKqN2SRUYOB6Mt2yEm9kbcBFwceaQtL2InQy0LcE29Q9X7hKs3AX0-9HeWaGOsN5I0K1U_7w==',
    'PubgEncodeForm' =>
    array (
      'input' => '+CVars=r.UserQualitySetting=1
+CVars=r.UserShadowSwitch=1
+CVars=r.ShadowQuality=0
+CVars=r.MobileContentScaleFactor=0.75
+CVars=r.UserVulkanSetting=0
+CVars=r.MobileHDR=0.0
+CVars=r.Mobile.SceneColorFormat=0.0
+CVars=r.Mobile.EnablePPR=0.0
+CVars=r.Shadow.MaxCSMResolution=720
+CVars=r.MaterialQualitySuperHigh=0.0
+CVars=r.UserHDRSetting=0
+CVars=r.ACESStyle=1
+CVars=r.UserMSAASetting=0
+CVars=r.DefaultFeature.AntiAliasing=0.0
+CVars=r.MobileMSAA=0
+CVars=r.MSAACount=0
+CVars=r.MaterialQualityLevel=0
+CVars=r.Shadow.CSM.MaxMobileCascades=0
+CVars=r.Shadow.DistanceScale=0
+CVars=r.Mobile.DynamicObjectShadow=0
+CVars=r.DepthOfFieldQuality=0
+CVars=r.RefractionQuality=0
+CVars=r.StaticMeshLODDistanceScale=1.3
+CVars=foliage.LODDistanceScale=0.6
+CVars=foliage.MinLOD=0
+CVars=r.DetailMode=0
+CVars=r.MaxAnisotropy=1
+CVars=r.Streaming.PoolSize=200
+CVars=r.EmitterSpawnRateScale=0.5
+CVars=r.ParticleLODBias=2
+CVars=r.MobileNumDynamicPointLights=1
+CVars=diy.SetDecalBakingRTSizeInLobby=720
+CVars=r.PUBGVersion=5
+CVars=r.MobileSimpleShader=0
+CVars=r.PUBGDeviceFPSLow=60
+CVars=r.PUBGDeviceFPSMid=60
+CVars=r.PUBGDeviceFPSHigh=60',
      'output' => '',
    ),
    'encode-button' => '',
  ),
   '_queryParams' => NULL,
   '_hostInfo' => NULL,
   '_hostName' => NULL,
   '_baseUrl' => '',
   '_scriptUrl' => '/index.php',
   '_scriptFile' => NULL,
   '_pathInfo' => 'products/pubg-mobile-config-encoder-decoder',
   '_url' => '/products/pubg-mobile-config-encoder-decoder',
   '_port' => NULL,
   '_securePort' => NULL,
   '_contentTypes' => NULL,
   '_languages' => NULL,
   '_csrfToken' => 'w2vQpHmzDVwa9sWYdKtbOBH3jNJEkNkgMSE3r_pDkKu3JIicKMAgJFO_it4zwDQJRb3JigHlsRJkbA7Cw3Lp7w==',
   '_secureForwardedHeaderParts' => NULL,
   '_isConsoleRequest' => NULL,
   '_events' =>
  array (
  ),
   '_eventWildcards' =>
  array (
  ),
   '_behaviors' => NULL,
   '_scriptFile' => NULL,
))
2021-02-12 19:53:51 [82.145.220.195][-][-][error][yii\web\HttpException:400] yii\web\BadRequestHttpException: Unable to verify your data submission. in /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Controller.php:218
...
Stack trace:
...
$_COOKIE = []

The IP address of the request in whois.sc database returns n42-08-08.opera-mini.net, maybe there's something wrong with Opera Mini browser? Again cookies array is empty, so no wonder it fails.
This is one dump, waiting for another shot.

I wonder if that's not some caching server of Opera Mini? Waiting for more data.

Another failure from 82.145.222.69 again Opera Mini. Again cookies not set.
    'HTTP_USER_AGENT' => 'Mozilla/5.0 (Linux; U; Android 10; M2004J19C Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.152 Mobile Safari/537.36 OPR/53.2.2254.55976'
Isn't it that it this mobile browser doesn't support secure or HTTP only cookies? So the CSRF token is not set at all, and when form is submitted it just fails (like its suppose to do)?

I got this Opera Mini com.opera.mini.native_53.2.2254.55976-532055976_minAPI17(armeabi-v7a)(nodpi)_apkmirror.com
https://www.apkmirror.com/apk/opera-software-asa/opera-mini/opera-mini-53-2-2254-55976-release/opera-mini-fast-web-browser-53-2-2254-55976-android-apk-download/download/
and it works fine...
and it works just fine ;)

Got another one, this time from diff IP range. COOKIES array is empty, again.
It seems like Yii2 doesn't save the CSRF cookie every time. There's something wrong.

This error happens on pages with multiple forms, I wonder if that matters...? Any help at all?

Hmm, is token overriden on each form addition? I need to check this. Thank you for heavy tests, always helpful.

I don't know, the token is just not there (not in cookies), I will put some hooks to see if it was set and then removed when the form was posted.

Ok, I've checked and each additional form on the page is not changing the token. The point of failure can be like following:

Token is generated (with beginForm, cookie is sent).
Data is posted.
On receiving the data cookie is not found so new token is generated and both values obviously not match.

So it all narrows down to cookie processing between a browser and an app and not something Yii can help with (unless it's a matter of misconfiguration). Temporary solution might be setting enableCsrfCookie in Request to false (but keep in mind that it degrades the performance since the session is restarted every time).
Anyway, still looking for a solution.

Just to make sure - could you paste here your nginx configuration for that domain?

Hmm, this is very strange, could that be that someone is trying to submit the form without visiting the site at the first place? But if that fails, I would personally stop trying, but I have those errors more in the logs

I don't think so since there is _csrf field in POST. In your last example it's clear that CSRF token has been changed between sending and receiving the data (see different _csrf - sent - and _csrfToken - stored in Request object - values).

I have to disable csrf because it fails everywhere... even when CSRF token is passed in cookies. Let me think. I have upgraded to PHP 8 yesterday, Let me review the logs again.

Single request
Dumped request:
   '_cookies' =>
  yii\web\CookieCollection::__set_state(array(
     'readOnly' => true,
     '_cookies' =>
    array (
      '_csrf' =>
      yii\web\Cookie::__set_state(array(
         'name' => '_csrf',
         'value' => 'LR7qZKKdoAjC95g3rYSDffKTvxyhLgjz',
         'domain' => '',
         'expire' => NULL,
         'path' => '/',
         'secure' => false,
         'httpOnly' => true,
         'sameSite' => NULL,
      )),
    ),
  )),
   '_headers' =>
  yii\web\HeaderCollection::__set_state(array(
     '_headers' =>
    array (
      'cookie' =>
      array (
        0 => '_csrf=18419c28117ba1d80938ad7fab3e39c849d882bd1278215f3a21f651db42f307a%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22LR7qZKKdoAjC95g3rYSDffKTvxyhLgjz%22%3B%7D; crisp-client%2Fsession%2F022e663c-63c0-43f9-aea2-2d2215e75e4a=session_0759c835-fe70-4f9b-b360-28f70dea7c4b',
      ),

Notice the  'secure' is set to false, but in my configuration I have this set to true.
CSRF value after URL decode:
18419c28117ba1d80938ad7fab3e39c849d882bd1278215f3a21f651db42f307a:2:{i:0;s:5:"_csrf";i:1;s:32:"LR7qZKKdoAjC95g3rYSDffKTvxyhLgjz";}

Form data:
   '_bodyParams' =>
  array (
    '_csrf' => 'mKPcfifrKy8UZhclfKnU7ENnCgThoiyyNkvOU6zSuwv09q9MV6RdV3YBfmg44YXaAiNsQ8ybfOJwIfsJ1IL_TQ==',

Cookie array:
$_COOKIE = [
    '_csrf' => '18419c28117ba1d80938ad7fab3e39c849d882bd1278215f3a21f651db42f307a:2:{i:0;s:5:\"_csrf\";i:1;s:32:\"LR7qZKKdoAjC95g3rYSDffKTvxyhLgjz\";}'
    'crisp-client%2Fsession%2F022e663c-63c0-43f9-aea2-2d2215e75e4a' => 'session_0759c835-fe70-4f9b-b360-28f70dea7c4b'
]

Hmm, yes, it looks like your config was not used at all...

Let me put some more hooks in Yii2 code. I will not sleep if I don't find it :), wait for the logs.

Scratch that, it's fine - request cookie collection does not rebuild cookies with the aforementioned configuration, it's using the default one since it's value that we want. And btw you have your cookie there in $_COOKIE so it's not a log bringing anything here.

My config from /frontend/config/main-local.php
<?php

$config = [
    'components' => [

		'session' => [
			'cookieParams' => [
				'httpOnly' => true,
				'secure' => true,
				'sameSite' => yii\web\Cookie::SAME_SITE_STRICT
			]
		],

        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'xxx',

			'csrfCookie' => [
				'httpOnly' => true,
				'secure' => true,
				'sameSite' => yii\web\Cookie::SAME_SITE_STRICT
			],
        ],
    ],
];

I have modified /web/Request.php
    /**
     * Validates CSRF token.
     *
     * @param string $clientSuppliedToken The masked client-supplied token.
     * @param string $trueToken The masked true token.
     * @return bool
     */
    private function validateCsrfTokenInternal($clientSuppliedToken, $trueToken)
    {
        if (!is_string($clientSuppliedToken)) {

			\Yii::error("CSRF-FAIL inside validateCsrfTokenInternal (is_string() failed)");
			\Yii::error('$clientSuppliedToken = ' . var_export($clientSuppliedToken, true));
			\Yii::error('$trueToken = ' . var_export($trueToken, true));

            return false;
        }

        $security = Yii::$app->security;

        // moje
		$unmasked_clientSuppliedToken = $security->unmaskToken($clientSuppliedToken);
		$unmasked_trueToken = $security->unmaskToken($trueToken);

        $result = $security->compareString($unmasked_clientSuppliedToken, $unmasked_trueToken);

        if ($result == false)
		{
			\Yii::error('CSRF-FAIL inside validateCsrfTokenInternal ($security->compareString failed)');
			\Yii::error('$clientSuppliedToken = ' . var_export($clientSuppliedToken, true));
			\Yii::error('$trueToken = ' . var_export($trueToken, true));
		}

		return $result;

		//return $security->compareString($security->unmaskToken($clientSuppliedToken), $security->unmaskToken($trueToken));
    }

And this is what we got in the logs:
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal ($security->compareString failed)
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $clientSuppliedToken = 'iRo4sGzROQsX06u3KaW4AFD4T72VcitVcl4oF4_f9265SEL5HptmXEDn_dhh9440Frs5i90WewwWH39C97S7Jg=='
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $trueToken = 'cjM7M_NEwnsXUmqpJyD3kYPmbGuyG4wYqGZ3SR01GsILRUgBnAW3SSETW9hVTtrb8bADM4Mt633mIRgCbmRyhw=='
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal (is_string() failed)
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $clientSuppliedToken = NULL
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $trueToken = 'cjM7M_NEwnsXUmqpJyD3kYPmbGuyG4wYqGZ3SR01GsILRUgBnAW3SSETW9hVTtrb8bADM4Mt633mIRgCbmRyhw=='
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] CSRF-FAIL
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $this->enableCsrfValidation = true
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal ($security->compareString failed)
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $clientSuppliedToken = 'iRo4sGzROQsX06u3KaW4AFD4T72VcitVcl4oF4_f9265SEL5HptmXEDn_dhh9440Frs5i90WewwWH39C97S7Jg=='
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $trueToken = 'cjM7M_NEwnsXUmqpJyD3kYPmbGuyG4wYqGZ3SR01GsILRUgBnAW3SSETW9hVTtrb8bADM4Mt633mIRgCbmRyhw=='
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal (is_string() failed)
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $clientSuppliedToken = NULL
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $trueToken = 'cjM7M_NEwnsXUmqpJyD3kYPmbGuyG4wYqGZ3SR01GsILRUgBnAW3SSETW9hVTtrb8bADM4Mt633mIRgCbmRyhw=='
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $this->request->validateCsrfToken() = false
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $this->request->getCsrfToken() = 'cjM7M_NEwnsXUmqpJyD3kYPmbGuyG4wYqGZ3SR01GsILRUgBnAW3SSETW9hVTtrb8bADM4Mt633mIRgCbmRyhw=='
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $this->request->getCookies() = yii\web\CookieCollection::__set_state(array(
   'readOnly' => true,
   '_cookies' =>
  array (
  ),
))
2021-02-14 12:21:38 [95.114.106.133][-][-][error][application] $_COOKIE[] = array (
)
2021-02-14 12:21:38 [95.114.106.133][-][-][error][yii\web\HttpException:400] yii\web\BadRequestHttpException: Unable to verify your data submission. in /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Controller.php:217
Stack trace:
#0 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Controller.php(179): yii\web\Controller->beforeAction()
#1 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Module.php(534): yii\base\Controller->runAction()
#2 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Application.php(104): yii\base\Module->runAction()
#3 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Application->handleRequest()
#4 /home/pelock/www/public_html/pelock.com/frontend/web/index.php(20): yii\base\Application->run()
#5 {main}
2021-02-14 12:21:38 [95.114.106.133][-][-][info][application] $_GET = [
    'group' => 'products'
    'name' => 'hash-calculator'
]

$_POST = [
    '_csrf' => 'iRo4sGzROQsX06u3KaW4AFD4T72VcitVcl4oF4_f9265SEL5HptmXEDn_dhh9440Frs5i90WewwWH39C97S7Jg=='
    'HashCalculatorHexForm' => [
        'value' => '8bee3ccad897'
    ]
    'calculate-hash-hex' => ''
]

$_FILES = []

$_COOKIE = []

2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal ($security->compareString failed)
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $clientSuppliedToken = 'JUS1EjbYN-yxZ-qhEQualQKxBMiu2unjhNn4Rkil1N8QE_RhdYJbpuQUpcZheN7yNflt-tyYopXjn6wles68iA=='
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $trueToken = 'pYJISNRWHnzER2PmAQp2cswJ_BCpdAh9HeGBQxfwaxbQ8AUXhhFdJrEQK5JjfgE_tmKwff1AZjtOlcktWaMvfQ=='
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal (is_string() failed)
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $clientSuppliedToken = NULL
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $trueToken = 'pYJISNRWHnzER2PmAQp2cswJ_BCpdAh9HeGBQxfwaxbQ8AUXhhFdJrEQK5JjfgE_tmKwff1AZjtOlcktWaMvfQ=='
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] CSRF-FAIL
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $this->enableCsrfValidation = true
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal ($security->compareString failed)
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $clientSuppliedToken = 'JUS1EjbYN-yxZ-qhEQualQKxBMiu2unjhNn4Rkil1N8QE_RhdYJbpuQUpcZheN7yNflt-tyYopXjn6wles68iA=='
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $trueToken = 'pYJISNRWHnzER2PmAQp2cswJ_BCpdAh9HeGBQxfwaxbQ8AUXhhFdJrEQK5JjfgE_tmKwff1AZjtOlcktWaMvfQ=='
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal (is_string() failed)
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $clientSuppliedToken = NULL
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $trueToken = 'pYJISNRWHnzER2PmAQp2cswJ_BCpdAh9HeGBQxfwaxbQ8AUXhhFdJrEQK5JjfgE_tmKwff1AZjtOlcktWaMvfQ=='
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $this->request->validateCsrfToken() = false
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $this->request->getCsrfToken() = 'pYJISNRWHnzER2PmAQp2cswJ_BCpdAh9HeGBQxfwaxbQ8AUXhhFdJrEQK5JjfgE_tmKwff1AZjtOlcktWaMvfQ=='
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $this->request->getCookies() = yii\web\CookieCollection::__set_state(array(
   'readOnly' => true,
   '_cookies' =>
  array (
  ),
))
2021-02-14 05:13:57 [180.214.233.91][-][-][error][application] $_COOKIE[] = array (
  'crisp-client%2Fsession%2F022e663c-63c0-43f9-aea2-2d2215e75e4a' => 'session_5adfc5a8-784e-40f0-bc68-dbc00be452f4',
)
2021-02-14 05:13:57 [180.214.233.91][-][-][error][yii\web\HttpException:400] yii\web\BadRequestHttpException: Unable to verify your data submission. in /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Controller.php:217
Stack trace:
#0 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Controller.php(179): yii\web\Controller->beforeAction()
#1 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Module.php(534): yii\base\Controller->runAction()
#2 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Application.php(104): yii\base\Module->runAction()
#3 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Application->handleRequest()
#4 /home/pelock/www/public_html/pelock.com/frontend/web/index.php(20): yii\base\Application->run()
#5 {main}
2021-02-14 05:13:57 [180.214.233.91][-][-][info][application] $_GET = [
    'group' => 'products'
    'name' => 'pubg-mobile-config-encoder-decoder'
]

$_POST = [
    '_csrf' => 'JUS1EjbYN-yxZ-qhEQualQKxBMiu2unjhNn4Rkil1N8QE_RhdYJbpuQUpcZheN7yNflt-tyYopXjn6wles68iA=='
    'PubgDecodeForm' => [
        'input' => '[UserCustom DeviceProfile]

+CVars=0B572C0A1C0B280C1815100D002A1C0D0D10171E444B

+CVars=0B572C0A1C0B2A11181D160E2A0E100D1A114448

+CVars=0B572A11181D160E280C1815100D004448

+CVars=0B5734161B10151C3A16170D1C170D2A1A18151C3F181A0D160B4448

+CVars=0B572C0A1C0B2F0C151218172A1C0D0D10171E4449

+CVars=0B5734161B10151C313D2B44495749

+CVars=0B5734161B10151C572A1A1C171C3A1615160B3F160B14180D44495749

+CVars=0B5734161B10151C573C17181B151C29292B44495749

+CVars=0B572A11181D160E573418013A2A342B1C0A16150C0D1016174448494B4D

+CVars=0B5734180D1C0B101815280C1815100D002A0C091C0B31101E1144495749

+CVars=0B572C0A1C0B313D2B2A1C0D0D10171E4448

+CVars=0B57383A3C2A2A0D00151C4448

+CVars=0B572C0A1C0B342A38382A1C0D0D10171E4449

+CVars=0B573D1C1F180C150D3F1C180D0C0B1C5738170D10381510180A10171E44495749

+CVars=0B5734161B10151C342A383844485749

+CVars=0B57342A38383A160C170D444D5749

+CVars=0B5734180D1C0B101815280C1815100D00351C0F1C154448

+CVars=0B572A11181D160E573A2A345734180134161B10151C3A180A1A181D1C0A444B

+CVars=0B572A11181D160E573D100A0D18171A1C2A1A18151C4449574C

+CVars=0B5734161B10151C573D00171814101A361B131C1A0D2A11181D160E4448

+CVars=0B573D1C090D11361F3F101C151D280C1815100D004449

+CVars=0B572B1C1F0B181A0D101617280C1815100D004449

+CVars=0B572A0D180D101A341C0A1135363D3D100A0D18171A1C2A1A18151C44495741

+CVars=1F161510181E1C5735363D3D100A0D18171A1C2A1A18151C44485749

+CVars=1F161510181E1C5734101735363D4449

+CVars=0B573D1C0D18101534161D1C444B

+CVars=0B573418013817100A160D0B160900444D

+CVars=0B572A0D0B1C181410171E57291616152A10031C444A4949

+CVars=0B573C14100D0D1C0B2A09180E172B180D1C2A1A18151C44485749

+CVars=0B5729180B0D101A151C35363D3B10180A4449

+CVars=0B5734161B10151C370C143D00171814101A291610170D35101E110D0A4448

+CVars=1D1000572A1C0D3D1C1A18153B181210171E2B2D2A10031C301735161B1B004448494B4D

+CVars=0B57292C3B3E2F1C0B0A101617444C

+CVars=0B5734161B10151C2A101409151C2A11181D1C0B4449'
        'output' => ''
    ]
    'decode-button' => ''
]

$_FILES = []

$_COOKIE = [
    'crisp-client%2Fsession%2F022e663c-63c0-43f9-aea2-2d2215e75e4a' => 'session_5adfc5a8-784e-40f0-bc68-dbc00be452f4'
]

2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal ($security->compareString failed)
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $clientSuppliedToken = 'JUS1EjbYN-yxZ-qhEQualQKxBMiu2unjhNn4Rkil1N8QE_RhdYJbpuQUpcZheN7yNflt-tyYopXjn6wles68iA=='
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $trueToken = 'aQjop320Dsy7ZsY81N-oFuQsjNKL83maiamRLcyb0AYceqX4L_NNls4xjki2q99bnkfAv9_HF9za3dlDgsiUbQ=='
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal (is_string() failed)
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $clientSuppliedToken = NULL
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $trueToken = 'aQjop320Dsy7ZsY81N-oFuQsjNKL83maiamRLcyb0AYceqX4L_NNls4xjki2q99bnkfAv9_HF9za3dlDgsiUbQ=='
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] CSRF-FAIL
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $this->enableCsrfValidation = true
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal ($security->compareString failed)
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $clientSuppliedToken = 'JUS1EjbYN-yxZ-qhEQualQKxBMiu2unjhNn4Rkil1N8QE_RhdYJbpuQUpcZheN7yNflt-tyYopXjn6wles68iA=='
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $trueToken = 'aQjop320Dsy7ZsY81N-oFuQsjNKL83maiamRLcyb0AYceqX4L_NNls4xjki2q99bnkfAv9_HF9za3dlDgsiUbQ=='
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal (is_string() failed)
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $clientSuppliedToken = NULL
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $trueToken = 'aQjop320Dsy7ZsY81N-oFuQsjNKL83maiamRLcyb0AYceqX4L_NNls4xjki2q99bnkfAv9_HF9za3dlDgsiUbQ=='
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $this->request->validateCsrfToken() = false
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $this->request->getCsrfToken() = 'aQjop320Dsy7ZsY81N-oFuQsjNKL83maiamRLcyb0AYceqX4L_NNls4xjki2q99bnkfAv9_HF9za3dlDgsiUbQ=='
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $this->request->getCookies() = yii\web\CookieCollection::__set_state(array(
   'readOnly' => true,
   '_cookies' =>
  array (
    '_csrf' =>
    yii\web\Cookie::__set_state(array(
       'name' => '_csrf',
       'value' => 'urM_RGCZuWHtbtwMzkLmT4nFStHnNSDk',
       'domain' => '',
       'expire' => NULL,
       'path' => '/',
       'secure' => false,
       'httpOnly' => true,
       'sameSite' => NULL,
    )),
  ),
))
2021-02-14 05:14:03 [180.214.233.91][-][-][error][application] $_COOKIE[] = array (
  'crisp-client%2Fsession%2F022e663c-63c0-43f9-aea2-2d2215e75e4a' => 'session_5adfc5a8-784e-40f0-bc68-dbc00be452f4',
  '_csrf' => 'eb41833be72a2b0620cc91cc46805ecd0bd53f6c4526a3517661de521c4459f6a:2:{i:0;s:5:"_csrf";i:1;s:32:"urM_RGCZuWHtbtwMzkLmT4nFStHnNSDk";}',
)
2021-02-14 05:14:03 [180.214.233.91][-][-][error][yii\web\HttpException:400] yii\web\BadRequestHttpException: Unable to verify your data submission. in /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Controller.php:217
Stack trace:
#0 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Controller.php(179): yii\web\Controller->beforeAction()
#1 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Module.php(534): yii\base\Controller->runAction()
#2 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Application.php(104): yii\base\Module->runAction()
#3 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Application->handleRequest()
#4 /home/pelock/www/public_html/pelock.com/frontend/web/index.php(20): yii\base\Application->run()
#5 {main}
2021-02-14 05:14:03 [180.214.233.91][-][-][info][application] $_GET = [
    'group' => 'products'
    'name' => 'pubg-mobile-config-encoder-decoder'
]

$_POST = [
    '_csrf' => 'JUS1EjbYN-yxZ-qhEQualQKxBMiu2unjhNn4Rkil1N8QE_RhdYJbpuQUpcZheN7yNflt-tyYopXjn6wles68iA=='
    'PubgDecodeForm' => [
        'input' => '[UserCustom DeviceProfile]

+CVars=0B572C0A1C0B280C1815100D002A1C0D0D10171E444B

+CVars=0B572C0A1C0B2A11181D160E2A0E100D1A114448

+CVars=0B572A11181D160E280C1815100D004448

+CVars=0B5734161B10151C3A16170D1C170D2A1A18151C3F181A0D160B4448

+CVars=0B572C0A1C0B2F0C151218172A1C0D0D10171E4449

+CVars=0B5734161B10151C313D2B44495749

+CVars=0B5734161B10151C572A1A1C171C3A1615160B3F160B14180D44495749

+CVars=0B5734161B10151C573C17181B151C29292B44495749

+CVars=0B572A11181D160E573418013A2A342B1C0A16150C0D1016174448494B4D

+CVars=0B5734180D1C0B101815280C1815100D002A0C091C0B31101E1144495749

+CVars=0B572C0A1C0B313D2B2A1C0D0D10171E4448

+CVars=0B57383A3C2A2A0D00151C4448

+CVars=0B572C0A1C0B342A38382A1C0D0D10171E4449

+CVars=0B573D1C1F180C150D3F1C180D0C0B1C5738170D10381510180A10171E44495749

+CVars=0B5734161B10151C342A383844485749

+CVars=0B57342A38383A160C170D444D5749

+CVars=0B5734180D1C0B101815280C1815100D00351C0F1C154448

+CVars=0B572A11181D160E573A2A345734180134161B10151C3A180A1A181D1C0A444B

+CVars=0B572A11181D160E573D100A0D18171A1C2A1A18151C4449574C

+CVars=0B5734161B10151C573D00171814101A361B131C1A0D2A11181D160E4448

+CVars=0B573D1C090D11361F3F101C151D280C1815100D004449

+CVars=0B572B1C1F0B181A0D101617280C1815100D004449

+CVars=0B572A0D180D101A341C0A1135363D3D100A0D18171A1C2A1A18151C44495741

+CVars=1F161510181E1C5735363D3D100A0D18171A1C2A1A18151C44485749

+CVars=1F161510181E1C5734101735363D4449

+CVars=0B573D1C0D18101534161D1C444B

+CVars=0B573418013817100A160D0B160900444D

+CVars=0B572A0D0B1C181410171E57291616152A10031C444A4949

+CVars=0B573C14100D0D1C0B2A09180E172B180D1C2A1A18151C44485749

+CVars=0B5729180B0D101A151C35363D3B10180A4449

+CVars=0B5734161B10151C370C143D00171814101A291610170D35101E110D0A4448

+CVars=1D1000572A1C0D3D1C1A18153B181210171E2B2D2A10031C301735161B1B004448494B4D

+CVars=0B57292C3B3E2F1C0B0A101617444C

+CVars=0B5734161B10151C2A101409151C2A11181D1C0B4449'
        'output' => ''
    ]
    'decode-button' => ''
]

$_FILES = []

$_COOKIE = [
    'crisp-client%2Fsession%2F022e663c-63c0-43f9-aea2-2d2215e75e4a' => 'session_5adfc5a8-784e-40f0-bc68-dbc00be452f4'
    '_csrf' => 'eb41833be72a2b0620cc91cc46805ecd0bd53f6c4526a3517661de521c4459f6a:2:{i:0;s:5:\"_csrf\";i:1;s:32:\"urM_RGCZuWHtbtwMzkLmT4nFStHnNSDk\";}'
]

Common thing -> multiple forms.
My controller for the hash calculator
	public function actionHashCalculator($group, $name)
	{
		// usage counts
		$this->view->params['HashCalculatorCounter'] = Integers::findByDescription('hash_calculator');

		// create a new form model
		$model_string = new HashCalculatorForm();
		$model_hex = new HashCalculatorHexForm();
		$model_file = new HashCalculatorFileForm();

		$bHashDone = false;

		// was it posted?
		if (Yii::$app->request->isPost)
		{
			if ($model_string->load(Yii::$app->request->post()))
			{
				$result = $model_string->hashCalculate();
				$bHashDone = true;
			}
			else if ($model_hex->load(Yii::$app->request->post()))
			{
				$result = $model_hex->hashCalculate();
				$bHashDone = true;
			}
			else if ($model_file->load(Yii::$app->request->post()))
			{
				$result = $model_file->hashCalculate();
				$bHashDone = true;
			}
		}

		if ($bHashDone == true)
		{
			if (!empty($result))
			{
				$this->view->params['result'] = $result;

				Yii::$app->session->setFlash('EventFormSubmitted');

				return $this->renderByLang($group . DIRECTORY_SEPARATOR . $name . DIRECTORY_SEPARATOR . 'index', [ 'model_string' => $model_string, 'model_hex' => $model_hex, 'model_file' => $model_file ] );
			}

			return $this->refresh();
		}

		return $this->renderByLang($group . DIRECTORY_SEPARATOR . $name . DIRECTORY_SEPARATOR . 'index', [ 'model_string' => $model_string, 'model_hex' => $model_hex, 'model_file' => $model_file ] );
	}

Isn't it that Yii::$app->request->post() can generate different CSRF token? Would make some sense...

I'm changing my controller code to read post params only one time:
	public function actionHashCalculator($group, $name)
	{
		// usage counts
		$this->view->params['HashCalculatorCounter'] = Integers::findByDescription('hash_calculator');

		// create a new form model
		$model_string = new HashCalculatorForm();
		$model_hex = new HashCalculatorHexForm();
		$model_file = new HashCalculatorFileForm();

		$bHashDone = false;

		// was it posted?
		if (Yii::$app->request->isPost)
		{
			$post_params = Yii::$app->request->post();

			if ($model_string->load($post_params))
			{
				$result = $model_string->hashCalculate();
				$bHashDone = true;
			}
			else if ($model_hex->load($post_params))
			{
				$result = $model_hex->hashCalculate();
				$bHashDone = true;
			}
			else if ($model_file->load($post_params))
			{
				$result = $model_file->hashCalculate();
				$bHashDone = true;
			}
		}

		if ($bHashDone == true)
		{
			if (!empty($result))
			{
				$this->view->params['result'] = $result;

				Yii::$app->session->setFlash('EventFormSubmitted');

				return $this->renderByLang($group . DIRECTORY_SEPARATOR . $name . DIRECTORY_SEPARATOR . 'index', [ 'model_string' => $model_string, 'model_hex' => $model_hex, 'model_file' => $model_file ] );
			}

			return $this->refresh();
		}

		return $this->renderByLang($group . DIRECTORY_SEPARATOR . $name . DIRECTORY_SEPARATOR . 'index', [ 'model_string' => $model_string, 'model_hex' => $model_hex, 'model_file' => $model_file ] );
	}

and see if it will trigger this error.

The fast that token supplied looks different doesn't necessary means that CSRF check would fail. We use token masking.

Common thing -> multiple forms.

Do you mean that if only a single form is there, it works well?

So far, so good, not a single error (I have made this change to those 2 routes). I will update you in a few hours.
I've been looking into this request post method, at one point it calls:
    /**
     * Returns the raw HTTP request body.
     * @return string the request body
     */
    public function getRawBody()
    {
        if ($this->_rawBody === null) {
            $this->_rawBody = file_get_contents('php://input');
        }

        return $this->_rawBody;
    }

Isn't it the issue? Just wildguessing ;)

I have made this change to those 2 routes

Do you mean leaving only a single form or changing Yii's code? If later, which code did you change and how?

I left my logging code in Yii2 components and when I handle the form I read $post_params = Yii::$app->request->post(); only one time (not 3 time for 3 diff forms). Like this, I have also added a form name to distinguish each one (I would love this feature be in the default implementation [public form name as a property or a setter], for example when I have 3 forms of the same model):
	public function actionHashCalculator($group, $name)
	{
		// usage counts
		$this->view->params['HashCalculatorCounter'] = Integers::findByDescription('hash_calculator');

		// create a new form model
		$model_string = new HashCalculatorForm();
		$model_string->_formName = "HashCalculatorForm";

		$model_hex = new HashCalculatorHexForm();
		$model_hex->_formName = "HashCalculatorHexForm";

		$model_file = new HashCalculatorFileForm();
		$model_file->_formName = "HashCalculatorFileForm";

		$bHashDone = false;

		// was it posted?
		if (Yii::$app->request->isPost)
		{
			$post_params = Yii::$app->request->post();

			if ($model_string->load($post_params, $model_string->_formName))
			{
				$result = $model_string->hashCalculate();
				$bHashDone = true;
			}
			else if ($model_hex->load($post_params, $model_hex->_formName))
			{
				$result = $model_hex->hashCalculate();
				$bHashDone = true;
			}
			else if ($model_file->load($post_params, $model_file->_formName))
			{
				$result = $model_file->hashCalculate();
				$bHashDone = true;
			}
		}

		if ($bHashDone == true)
		{
			if (!empty($result))
			{
				$this->view->params['result'] = $result;

				Yii::$app->session->setFlash('EventFormSubmitted');

				return $this->renderByLang($group . DIRECTORY_SEPARATOR . $name . DIRECTORY_SEPARATOR . 'index', [ 'model_string' => $model_string, 'model_hex' => $model_hex, 'model_file' => $model_file ] );
			}

			return $this->refresh();
		}

		return $this->renderByLang($group . DIRECTORY_SEPARATOR . $name . DIRECTORY_SEPARATOR . 'index', [ 'model_string' => $model_string, 'model_hex' => $model_hex, 'model_file' => $model_file ] );
	}

Nope, it's not it, still the same error:
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal ($security->compareString failed)
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $clientSuppliedToken = 'wk8EiUWgkTqglh2WVv6hTAEizieF3cuqK8Nlo2YJuHCDJU7kCv_ITPfGa8A-pOIeQ0yZft-Vnu9d9SD0K0XUSQ=='
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $trueToken = 'OVIxI-j2VumkHcxC6yq8XgE6I7WkVqk9zYzIqGmvsrt2JnVIsbsbjux4uC7dXI0VUWl21McZy1X5xaaYAuvHiA=='
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal (is_string() failed)
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $clientSuppliedToken = NULL
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $trueToken = 'OVIxI-j2VumkHcxC6yq8XgE6I7WkVqk9zYzIqGmvsrt2JnVIsbsbjux4uC7dXI0VUWl21McZy1X5xaaYAuvHiA=='
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] CSRF-FAIL
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $this->enableCsrfValidation = true
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal ($security->compareString failed)
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $clientSuppliedToken = 'wk8EiUWgkTqglh2WVv6hTAEizieF3cuqK8Nlo2YJuHCDJU7kCv_ITPfGa8A-pOIeQ0yZft-Vnu9d9SD0K0XUSQ=='
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $trueToken = 'OVIxI-j2VumkHcxC6yq8XgE6I7WkVqk9zYzIqGmvsrt2JnVIsbsbjux4uC7dXI0VUWl21McZy1X5xaaYAuvHiA=='
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] CSRF-FAIL inside validateCsrfTokenInternal (is_string() failed)
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $clientSuppliedToken = NULL
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $trueToken = 'OVIxI-j2VumkHcxC6yq8XgE6I7WkVqk9zYzIqGmvsrt2JnVIsbsbjux4uC7dXI0VUWl21McZy1X5xaaYAuvHiA=='
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $this->request->validateCsrfToken() = false
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $this->request->getCsrfToken() = 'OVIxI-j2VumkHcxC6yq8XgE6I7WkVqk9zYzIqGmvsrt2JnVIsbsbjux4uC7dXI0VUWl21McZy1X5xaaYAuvHiA=='
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $this->request->getCookies() = yii\web\CookieCollection::__set_state(array(
   'readOnly' => true,
   '_cookies' =>
  array (
  ),
))
2021-02-14 20:50:02 [182.2.136.13][-][-][error][application] $_COOKIE[] = array (
  'crisp-client%2Fsession%2F022e663c-63c0-43f9-aea2-2d2215e75e4a' => 'session_6fbffc93-aed5-4d8e-9db7-48a5e1873e47',
)
2021-02-14 20:50:02 [182.2.136.13][-][-][error][yii\web\HttpException:400] yii\web\BadRequestHttpException: Unable to verify your data submission. in /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Controller.php:217
Stack trace:
#0 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Controller.php(179): yii\web\Controller->beforeAction()
#1 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Module.php(534): yii\base\Controller->runAction()
#2 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/web/Application.php(104): yii\base\Module->runAction()
#3 /home/pelock/www/public_html/pelock.com/vendor/yiisoft/yii2/base/Application.php(392): yii\web\Application->handleRequest()
#4 /home/pelock/www/public_html/pelock.com/frontend/web/index.php(20): yii\base\Application->run()
#5 {main}
2021-02-14 20:50:02 [182.2.136.13][-][-][info][application] $_GET = [
    'group' => 'products'
    'name' => 'pubg-mobile-config-encoder-decoder'
]

$_POST = [
    '_csrf' => 'wk8EiUWgkTqglh2WVv6hTAEizieF3cuqK8Nlo2YJuHCDJU7kCv_ITPfGa8A-pOIeQ0yZft-Vnu9d9SD0K0XUSQ=='
    'PubgEncodeForm' => [
        'input' => '[UserCustom DeviceProfile]
+CVars=r.UserQualitySetting=0
+CVars=r.UserShadowSwitch=0
+CVars=r.ShadowQuality=0
+CVars=r.MobileContentScaleFactor=1.0
+CVars=r.UserVulkanSetting=1
+CVars=r.MobileHDR=0.0
+CVars=r.Mobile.SceneColorFormat=0.0
+CVars=r.Mobile.EnablePPR=0.0
+CVars=r.Shadow.MaxCSMResolution=1024
+CVars=r.MaterialQualitySuperHigh=0.0
+CVars=r.UserHDRSetting=2
+CVars=r.ACESStyle=1
+CVars=r.UserMSAASetting=0
+CVars=r.DefaultFeature.AntiAliasing=0.0
+CVars=r.MobileMSAA=0.0
+CVars=r.MSAACount=1.0
+CVars=r.StaticMeshLODDistanceScale=0.8
+CVars=foliage.LODDistanceScale=1
+CVars=r.ParticleLODBias=4
+CVars=r.EmitterSpawnRateScale=1
+CVars=r.DetailMode=2
+CVars=r.Shadow.CSM.MaxMobileCascades=2
+CVars=r.Shadow.DistanceScale=0.5
+CVars=r.MaxAnisotropy=4
+CVars=r.MaterialQualityLevel=1
+CVars=r.Mobile.DynamicObjectShadow=1
+CVars=r.DepthOfFieldQuality=0
+CVars=r.RefractionQuality=0
+CVars=foliage.MinLOD=0
+CVars=r.Streaming.PoolSize=400
+CVars=r.MobileNumDynamicPointLights=1
+CVars=r.PUBGVersion=5
+CVars=r.MobileSimpleShader=0
+CVars=fx.MaxCPUParticlesPerEmitter 1000'
        'output' => ''
    ]
    'encode-button' => ''
]

$_FILES = []

$_COOKIE = [
    'crisp-client%2Fsession%2F022e663c-63c0-43f9-aea2-2d2215e75e4a' => 'session_6fbffc93-aed5-4d8e-9db7-48a5e1873e47'
]

This time csrf cookie wasn't even there... What can I do to investigate it further?

These are two entirely different situations:

No cookie. Framework reacts alright to this case so the issue is lack of cookie. It may be valid case when a bot crawls the website and saves no cookies or user turned cookies off. I see that in your case you have domain set to empty string for your cookies. Usually that's totally fine but you may try setting it to domain prefixed by . explicitly.
CSRF token isn't correct. In this case it could be valid blocking or submitting too many POSTs at once.

That might happen but the form data is valid, why would bot POST actual data to the form?
So you're saying they clicked the submit button multiple times?

If it doesn't look like a spam then yes, likely that's valid user.
No idea. Try it.

Maybe I should store CSRF in the session instead of cookies?

This is what I suggested already.

Closing since we cannot provide a way to reproduce the problem. If anything new develops please let us know.

backend/config/main-local.php
'components' => [       'request' => [      //!!! insert a secret key in the following (if it is empty) - this is required by cookie validation          'cookieValidationKey' => 'unique key here',          'csrfParam' => '_csrf-backend',          **'csrfCookie' => [              'httpOnly' => true,              'path' => '/admin/',          ],**      ],

frontend/config/main-local.php
'components' => [       'request' => [      //!!! insert a secret key in the following (if it is empty) - this is required by cookie validation          'cookieValidationKey' => 'unique key here',          'csrfParam' => '_csrf-frontend',          **'csrfCookie' => [              'httpOnly' => true,              'path' => '/',          ],**      ],

for me solved without disabling CSRF.
good luck

My config looks like (advanced template):
		'request' => [
			// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
			'cookieValidationKey' => 'XXXXXXXXXXXXXXXXXXXXXX',

			'csrfCookie' => [
				'httpOnly' => true,
				'secure' => true,
				'sameSite' => yii\web\Cookie::SAME_SITE_STRICT
			],

Does it mean I was missing csrfParam field???

Well, no, by default it's _csrf and changing it should not affect the normal behavior but... since it looks like we tried everything we could think of trying to fix the problem, we can try this as well. Let us know @PELock

I don't think the name of the csrf token has anything to do with it, I'm trying this one:
		'request' => [
			// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
			'cookieValidationKey' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',

			'csrfParam' => '_csrf-frontend',

			'csrfCookie' => [
				'httpOnly' => true,
				//'secure' => true,
				//'sameSite' => yii\web\Cookie::SAME_SITE_STRICT
			],
		],

So I left httpOnly and commented out secure options. Logs cleared, new version pushed to the server. Waiting for results ;)

I have a question, I've been looking at the advanced template and its config looks different, what is the official, recommended config for this CSRF & Sessions? Maybe I'm doing something I shouldn't do in my configuration?

It all looks ok. If you use https definitely you should set secure to true, sameSite lax or strict as well.

I give up... still ton of unable to verify the submission errors, so it's not secure nor csrfParam name issue.
What more can I do to find the reason behind this?

Well, no, by default it's _csrf and changing it should not affect the normal behavior but... since it looks like we tried everything we could think of trying to fix the problem, we can try this as well. Let us know @PELock

did you specify seperate path for your backend and frontend part?
i think  because your app hase 2 part ( frontend and backend ) you should set path for each one .
try to add path for each one. the base path that u can access it.
@nareka88

Hmm, I have noticed something.
The official advanced theme from 2.0.13 has this thing in headers
https://github.com/yiisoft/yii2-app-advanced/blob/master/frontend/views/layouts/main.php
<head>
    <meta charset="<?= Yii::$app->charset ?>">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <?php $this->registerCsrfMetaTags() ?>
    <title><?= Html::encode($this->title) ?></title>
    <?php $this->head() ?>
</head>

but I'm using the old template from some older advanced theme and it looks like this:
<head>
	<meta charset="<?= Yii::$app->charset ?>">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<meta name="referrer" content="<?php if (empty($this->params["referrer"])) { ?>unsafe-url<?php } else { ?><?= $this->params["referrer"] ?><?php } ?>">
	<?= Html::csrfMetaTags() ?>

	<title><?= Html::encode($this->title) ?></title>

	<link rel="preconnect" href="https://translate.google.com" crossorigin>
	<link rel="preconnect" href="https://fonts.googleapis.com" crossorigin>
	<link rel="preload" href="/css/bootstrap/fonts/icomoon.ttf?wkc5aa" as="font" as="font" type="font/ttf" crossorigin>

	<link rel="alternate" hreflang="x-default" href="<?= BaseUrl::to($mirrorLinks['en'], true) ?>">
	<link rel="alternate" hreflang="en" href="<?= BaseUrl::to($mirrorLinks['en'], true) ?>">
	<link rel="alternate" hreflang="pl" href="<?= BaseUrl::to($mirrorLinks['pl'], true) ?>">

	<link rel="icon" href="/img/favicons/<?php if (YII_ENV_PROD) { ?>favicon.ico<?php } else { ?>favicon-green.ico<?php } ?>">
	<link rel="apple-touch-icon" href="/img/apple-touch-icon.png">
	<link rel="apple-touch-icon-precomposed" href="/img/favicons/apple-touch-icon-precomposed.png">
	<link rel="apple-touch-icon-precomposed" sizes="120x120" href="/img/favicons/apple-touch-icon-120x120-precomposed.png">

	<script type="text/javascript">window.$crisp=[];window.CRISP_WEBSITE_ID="022e663c-63c0-43f9-aea2-2d2215e75e4a";(function(){d=document;s=d.createElement("script");s.src="https://client.crisp.chat/l.js";s.async=1;d.getElementsByTagName("head")[0].appendChild(s);})();</script>
	<?php $this->head() ?>

I will try to replace
	<?= Html::csrfMetaTags() ?>

with
    <?php $this->registerCsrfMetaTags() ?>

and let you know.

Nah, still errors.

Well, no, by default it's _csrf and changing it should not affect the normal behavior but... since it looks like we tried everything we could think of trying to fix the problem, we can try this as well. Let us know @PELock

did you specify seperate path for your backend and frontend part?
i think because your app hase 2 part ( frontend and backend ) you should set path for each one .
try to add path for each one. the base path that u can access it.
@nareka88

I don't experience any problems in my backend and the path you set in your configuration is the default value anyway:
https://www.yiiframework.com/doc/api/2.0/yii-web-cookie#$path-detail
So it's not a solution to this problem.
I think it could be some kind of cookie blocking on the user side, but I'm not sure why or when.

authors: PELock ailmanki bizley nareka88 samdark


text:
inverseOf not working in most situations

The mechanism for inverseOf is implemented in ActiveRelationTrait::findFor(). This means that in $customer->orders the system works fine, because it's routed through the magic getter: return $this->_related[$name] = $value->findFor($name, $this).
However, if you're customizing the query, like $customer->getOrders()->with('status')->all(), the inverseOf system is bypassed entirely.
Worse, because ActiveDataProvider calls all() directly (prepareModels: return $query->all($this->db)) inverseOf doesn't work at all when a DataProvider is involved.
On first sight, it looks like the inverseOf logic could safely be applied to all calls to all(). Is it indeed just a matter of moving some code around or am I missing something?

Is there any prospect of resolving this bug in the near future or should I rather implements some workaround in my application?
It seems to me that the solution @laszlovl suggested makes sense.
If there is currently no time to implement the fix perhaps it could be useful to mention here some tried-tested workaround.

Also if the solution is not expected in the near future I would suggest to add some note to the documentation. I spent some time figuring out where the problem is. If the documentation specifies that the inverseOf() is currently supported only for the queries made through magic getter it would be much clearer.

@laszlovl fix looks fine to me, why is this not merged since May 20, 2015?

@davidhirtz every pull request needs review and testing before merge. We have limited time so we have to prioritize. This issue is tagged for the 2.0.8 release.

the fix is merged and will be released with 2.0.9

source: gharchive/issue

authors: VojtechH cebe davidhirtz tvdavid

license_type: permissive

license_source: github-api


text:
Captcha issue

Captcha doesn't works if yii\web\DbSession is used.
STR:

create empty advanced application project
set class of the 'session' component to yii\web\DbSession
captcha validation always failed

Do you able to actually store any data inside the session using yii\web\DbSession?

@klimov-paul yes, everything other works fine.

Guys, can I provide some other details for you?

just tried.

installed advanced app

composer create-project --prefer-dist yisoft/yii2-app-advanced advanced
php init #sets development environment

set database password in common/config/main-local.php

created session table

      CREATE TABLE session
      (
          id CHAR(40) NOT NULL PRIMARY KEY,
          expire INTEGER,
          data BLOB
      )

Opened contact form in frontend application. And submitted. Form submitted well.

authors: RusAlex klimov-paul usualdesigner


text:
BaseInflector::transliterate() is now public. Introduced different levels of transliteration strictness

Closes #10061

[x] Code
[x] Tests
[x] Changelog
[ ] Docs
[x] Code review

:exclamation: Changes:

Default $transliterator changed from Any-Latin; NFKD to Any-Latin; Latin-ASCII; [\u0080-\uffff] remove, so the slug will be generated more correctly. Leaded to changing a test-case on old line 180

Looks good to me.

You have "docs" not ticked. Do you plan to do some extra polishing?

Squashed and ready to be merged

Perfect. Thanks!

source: gharchive/pull-request

authors: SilverFire samdark


text:
Fix #10993 yii\rbac\DbManager::removeAllRules()

Fix #10993

Travis failed

@SilverFire , please check

https://github.com/yiisoft/yii2/commit/049ea37f778fae576d10835c48b476364a457436 Thank you!

authors: LAV45 SilverFire samdark


text:
Fixes #14318: Trigger yiiActiveForm.events.afterValidateAttribute after updating attribute

Trigger yiiActiveForm.events.afterValidateAttribute after updating attribute

Q
A

Is bugfix?
yes

New feature?
no

Breaks BC?
no

Tests pass?
yes

Fixed issues
#14318

Merged. Thank you!

authors: dmirogin samdark


text:
Add TrimValidator to classes.php

Q
A

Is bugfix?
✔/❌

New feature?
❌

Breaks BC?
❌

Fixed issues

👍🏻

authors: WinterSilence bizley


text:
add homebrew

add install via homebrew
there is a brew formula:
https://github.com/Homebrew/homebrew-core/blob/master/Formula/totp-cli.rb

Thank you :)

That's quick, @muescha how did you know this was exactly what I wanted? Thank you! 😂

authors: muescha ryenus yitsushi

repo: yitsushi/totp-cli

license: MIT


text:
Create requirements.txt

Resolves #1

Actually, it appears that absresgetter isn't on PyPi, so this won't work as intended yet


text:
Make Short URL H2 in the results panel

It is better if I make the short URL an H2 (or something relevant) so that it is better visible that the others.
Currently is it is a TextField in a form.

To see if I can add it in a quote with different font so that it differentiates from the rest

This is implemented

repo: ymark/easylink

license: Unlicense


text:
什么意思，这个图我真的绷不住了

提交前必须检查以下项目

[X] 请确保使用的是仓库最新代码（git pull），一些问题已被解决和修复。
[X] 由于相关依赖频繁更新，请确保按照Wiki中的相关步骤执行
[X] 我已阅读FAQ章节并且已在Issue中对问题进行了搜索，没有找到相似问题和解决方案
[X] 第三方插件问题：例如llama.cpp、text-generation-webui、LlamaChat等，同时建议到对应的项目中查找解决方案
[X] 模型正确性检查：务必检查模型的SHA256.md，模型不对的情况下无法保证效果和正常运行

问题类型
效果问题
基础模型
Alpaca-7B
操作系统
Windows
详细描述问题
# 请在此处粘贴运行代码（如没有可删除该代码块）

依赖情况（代码类问题务必提供）
# 请在此处粘贴依赖情况

运行日志或截图
# 请在此处粘贴运行日志

有什么奇怪的？用了ChatGPT爬取的数据，自然就是会按统计规律得到这种回复。我们并没有单独加入一些身份类的训练数据。

有什么奇怪的？用了ChatGPT爬取的数据，自然就是会按统计规律得到这种回复。我们并没有单独加入一些身份类的训练数据。

原来如此，没想到大佬居然会看问题，我微调试试效果~

repo: ymcui/Chinese-LLaMA-Alpaca


text:
Accessibility Visualizerが、スクリーンリーダーからアクセシブルではない

ずっと悩んでいることなのですが、解決の糸口が見出せないので、Issueに書いておきます。
アイデアのある方はぜひコメントをしてください。
Accessibility Visualizerは、スクリーンリーダーのような支援技術にとって必要なマシンリーダビリティが確保できているかどうかを、コーダーやエンジニアやデザイナーにとって確認する方法が、スクリーンリーダーで読ませてみるくらいしか無いことに対する課題感から開発をしはじめました。
Visualizerの名の通り、ビジュアルな表現をすることを目的としていて、Accessibility Visualizer自体がスクリーンリーダーフレンドリーになることは二の次になってしまっていたんですが、とはいえAccessibilityのツールである以上、何かしらの対策を打てないかをずっと悩んでいます。
なにより、Accesibility Visualizerを開発に取り入れて改善がされたものの、いちばんの恩恵を受けるのはスクリーンリーダーのような支援技術のユーザーのはずです。彼らが周囲の開発者にAccessibility Visualizerを自信をもって推薦できるようにするためにも、どうにかスクリーンリーダーで使えるツールになることを目指したいなと思っています。

GitHubのコメント欄（今まさにこれ書くのに使ってる場所！）の上にある書式設定ツールバーのボタンについてるツールチップが、popoverになってる関係で、ぜんぶのツールチップにAccessibility Visualizerの要素が差し込まれて、「Heading Accessibility Visualizer 133」みたいなAccessible Nameになってしまっている。これはこれで問題っぽい。
これを解消するために、Accessibilty Visualizerがオーバーレイする要素には、aria-hiddenをつけようと思ってます。すみません。
いったん、Accessiblity Visualizerがオーバーレイしている情報をスクリーンリーダーで読めるようにするのは諦めて、かわりに同等の情報をデベロッパーツールに出すことを考える方向でいこうかなと思っています（まだ諦めてません！）


text:
Update README to include LOGIN role

Running lein run migrate gave a permission error because memoryhole did not have log in permission.

👍

authors: paulrd yogthos

repo: yogthos/memory-hole


text:
ルートノードを表すページを実装

add documentation file
destroy int
add Cell interface
Record satisfy Cell interface
KeyCell satisfy Cell interface
第一ページをルートノードとして扱いセパレートキーを保存するy
ルートページからキーを参照してデータを集める
fix: ポインタのインデックスが1多かった
formatting
ルートページのポインタ列がキーによってソートされるようにする

コメント削除任せます。

@tychy
レビューありがとうございます
すぐ次のPR出すんで、不要なコメントはそっちで消しときます

authors: tychy yokonao

repo: yokonao/tychyDB


text:
Request: add parallelizable = "YES|NO" and testExecutionOrdering = "random" options to XCScheme.TestableReference generator.

Not sure if it should be here and not under tuist/xcodeproj, but since XcodeGen is not on latest xcodeproj anyway I see no reason to create the issue under xcodeproj git.
Xcode 10 introduced several options for tests:
parallelizable = "YES|NO"
testExecutionOrdering = "random"
xcodeproj included with XcodeGen (4.3.1) could only set option "skipped=YES|NO" to TestableReference section of .xcscheme file. That is also true for xcodeproj 6.0 (current latest)
These options are implemented in CocoaPods\Xcodeproj
but we are not using that tool.
In case there is nothing to be done with the problem on XcodeGen side, I will post the issue on tuist\xcodeproj git. Yet it's up to XcodeGen to use the latest xcodeproj then.

Yes, we need xcodeproj support first. If you could open an issue there as well that would be great 👍

Opened an issue with tuist\xcodeproj #335

Added in #434

authors: sjepifanov yonaskolb

repo: yonaskolb/XcodeGen

license: mit

license_source: bigquery


text:
test23

asdf

Branch bugfix/issue-57-test23 created!


text:
Atome Editor - Remote Sync Hangs After Some Time

Hi, Remote Sync Hangs After Some Time - say maybe 10hours +, U have to shutdown atom and open it again before Upload FIle Option works. Using the latest version of Remote SYnc.

No response ?
Is this project abandoned ?

This is likely a timeout that could occur at any point along the connection. Try extending your keep alive settings on your server. ClientAliveInterval, ClientAliveCountMax, TCPKeepAlive, etc.

authors: daverickdunn marcoczen

repo: yongkangchen/remote-sync


text:
Implement retry and retryBackoff in authorization webhook

What would you like to be added:

[ ] Add retry in authorization webhook
[ ] Add retryBackoff(exponential time in ms to wait between retries, https://github.com/kubernetes/kubernetes/blob/fcf9300cc8e6918fce26e9ad1e9f7360a7cbf552/staging/src/k8s.io/apiserver/pkg/util/webhook/webhook.go#L123)

Why is this needed:
Authorizers can also be unstable, so we should retry it in a safe way.

@hackerwins Could I try this issue?

Sure 👍

@hackerwins I started designing to get this working. I have a few questions during this process.

Is there a recommended maximum number of retries and maximum latency in mind? For example, the default maximum number of retries and maximum latency.
I think would be good to talk about the options that can be input from the user, such as the maximum number of requests, whether to retry, the maximum waiting time, and timeout. Are you considering these options?

Thank you for your question.

I think appropriate values will be different for each environment to which it is applied. It would be nice to be able to create with default values and allow users to change them.
How about implementing the basic structure first and extracting them one by one?

repo: yorkie-team/yorkie


text:
🛑 Api Payments is down

In efb1b0c, Api Payments (https://payments.rexmas.com) was down:

HTTP code: 503
Response time: 118 ms

Resolved: Api Payments is back up in 73db21c.

repo: yorkijr/rexmas-uptime


text:
🛑 Api bnovus-qa is down

In 849f2a2, Api bnovus-qa (https://manager-api.qa.rexmas.com/admin) was down:

HTTP code: 504
Response time: 10199 ms

Resolved: Api bnovus-qa is back up in fe2a5c3 after 8 hours, 44 minutes.


text:
[Feature] Listening to volume changes without changing the volume

For example: listen to the volume keys to change the font size, page up and down.
Is there any way to do this?
Thanks.

Detect volume button presses is not possible on iOS as there is no official API. You may try some hacky ways like resetting volume to previous level right after volume changes, to mimic the button press event. But beware that your app might get rejected when submitting to app store.
In Android, you can use the following package to intercept volume key presses:
https://pub.dev/packages/flutter_android_volume_keydown
Notes that it overrides the onKeyDown method from activity, and you have to edit the native codes.

Thanks for your reply :)

authors: lollipopkit yosemiteyss


text:
🛑 Secret Site is down

In 5e7b7e2, Secret Site ($SECRET_SITE) was down:

HTTP code: 0
Response time: 0 ms

Resolved: Secret Site is back up in 5c81328.


text:
importlib_metadata.api.PackageNotFoundError

Traceback (most recent call last):
File "/usr/local/bin/mongo-connector", line 11, in
load_entry_point('mongo-connector==3.1.1', 'console_scripts', 'mongo-connector')()
File "/usr/local/lib/python3.7/site-packages/pkg_resources/init.py", line 480, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/local/lib/python3.7/site-packages/pkg_resources/init.py", line 2693, in load_entry_point
return ep.load()
File "/usr/local/lib/python3.7/site-packages/pkg_resources/init.py", line 2324, in load
return self.resolve()
File "/usr/local/lib/python3.7/site-packages/pkg_resources/init.py", line 2330, in resolve
module = import(self.module_name, fromlist=['name'], level=0)
File "/usr/local/lib/python3.7/site-packages/mongo_connector-3.1.1-py3.7.egg/mongo_connector/connector.py", line
from mongo_connector import config, constants, errors, util
File "/usr/local/lib/python3.7/site-packages/mongo_connector-3.1.1-py3.7.egg/mongo_connector/config.py", line 20
from mongo_connector.constants import version
File "/usr/local/lib/python3.7/site-packages/mongo_connector-3.1.1-py3.7.egg/mongo_connector/constants.py", line
import importlib_metadata
File "/usr/local/lib/python3.7/site-packages/importlib_metadata-0.11-py3.7.egg/importlib_metadata/init.py",
version = version(name)
File "/usr/local/lib/python3.7/site-packages/importlib_metadata-0.11-py3.7.egg/importlib_metadata/api.py", line
return distribution(package).version
File "/usr/local/lib/python3.7/site-packages/importlib_metadata-0.11-py3.7.egg/importlib_metadata/api.py", line
return Distribution.from_name(package)
File "/usr/local/lib/python3.7/site-packages/importlib_metadata-0.11-py3.7.egg/importlib_metadata/api.py", line
raise PackageNotFoundError(name)
importlib_metadata.api.PackageNotFoundError: importlib_metadata
help-----thanks

importlib_metadata0.12自行解决了

repo: yougov/solr-doc-manager


text:
已有的工程中如何开始使用呢？

其实我在想 之前使用的xib 或纯代码约束实现的UI 然后刚刚看到这个sdk 感觉很强大，but 在已有的工程中如何开始使用呢？

非常感谢你的支持。这个对已经有的工程中的代码是不影响的。而且这个库是可以和XIB，SB，以及AutoLayout和masonry共用的。因此你放心的加入吧。你如果用POD则安装 MyLayout 1.2.9版本。或者你直接复制Lib下的文件到你的工程中就可以了。

repo: youngsoft/MyLinearLayout


text:
多个数据集的向右展开能否实现？

为了您的问题能得到及时准确解答，请认真填写下面各个选项，感谢您的配合。

当前使用的UReport的具体版本号：2.3.0

遇到的问题描述：

两个报表使用2个数据集

涉及到的异常信息（完整异常信息）：

尝试了很多配置父格的办法也不行

相关截图：

想要实现如图效果

结果如图

好好看看视频，理解单元格迭代原理，不要瞎试。

authors: autozhu youseries

repo: youseries/ureport


text:
Problem with connection

Hi,
Thank you for this guide. I followed the instructions but for some reason I get an error trying to connect to the server

What could be causing this issue? I tried from android and connection is unsuccessful as well.

Can you try the solution here:
https://appuals.com/how-to-fix-the-l2tp-connection-attempt-failed-because-the-security-layer-encountered-a-processing-error/

Also - to verify that it's a Windows client issue, can you try connecting to the server from your phone?

repo: yousseb/softether-server


text:
XRecyclerViewAdapter.addFooterView 底部布局无法居中

XRecyclerViewAdapter.addFooterView 底部布局无法居中

布局文件是你自己写的，怎么可能无法居中。可以参考demo


text:
Corrections for PPV of tests?

Is correction for PPV done, or is it built into the prevalence-ratio/positivity-rate relation? As prevalence drops, tests start becoming less and less predictive for true positivity assuming a fixed sensitivity and specificity.

We do not correct for positive/negative predictive values, so that's something to keep in mind.

authors: nimish youyanggu


text:
【Day 1】61 加1

给定一个由整数组成的非空数组所表示的非负整数，在该数的基础上加一。
最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外，这个整数不会以零开头。
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/plus-one
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

分析下几种情况
1 末尾+1
1.1 +1后是否满足进位条件
1.1.1 如果需要进位 则需要进位标识，来辅助下一次的求值
1.2.2 如果不需要进位 将进位标识置空

2 首位进1
2.1 首位进1，[9,9,9] 如果通过数组遍历，按照末尾+1的操作，只能得到[0,0,0]
2.2 遍历完数组需要进行额外的判断 如果存在进位标识，需要在头部添加进位值

空间复杂度 O(n)
时间复杂度 O(n)

function plusOne(digits) {
  const arr = []
  // 进位标识
  let flag = 1;
  for (let i = digits.length - 1; i >= 0; i--) {
    let result = digits[i] + flag;
    if (result >= 10) {
      result = result % 10;
      flag = 1;
    } else {
      flag = 0;
    }
    arr.unshift(result)
  }
  if (flag == 1) {
    arr.unshift(1)
  }
  return arr;
}

刚开始本来想通过先new Array(digits.length) 先占用一块连续内存空间，通过arr[i]直接赋值，避免数组的重新拷贝，由于存在首位进1这种情况，我不能提前知道返回的结果的具体长度，所以放弃了

看了别人的题解，直接原数组上操作，通过判断执行如果不存在进位，则直接返回’原数组‘，最后通过创建一个新数组处理首位进1的问题。能够有效的改善执行时间和内存的占用。

var plusOne = function(digits) {
const len = digits.length;
for(let i = len - 1; i >= 0; i--) {
digits[i]++;
digits[i] %= 10;
if(digits[i]!=0)
return digits;
}
digits = [...Array(len + 1)].map(_=>0);;
digits[0] = 1;
return digits;
};
作者：guanpengchn
链接：https://leetcode-cn.com/problems/plus-one/solution/hua-jie-suan-fa-66-jia-yi-by-guanpengchn/
来源：力扣（LeetCode）
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。

最后一步写的有点多余了，直接digits.unshit(1)就行

repo: yoyoluxi/leetcode-


text:
抱歉，问个问题？

抱歉，特意开个issue。因为实在联系不到你（Discord群组没回复，telegram群组链接也挂了）。

正题
我想知道你是怎么在更新 dotfiles 中某个input之后，如何出发这个dotfiles的Workflow更新lock的？我看你应该不是手动触发的吧？而且我也没有看到你的action有自动触发的操作？麻烦指导下，我参考一下。谢谢！

还有，顺便留个X或者电报吧，方便请教交流下

抱歉，特意开个issue。因为实在联系不到你（Discord群组没回复，telegram群组链接也挂了）。

正题
我想知道你是怎么在更新 dotfiles 中某个input之后，如何出发这个dotfiles的Workflow更新lock的？我看你应该不是手动触发的吧？而且我也没有看到你的action有自动触发的操作？麻烦指导下，我参考一下。谢谢！

还有，顺便留个X或者电报吧，方便请教交流下

Pasted the link to you in Discord.

authors: shelken yqlbu


text:
Add basic GitHub Actions from LEGEND template

This is a first go at adding GitHub actions for "building"/testing LegendGeom using the setup from the LEGEND template. It's likely to fail in a few spots, so some iteration will likely be required. In particular, the pre-commit/coverage steps will certainly fail as the project isn't setup yet on those services.

Right, it'll need approval/merging before things will actually run. @yramachers, if you can do that, I can then check/iterate as needed.

repo: yramachers/LegendGeom


text:
[Broken] youtube live: AttributeError: 'FFmpegFD' object has no attribute '_postprocessor_hooks'

Checklist

[X] I'm reporting a broken site support
[X] I've verified that I'm running yt-dlp version 2021.10.09
[X] I've checked that all provided URLs are alive and playable in a browser
[X] I've checked that all URLs and arguments with special characters are properly quoted or escaped
[X] I've searched the bugtracker for similar issues including closed ones
[X] I've read the opening an issue section in CONTRIBUTING.md
[X] I have given an appropriate title to the issue

Verbose log

python3.7 yt-dlp -v http://www.youtube.com/watch?v=THN8ihZ6qy0
[debug] Command-line config: ['-v', 'http://www.youtube.com/watch?v=THN8ihZ6qy0']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] yt-dlp version 2021.10.09 (zip)
[debug] Python version 3.7.3 (CPython 64bit) - Linux-4.9.0-9-amd64-x86_64-with-debian-9.13
[debug] exe versions: ffmpeg 4.0, ffprobe 4.0, rtmpdump 2.4
[debug] Optional libraries: none
[debug] Proxy map: {}
[debug] [youtube] Extracting URL: http://www.youtube.com/watch?v=THN8ihZ6qy0
[youtube] THN8ihZ6qy0: Downloading webpage
[youtube] THN8ihZ6qy0: Downloading android player API JSON
[youtube] THN8ihZ6qy0: Downloading m3u8 information
[youtube] THN8ihZ6qy0: Downloading m3u8 information
[debug] Sort order given by extractor: quality, res, fps, source, codec:vp9.2, lang
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, source, vcodec:vp9.2(10), acodec, lang, filesize, fs_approx, tbr, vbr, abr, asr, proto, vext, aext, hasaud, id
[debug] Testing thumbnail 46
[debug] Default format spec: best/bestvideo+bestaudio
[info] THN8ihZ6qy0: Downloading 1 format(s): 301
[debug] Invoking downloader on "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1633831423/ei/nvVhYYfsO4ee1wL25ZzgDQ/ip/5.231.196.154/id/THN8ihZ6qy0.5/itag/301/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/sgoap/gir%3Dyes%3Bitag%3D140/sgovp/gir%3Dyes%3Bitag%3D299/hls_chunk_host/rr4---sn-4g5e6nsr.googlevideo.com/playlist_duration/30/manifest_duration/30/vprv/1/playlist_type/DVR/initcwndbps/11580/mh/WP/mm/44/mn/sn-4g5e6nsr/ms/lva/mv/m/mvi/4/pl/18/dover/11/keepalive/yes/fexp/24001373,24007246/mt/1633809396/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,live,sgoap,sgovp,playlist_duration,manifest_duration,vprv,playlist_type/sig/AOq0QJ8wRAIgaUlV3SsUvaElWkqZ1ZAxzVsuN_ier5CJx4j3eC54SW0CIHNX7c2G6iy-DpS9K_UTLZ1fAVqtfL_Lj9alC-S2CRwn/lsparams/hls_chunk_host,initcwndbps,mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRAIgRh8LQUYOe8dholIY0nOrJfm-Ga8yx6oJgn1_cjHge5QCIF48cdeETX-NXTkXE7I8hNe6uNvRo93ZConj6n_8gpQW/playlist/index.m3u8"
[download] Destination: Nightcore Radio 24_7 _ Top Nightcore Songs Of All Time ♪ 2021-10-09 16_03 [THN8ihZ6qy0].mp4
ERROR: 'FFmpegFD' object has no attribute '_postprocessor_hooks'
Traceback (most recent call last):
  File "yt-dlp/yt_dlp/YoutubeDL.py", line 1262, in wrapper
    return func(self, *args, **kwargs)
  File "yt-dlp/yt_dlp/YoutubeDL.py", line 1300, in __extract_info
    return self.process_ie_result(ie_result, download, extra_info)
  File "yt-dlp/yt_dlp/YoutubeDL.py", line 1350, in process_ie_result
    ie_result = self.process_video_result(ie_result, download=download)
  File "yt-dlp/yt_dlp/YoutubeDL.py", line 2360, in process_video_result
    self.process_info(new_info)
  File "yt-dlp/yt_dlp/YoutubeDL.py", line 2799, in process_info
    success, real_download = self.dl(temp_filename, info_dict)
  File "yt-dlp/yt_dlp/YoutubeDL.py", line 2507, in dl
    return fd.download(name, new_info, subtitle)
  File "yt-dlp/yt_dlp/downloader/common.py", line 398, in download
    ret = self.real_download(filename, info_dict)
  File "yt-dlp/yt_dlp/downloader/external.py", line 40, in real_download
    retval = self._call_downloader(tmpfilename, info_dict)
  File "yt-dlp/yt_dlp/downloader/external.py", line 345, in _call_downloader
    ffpp = FFmpegPostProcessor(downloader=self)
  File "yt-dlp/yt_dlp/postprocessor/ffmpeg.py", line 62, in __init__
    PostProcessor.__init__(self, downloader)
  File "yt-dlp/yt_dlp/postprocessor/common.py", line 59, in __init__
    self.set_downloader(downloader)
  File "yt-dlp/yt_dlp/postprocessor/common.py", line 95, in set_downloader
    for ph in downloader._postprocessor_hooks:
AttributeError: 'FFmpegFD' object has no attribute '_postprocessor_hooks'

Description

Im currently switching from youtube-dl to yt-dlp. I have upgraded from python 2 to python 3.7.3 as yt-dlp requires at least python 3.6.0.
I got most working, but I run into an issue on all kind of youtube livestreams. Can someone tell me whats wrong here?
Thanks for your help.

Seems to be a regression in the release that I just made.
Please use the last release while I fix the issue

Yea I can confirm with the previous version it worked.
So I accidentally run into it while it still was working -> updated -> issue occured and I was not 100% sure I did corrupt something :p
An other question:

has yt-dlp a feature to use ytsearch: to search for youtube playlists only?
is it possible to list the content (video list) of a given youtube playlist id?

I always did patch the currently outdated youtube-dl myself and now Im looking if yt-dlp maybe already supports this.

repo: yt-dlp/yt-dlp


text:
Return a PHAsset URL

It would be nice to get the PHAsset URL so that image info like location can be extracted.

@gluecode Yes, it is useful for some cases. I will add the delegate method which returns the PHAsset URL

Would also love to see this delegate method added. Need to pull location data as well.

let me know if you have added this feature.
I want URL for image as well.

@gluecode We now pass the ImageMetadata via fusumaImageSelected.

authors: LoganHenderson Rashesh-Bosamiya gluecode ytakzk

repo: ytakzk/Fusuma


text:
Previously supported videos now unsupported after site update UKTV UKTVPLAY

Hi,

[x] I've verified and I assure that I'm running youtube-dl 2018.10.05
[x] Searched the bugtracker for similar issues including closed ones
[x] Checked that provided video/audio/playlist URLs (if any) are alive and playable in a browser
[x] Site support request (request for adding support for a new site)

C:\Program Files (x86)\youtubedl>youtube-dl --version
2018.10.05

C:\Program Files (x86)\youtubedl>youtube-dl.exe -o -v "https://uktvplay.uktv.co.
uk/shows/casualty/watch-online/5839038888001"
[generic] 5839038888001: Requesting header
WARNING: Falling back on generic information extractor.
[generic] 5839038888001: Downloading webpage
[generic] 5839038888001: Extracting information
ERROR: Unsupported URL: https://uktvplay.uktv.co.uk/shows/casualty/watch-online/
5839038888001

C:\Program Files (x86)\youtubedl>
...
<end of log>

Single video: https://uktvplay.uktv.co.uk/shows/casualty/watch-online/5839038888001

Support for downloading these videos was working but the site hosting them was updated and now the unsupported url error is given. The URLs for the videos have not changed format so hopefully it will be possible/easy to fix support for these videos. Note a free account and login is needed to play the videos in a browser but youtube-dl was still previously able to download them without login before the site update.
Kind Regards
Rencroft

To expand on the previous post, URL formatting has changed slightly. For example (for same video page):
URL before site update (still works with youtube-dl): https://uktvplay.uktv.co.uk/shows/secrets-of-the-castle/watch-online/?video=5307684600001
URL after site update (doesn't work with youtube-dl): https://uktvplay.uktv.co.uk/shows/secrets-of-the-castle/watch-online/5818502556001
The old URL however is not viewable in a browser; it just defaults to the series landing page whereas the new URL will direct you to the specific episode within the browser.
Looking at the page source for the new URL, the old video_id can not be found within the html.

darthhaggis, thanks for the input your quite right.

Note that some videos still fail to download, even having changed to the old URL format. For instance:
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['--verbose', 'https://uktvplay.uktv.co.uk/shows/taskmaster/watch-online/?video=5827355680001']
[debug] Encodings: locale UTF-8, fs utf-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2018.10.05
[debug] Python version 3.6.6 (CPython) - Linux-4.15.0-36-generic-x86_64-with
[debug] exe versions: ffmpeg 3.4.4, ffprobe 3.4.4
[debug] Proxy map: {}
[brightcove:new] 5827355680001: Downloading webpage
[brightcove:new] 5827355680001: Downloading JSON metadata
ERROR: No video formats found; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/usr/lib/python3.6/site-packages/youtube_dl/YoutubeDL.py", line 792, in extract_info
    ie_result = ie.extract(url)
  File "/usr/lib/python3.6/site-packages/youtube_dl/extractor/common.py", line 507, in extract
    ie_result = self._real_extract(url)
  File "/usr/lib/python3.6/site-packages/youtube_dl/extractor/brightcove.py", line 743, in _real_extract
    json_data, video_id, headers=headers)
  File "/usr/lib/python3.6/site-packages/youtube_dl/extractor/brightcove.py", line 648, in _parse_brightcove_metadata
    self._sort_formats(formats)
  File "/usr/lib/python3.6/site-packages/youtube_dl/extractor/common.py", line 1286, in _sort_formats
    raise ExtractorError('No video formats found')
youtube_dl.utils.ExtractorError: No video formats found; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

I don't suppose this could be the VideoID?
<video class="vjs-tech" data-account="1242911124001" data-embed="default" data-player="OrCyvJ2gyL" data-video-id="5844243441001" id="video-content_html5_api" src="https://manifest.prod.boltdns.net/manifest/v1/hls/v5/fairplay/**1242911124001**/436b2bb0-3519-421c-aebb-eb1b1be02534/10s/master.m3u8?...
For URL
https://uktvplay.uktv.co.uk/shows/classic-eastenders/watch-online/5844243441001

Just a very amateur guess but could the value after "/fairplay/' in this example be a potential VideoID?
src="https://manifest.prod.boltdns.net/manifest/v1/hls/v5/fairplay/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/10s/master.m3u8?...
For URL
https://uktvplay.uktv.co.uk/shows/classic-eastenders/watch-online/5844243441001

I have tried using that number with no luck. It also appears elsewhere in the source code as:
data-account="1242911124001"

after "/fairplay/"

Well, if they're now using Apple Fairplay DRM for their mobile streams, then it's GAME OVER (it hasn't been cracked) 💢 . Prior to their site overhaul, they used the brightcove service and AppleHLS encrypted (HLSe) streams for mobile devices (which use AES-128 encryption supported by yt-dl) ...
I have kept records on disk and for a show in the old site format
http://uktvplay.uktv.co.uk/shows/narrow-escapes-of-world-war-ii/watch-online/?video=2776248288001
the HLSe master playlist would have been
http://c.brightcove.com/services/mobile/streaming/index/master.m3u8?videoId=2776248288001
The master playlist posted by @dankargo suggests a completely new playlist API...
BTW, it would help other people troubleshoot this further if valid login credentials were shared here, even if temporarily... 😉

@Rencroft
Many thanks for the login credentials 👍
HOWEVER, my worst fears have been realised 😞
Trying, for instance,
https://uktvplay.uktv.co.uk/shows/classic-eastenders/watch-online/5844243441001
in a desktop browser and inspecting network activity via Web Console, one can identify, even before login-in, the following GET XHR (XMLHttpRequest) request to
https://edge.api.brightcove.com/playback/v1/accounts/1242911124001/videos/5844243441001
The raw response from that request is the following JSON file:
{
 "ad_keys": null,
 "sources": [
  {
   "src": "http://manifest.prod.boltdns.net/manifest/v1/hls/v5/fairplay/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/10s/master.m3u8?fastly_token=NWJlZTE2N2RfZjg1NTNmYzZiNGU2YjA1OWE4ZWMyMjg2ZTFkYjc1MWM4OWU3MmE4ZjVhY2U4ZGZiOTJiNGNhMWFhMTkyMTQyNA%3D%3D",
   "key_systems": {
    "com.apple.fps.1_0": {
     "certificate_url": "https://manifest.prod.boltdns.net/license/v1/fairplay_app_cert/1242911124001",
     "key_request_url": "https://manifest.prod.boltdns.net/license/v1/fairplay/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/6a19b118-ad29-4a53-8fa5-8abbdea10fca?fastly_token=NWJlZTE2N2RfZmU1MWQ5OTFhODc3MTcwYjAxMTQxZTAzMmE0MmQ2YTUzMzgyNTEwYTkyNmYxODM4ZDc4N2VhZDkyNGE2ZjljNw%3D%3D"
    }
   },
   "ext_x_version": "5",
   "type": "application/x-mpegURL"
  },{
   "src": "https://manifest.prod.boltdns.net/manifest/v1/hls/v5/fairplay/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/10s/master.m3u8?fastly_token=NWJlZTE2N2RfZjg1NTNmYzZiNGU2YjA1OWE4ZWMyMjg2ZTFkYjc1MWM4OWU3MmE4ZjVhY2U4ZGZiOTJiNGNhMWFhMTkyMTQyNA%3D%3D",
   "key_systems": {
    "com.apple.fps.1_0": {
     "certificate_url": "https://manifest.prod.boltdns.net/license/v1/fairplay_app_cert/1242911124001",
     "key_request_url": "https://manifest.prod.boltdns.net/license/v1/fairplay/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/6a19b118-ad29-4a53-8fa5-8abbdea10fca?fastly_token=NWJlZTE2N2RfZmU1MWQ5OTFhODc3MTcwYjAxMTQxZTAzMmE0MmQ2YTUzMzgyNTEwYTkyNmYxODM4ZDc4N2VhZDkyNGE2ZjljNw%3D%3D"
    }
   },
   "ext_x_version": "5",
   "type": "application/x-mpegURL"
  },{
   "src": "http://manifest.prod.boltdns.net/manifest/v1/dash/live-baseurl/bccenc/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/6s/manifest.mpd?fastly_token=NWJlZTE2N2RfOTlkMTAwNDg0NTQ2YTdjNDgyZTViODc3YThjYzgxYzM0MWRmNGM5OTY5ZTEyYzZjZTI2YmFhYzhmZTNlMzE5ZA%3D%3D",
   "key_systems": {
    "com.widevine.alpha": {
     "license_url": "https://manifest.prod.boltdns.net/license/v1/cenc/widevine/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/ecc64650-eade-4f4a-89d5-51b0505ea674?fastly_token=NWJlZTE2N2RfMDE1OWUwY2U2ZmY5ZDk5OTYxYmFhMGU2MWEzNzhkNjE4ZWEyYTllNzhiMmI1NTMwNmQ1MGYwYTZhNjgzMDJmOA%3D%3D"
    },
    "com.microsoft.playready": {
     "license_url": "https://manifest.prod.boltdns.net/license/v1/cenc/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/ecc64650-eade-4f4a-89d5-51b0505ea674?fastly_token=NWJlZTE2N2RfNjhlOWU1YzY3OWE2Yjk1OWU2MTYxZjcwZmIwMzczZDRlYThjNGM5MjM2NmYzNzUyYmY1ODhjY2I0NjM4MGFhNg%3D%3D"
    }
   },
   "profiles": "urn:mpeg:dash:profile:isoff-live:2011",
   "type": "application/dash+xml"
  },{
   "src": "https://manifest.prod.boltdns.net/manifest/v1/dash/live-baseurl/bccenc/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/6s/manifest.mpd?fastly_token=NWJlZTE2N2RfOTlkMTAwNDg0NTQ2YTdjNDgyZTViODc3YThjYzgxYzM0MWRmNGM5OTY5ZTEyYzZjZTI2YmFhYzhmZTNlMzE5ZA%3D%3D",
   "key_systems": {
    "com.widevine.alpha": {
     "license_url": "https://manifest.prod.boltdns.net/license/v1/cenc/widevine/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/ecc64650-eade-4f4a-89d5-51b0505ea674?fastly_token=NWJlZTE2N2RfMDE1OWUwY2U2ZmY5ZDk5OTYxYmFhMGU2MWEzNzhkNjE4ZWEyYTllNzhiMmI1NTMwNmQ1MGYwYTZhNjgzMDJmOA%3D%3D"
    },
    "com.microsoft.playready": {
     "license_url": "https://manifest.prod.boltdns.net/license/v1/cenc/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/ecc64650-eade-4f4a-89d5-51b0505ea674?fastly_token=NWJlZTE2N2RfNjhlOWU1YzY3OWE2Yjk1OWU2MTYxZjcwZmIwMzczZDRlYThjNGM5MjM2NmYzNzUyYmY1ODhjY2I0NjM4MGFhNg%3D%3D"
    }
   },
   "profiles": "urn:mpeg:dash:profile:isoff-live:2011",
   "type": "application/dash+xml"
  },{
   "src": "http://manifest.prod.boltdns.net/manifest/v1/dash/live-hbbtv15/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/6s/manifest.mpd?fastly_token=NWJlZTE2N2RfM2NkYjAzZmY0NTExYTUzYzQ1ZGY4YTAxZjJjOTc5NGJhMDk5ODJkMDFmOWQ5YWE2YWFkYWFlZGM4ZDJiOGQ3Mg%3D%3D",
   "key_systems": {
    "com.microsoft.playready": {
     "license_url": "https://manifest.prod.boltdns.net/license/v1/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/7ef1386e-c391-4256-ba13-069340a0345e?fastly_token=NWJlZTE2N2RfYjgyODk4NjZmNDRjZjE1YTYxODMzYWY5MmFmMGM5YmUxZWI4Y2M3OTU5MzhhNDBmYzAwN2E3ZjUyN2NkYTYyOQ%3D%3D"
    }
   },
   "profiles": "urn:hbbtv:dash:profile:isoff-live:2012,urn:mpeg:dash:profile:isoff-live:2011",
   "type": "application/dash+xml"
  },{
   "src": "https://manifest.prod.boltdns.net/manifest/v1/dash/live-hbbtv15/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/6s/manifest.mpd?fastly_token=NWJlZTE2N2RfM2NkYjAzZmY0NTExYTUzYzQ1ZGY4YTAxZjJjOTc5NGJhMDk5ODJkMDFmOWQ5YWE2YWFkYWFlZGM4ZDJiOGQ3Mg%3D%3D",
   "key_systems": {
    "com.microsoft.playready": {
     "license_url": "https://manifest.prod.boltdns.net/license/v1/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/7ef1386e-c391-4256-ba13-069340a0345e?fastly_token=NWJlZTE2N2RfYjgyODk4NjZmNDRjZjE1YTYxODMzYWY5MmFmMGM5YmUxZWI4Y2M3OTU5MzhhNDBmYzAwN2E3ZjUyN2NkYTYyOQ%3D%3D"
    }
   },
   "profiles": "urn:hbbtv:dash:profile:isoff-live:2012,urn:mpeg:dash:profile:isoff-live:2011",
   "type": "application/dash+xml"
  },{
   "src": "http://bcboltuktv-a.akamaihd.net/media/v1/smooth/simple/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/7ef1386e-c391-4256-ba13-069340a0345e/manifest.ism/Manifest?akamai_token=exp=1542329981~acl=/media/v1/smooth/simple/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/7ef1386e-c391-4256-ba13-069340a0345e/manifest.ism/Manifest*~hmac=e3e9c3053b1043edd71c6c0a8aeaf8b90a35fe1e90890821dad8ee27893ebf3e",
   "key_systems": {
    "com.microsoft.playready": {
     "license_url": "https://manifest.prod.boltdns.net/license/v1/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/7ef1386e-c391-4256-ba13-069340a0345e?fastly_token=NWJlZTE2N2RfYjgyODk4NjZmNDRjZjE1YTYxODMzYWY5MmFmMGM5YmUxZWI4Y2M3OTU5MzhhNDBmYzAwN2E3ZjUyN2NkYTYyOQ%3D%3D"
    }
   },
   "type": "application/vnd.ms-sstr+xml"
  },{
   "src": "https://bcboltuktv-a.akamaihd.net/media/v1/smooth/simple/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/7ef1386e-c391-4256-ba13-069340a0345e/manifest.ism/Manifest?akamai_token=exp=1542329981~acl=/media/v1/smooth/simple/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/7ef1386e-c391-4256-ba13-069340a0345e/manifest.ism/Manifest*~hmac=e3e9c3053b1043edd71c6c0a8aeaf8b90a35fe1e90890821dad8ee27893ebf3e",
   "key_systems": {
    "com.microsoft.playready": {
     "license_url": "https://manifest.prod.boltdns.net/license/v1/playready/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/7ef1386e-c391-4256-ba13-069340a0345e?fastly_token=NWJlZTE2N2RfYjgyODk4NjZmNDRjZjE1YTYxODMzYWY5MmFmMGM5YmUxZWI4Y2M3OTU5MzhhNDBmYzAwN2E3ZjUyN2NkYTYyOQ%3D%3D"
    }
   },
   "type": "application/vnd.ms-sstr+xml"
  }],
 "updated_at": "2018-10-05T05:21:19.086Z",
 "poster_sources": [
  {
   "src": "https://cf-images.eu-west-1.prod.boltdns.net/v1/jit/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/main/1024x576/14m46s48ms/match/image.jpg"
  }],
 "reference_id": null,
 "offline_enabled": false,
 "text_tracks": [],
 "economics": "AD_SUPPORTED",
 "description": null,
 "poster": "https://cf-images.eu-west-1.prod.boltdns.net/v1/jit/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/main/1024x576/14m46s48ms/match/image.jpg",
 "long_description": null,
 "created_at": "2018-10-04T09:41:43.440Z",
 "id": "5844243441001",
 "custom_fields": {
  "springstream": "OD",
  "housenum": "CTBT132W82-dd",
  "springcq": "CTBT132W"
 },
 "duration": 1772096,
 "account_id": "1242911124001",
 "tags": [],
 "name": "CTBT132W82-dd",
 "link": null,
 "thumbnail": "https://cf-images.eu-west-1.prod.boltdns.net/v1/jit/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/main/320x180/14m46s48ms/match/image.jpg",
 "cue_points": [
  {
   "metadata": null,
   "force_stop": false,
   "id": "5844706303001",
   "type": "AD",
   "time": 673.64,
   "name": "cp_16243983"
  },{
   "metadata": null,
   "force_stop": false,
   "id": "5844706304001",
   "type": "AD",
   "time": 1772,
   "name": "cp_16243984"
  }],
 "thumbnail_sources": [
  {
   "src": "https://cf-images.eu-west-1.prod.boltdns.net/v1/jit/1242911124001/436b2bb0-3519-421c-aebb-eb1b1be02534/main/320x180/14m46s48ms/match/image.jpg"
  }],
 "published_at": "2018-10-04T09:41:43.440Z"
}

As anyone can see, the place reeks of DRM: AppleHLS streams (mobile devices, mobile apps) use FairPlay, MPEG-DASH streams (desktop browsers) use Common Encryption (cenc) with Widevine, plus there exist Microsoft friendly "Smooth Streaming" streams which use PlayReady DRM!
All mentioned DRM schemes have not been reverse-engineered (if someone has, he/she'd be wise enough to not disclose his/her feat...), so it is currently unrealistic to expect yt-dl to support the new site of UKTVplay...
Unless someone figures out an algorithm to convert the "new" video_ids to the "old" value that would still work with the previous site template, as I said, it's GAME OVER! If, like me, you abhor any form of DRM, you'd better stay away from the new UKTVPlay iteration 👎

Well that's a shame, they were better quality than recording of TV.
Thanks to everyone who looked into it.

Let me see if I understand this correctly. Long story short, even though we can view an episode without issue in a browser, due to the change in how their website is structured, there is now currently no way we will be able to use yt-dl to save that same file for offline viewing, correct?

I just discovered this Kodi plugin which has recently been updated to allow streaming of UKTV Play's new DRM content in Kodi.  Maybe it may give us some hope?
https://github.com/Catch-up-TV-and-More/plugin.video.catchuptvandmoretestdrmkodi18

@dankargo
Their UKTV Play plugin can be found here:
https://github.com/Catch-up-TV-and-More/plugin.video.catchuptvandmoretestdrmkodi18/blob/master/resources/lib/channels/uk/uktvplay.py
but, as I said previously, it's useless for yt-dl purposes!
Widevine DRM hasn't been cracked; in fact, Kodi does not circumvent that DRM scheme but relies upon a system installed Chrome browser (with a supported and working WidevineCDM, currently at version >= 1.4.8.1008) for the actual decryption of the streams; you can read more at:
https://kodi.tv/article/dev-journal-kodi-and-drm

As another example, in Windows, there isn't a very good 10-foot interface for Netflix,
but if you have installed Chrome, you can watch Netflix from your desktop.
Supporting low-level DRM means that Kodi could hook into the binary blob inside Chrome
and use it purely for handling the DRM while video playback and control stays with Kodi.

Such a shame there’s no way around this :(

Does this mean UKTV will now need to be removed from the 'Supported Sites' page?

Any updates on this?

@jmiskinis If there were updates on this, someone would have posted an update here.

Thanks for the info. I will agree with darthhaggis that UKTV should be removed from the supported sites list.

authors: Rencroft Vangelis66 dankargo darthhaggis jmiskinis md678685 thrnz

repo: ytdl-org/youtube-dl


text:
Any chance we could get rid of the "tl;dr" strings in the README?

I really find this software useful and powerful, but I feel "dirty" knowing that it has "tl;dr" in the README (or at least on the Github main page). I despise that phrase and those who use it, and I have a feeling that the smart author(s) of this software just wanted to use youthful slang, and had seen this in use frequently by dumb people.
It really annoys me when intelligent people seemingly encourage laziness/stupidity. The "too long; didn't read" (especially spelled in all-lowercase) thing should never, ever be encouraged in any way. Instead, one might use "Summary" or "In short" or something.
Small things like this can really make a big psychological difference.

I see no problems using acronyms conventional to programming/internet field.

Well, you could be part of a positive change.

Small things like this can really make a big psychological difference.

[citation needed]

authors: EAFSC Hrxn dstftw