TokenBased Security, OAUTH, OIDC, IdentityServer – Part 4

Introduction

In the previous post of this series, we set up IdentityServer with some test users and client configurations. We then used the postman tool to get the access token with couple of different flows.

In this post, we will move forward and add a resource API to our solution. This will be simple .NET Core WebAPI application. This API will contains endpoints which different client applications will call. We will protect this API using IdentityServer.

how to create paint program in graphics.py

I was wondering how to make a paint program exclusively from graphics.py not tkinter.py
Here is my code by I don't know how to continue it

from graphics import *
win=GraphWin('Buffet Hot Pot',1200,800)
win.setBackground('whitesmoke')
while True:
click=win.getMouse()
clickX=click.getX()
clickY=click.getY()

Termly Responds to Feedback, Updates Its Cookie Consent Banner Limits

In July, Termly announced its acquisition of the GDPR/CCPA Cookie Consent Banner plugin. The new direction was an overhaul of the WordPress extension, turning what was once a free offering into, essentially, a commercial SaaS product. Users could run the service for up to 100 visitors. After that, the cheapest tier would cost $180 per year.

Despite multiple notices that changes were coming and making sure auto-updates were disable so that users would find no surprises, the move has not sat well with many people. Since the plugin update, users have taken to the WordPress.org review system. Across the board, they have left nothing but one-star ratings in the past month and a half.

The free tier limit of 100 monthly visitors did not feel free at all to many. By the middle of August, the Termly team had responded after listening to this feedback and making some changes.

The company bumped the limit to 10,000 unique visitors, making it a free solution for far more users. Termly is also dedicating more team members to responding to questions on the WordPress forums.

“Termly has offered a consent management solution for years, and our pricing structure has been this way for 1,000s of existing customers,” said Raffaele Riconosciuto, Director of Marketing at Termly, when asked whether the 100-visitor limit came up in discussions before launch. “In all honesty, we simply did not consider it since our new customers view our pricing structure favorably. In hindsight, the structure is less favorable for people who are currently getting something for free, and thus why we made the changes as quickly as we could.”

A 10,000 visitor limit on the free tier is likely to be a much more reasonable limit for the average website. Beyond that, site owners will need to account for a monthly or yearly fee.

Some users may still have issues with the plugin being rolled into a SaaS offering, needing to sign up for a third-party service. However, Riconosciuto said Termly needed to go in this direction.

“The SaaS structure we’ve adopted is ubiquitous for most consent management platforms (CMPs) today,” he said. “Given that data privacy laws are constantly evolving, as are mechanisms for tracking users on the web, CMPs require a high degree of maintenance and upkeep just to keep their users meeting base legal requirements. We are also continuing to develop new functionality to make the process more painless and robust. Hence why we charge a recurring subscription cost to our more advanced users, who subsidize the always-free tier.”

Termly already had a robust platform in place that serves customers inside and outside of the WordPress ecosystem. It did not make sense to rebuild the entire platform within the plugin and maintain them separately. It would have created duplicate development work without a need to do so.

Users can still install the cookie consent banner without leaving the WordPress admin panel, but further customizations happen via the Termly dashboard. Riconosciuto said the team may extend the UI integration between the plugin and service in the future if that is where user feedback leads them, pulling more functionality into WordPress.

The other side of this is that previous plugin versions were not compliant with several data privacy laws, including the GDPR and ePrivacy Directive.

“The GDPR and ePrivacy Directive are the main EU legislation governing the use of cookies and similar tracking technologies,” said Riconosciuto. “In the context of cookie consent management and cookie banners, the most important takeaway is that a business must obtain consent from an end-user before they serve them non-essential cookies. Consent must be free, specific, informed, and unambiguous. The old banner does not block cookies or contain the information required to ensure when an individual interacts with the banner, they have provided consent to the satisfaction of these legal requirements.”

Of the legal mazes businesses must navigate, Riconosciuto said that each EU member state had “transposed the ePrivacy Directive into local cookie laws.” Termly looks at the guidance issued from each of these member state regulators when determining how to implement the cookie banner.

“Why does following the law and related guidance matter?” asked Riconosciuto. “Recently, we have seen regulators in these regions taking enforcement action against entities that fail to comply with the guidance they have provided for how to comply with the cookie laws. Unlike the GDPR, ePrivacy directive, and France’s cookie law, guidance, and recommendations from an EU regulator is considered ‘soft law’ and not binding. However, the guidance typically explains how a regulator will determine if a business is violating a local cookie law (i.e., how they will enforce the cookie law). That means if your business’s cookie practices fail to satisfy the requirements laid out in regulator guidance, you are likely violating cookie law and may be subject to enforcement action. Even more, organizations in the EU like NYOB are relying on these laws and soft guidance to determine whether they will file draft complaints with regulators against businesses in violation of these laws.”

Riconosciuto mentioned several areas where the older versions of the plugin did not comply with the laws. However, the updated plugin and service take care of these issues. The following is a non-exhaustive list:

  1. The solution must actually block cookies and tracking. Cookie consent banners must honor user choices.
  2. The language must adequately notify users of what they are agreeing to before consenting.
  3. Consent banners must allow the granular selection of cookies by category (e.g., performance and functionality, advertising, analytics, social networking, etc.).
  4. Provide clean and easily accessible information and options for accepting or rejecting at the first level without being deceptive (e.g., all buttons should be the same size and format).
  5. The banner must generate and save an audit log of consent interactions. These may need to be presented to regulators.

While users may continue using an older version of the plugin, Termly does not recommend it because it is non-compliant. The company has no plans to restore any parts from the previous version.

“We are committed to making sure businesses are educated and compliant the right way,” said Riconosciuto. “Termly is built on quality, trust, and collaboration, and we can promise that we will continue to listen to feedback and adjust our platform to accommodate all of our customers — including the WordPress community — without sacrificing compliance to all laws and regulations.”

Fire SVG animations (SMIL) when the SVG is visible

When requirements read “when visible” your brain should go straight to IntersectionObserver. That’s exactly what Zach is doing here to kick off an animation when it scrolls into view.

Except this animation is an SVG SMIL animation: an <animate> situation. SMIL animations have some kinda cool things they can do, like begin when another animation ends, which is something CSS doesn’t help with that much. Turns out SMIL has a JavaScript API as well, so it’s possible to kick off the animation on demand that way, while also respecting prefers-reduced-motion.

Also check this out:

.querySelectorAll(`:scope [begin="indefinite"]`);

That :scope thing is new to me.

Direct Link to ArticlePermalink


The post Fire SVG animations (SMIL) when the SVG is visible appeared first on CSS-Tricks. You can support CSS-Tricks by being an MVP Supporter.

Inspirational Websites Roundup #29

These past weeks a lot of excellent websites were released! Unique designs with experimental layouts and playful typography were big and it was a real pleasure collecting these interesting web experiences for your viewing pleasure!

I hope you enjoy this set and get inspired and up-to-date!

125 Years of TPU

jrm-bdr

Avantt Typeface

Grids

DILLINGER

Giulia Tonon

Club local

use Hyphen

TOGETHXR

Media.Monks

The Match Maker

Sivik Atelier

Henry From Online

basement grotesque

Kookslams Hard Seltzer

Krivitzky

SUPERGLOW

BOT

fanfanfan

The message to Ukraine

Principio

Chukster

Infrared

First on SoundCloud

Techtak

Raffaele Sabella

GlobalNet

Celebrate the 30th Anniversary of Ukraine’s Independence!

Utsubo

Eva Habermann

UNION

𝝋S2ĠRAPHISTE

Zajno | Origami

Hoboken Yogi

48.1

IQOSA

Thinkingbox

Miti Navi

The post Inspirational Websites Roundup #29 appeared first on Codrops.

How to See Who Is Following My WordPress Site (4 Quick & Easy Ways)

Do you want to see who is following your WordPress site?

Seeing who follows your website lets you better understand your audience and improve your website to suit their needs, so you can grow your traffic and get even more followers.

In this article, we’ll show you how you can easily see who is following your WordPress site.

How to see who is following your WordPress site (4 quick & easy ways)

Why See Who is Following Your WordPress Site?

By analyzing who is following your WordPress website, you can better understand your website visitors and the people who enjoy your content.

Here are just a few things you can learn from your website followers:

  • How many people are following you across different platforms
  • Which devices and web browsers your visitors use
  • What pages on your site visitors like the most
  • Where in the world your visitors are located

This information will help you make more informed decisions about your website, which will help you create a better user experience, get more traffic, and make more sales.

That being said, let’s take a look at how you can see who is following your WordPress site using a few different methods. You can use the quick links below to jump straight to the method you want to use to find your followers.

1. View Your Website Analytics Data in WordPress

Your website analytics data can give you a lot of different information about who is visiting your website. The easiest way to view that data is by using Google Analytics.

Google Analytics shows you where your visitors are coming from and gives you overall demographic data about who they are. However, setting up Google Analytics the right way can be difficult for beginners.

This is why we recommend using MonsterInsights. It’s the best analytics solution for WordPress and lets you add analytics to your website in a couple of clicks.

MonsterInsights

For more details, see our guide on how to install Google Analytics in WordPress for complete setup instructions.

Note: It will take some time to start gathering the data before it can be displayed in your dashboard.

After you activate and set up the plugin, you can view your Google Analytics stats directly in your WordPress dashboard.

To get a detailed breakdown of your visitors, simply go to Insights » Reports.

This brings you to a screen where you can view all of your website analytics data in depth. First, you’ll see a breakdown of your traffic levels and engagement metrics.

MonsterInsights traffic data

As you scroll down the page, you’ll see more reports on what devices visitors use to view your site, the countries they’re from, what sources send you the most traffic, and more.

MonsterInsights follower data

You can also get a detailed breakdown of the pages on your website that bring you the most traffic, the top pages that visitors exit on, scroll depth, and other reports.

For the full report, simply click on the ‘Publishers’ tab at the top of the page.

MonsterInsights top pages

All of this visitor data helps you to better understand your visitors and how they use your website.

2. View Your Email List Subscribers

Your email list is an incredible way to make money online, plus it’s a great source of information about who is following your WordPress site.

Haven’t started an email list yet? The most important thing you need to get started is an email marketing service provider.

We recommend using Constant Contact since it’s one of the best email marketing services for small businesses.

Constant Contact

For more details on setting up your email list, see our guide on how to create an email newsletter the right way.

Once your email list is set up, you can view your subscriber data. First thing you need to do is log in to your Constant Contact account.

Then, click on the ‘Contacts’ menu option and click the ‘Contacts’ tab. This will give you a detailed breakdown of the size of your email list and your subscriber information.

Constant Contact subscribers example

Once you start to send emails, it will give you data about how engaged your subscribers are. Engaged subscribers are those who open, click, and reply to your emails more often.

The process is similar on other email marketing services like HubSpot, ConvertKit, Drip, etc.

3. View Your Social Media Followers in WordPress

Viewing your social media followers is easy, since you can see your follower count directly from your profile on most social media accounts.

For example, you can view your Instagram followers by simply going to your profile and clicking on the ‘followers’ link.

Click Instagram followers

This brings up a popup that shows your followers.

You can scroll through and click to open their profiles to learn more.

View Instagram followers

Other networks like Facebook give you page insights data, where you can get a more detailed breakdown of your followers’ ages, genders, countries, languages, and more.

To find this information, open up your Facebook Business Page Insights account, click on the ‘Insights’ menu icon, and then click on ‘Audience’.

Facebook audience insights follower information

This brings up any available data on your Facebook page followers.

One great way to use your social media follower information is to display your social media feeds and follower counts in WordPress. Doing this can help to boost social proof and visitor engagement.

The best way to add your social media feeds to WordPress is by using Smash Balloon. It’s a collection 4 different WordPress plugins that let you add social feeds from Facebook, Instagram, Twitter, and YouTube to your website.

Social media feed and followers example

For more details, see our step by step guide on how to add your social media feeds to WordPress.

4. View Your Web Push Notification Followers in WordPress

Another way people can follow your WordPress website is by subscribing to push notifications. These notifications let you send messages to visitors on mobile and desktop, even when they aren’t on your website.

On most websites, about 70% of people who leave the site will never come back. Adding push notifications lets you easily get these visitors to come back again and again.

Here’s an example of what it looks like:

PushEngage example notification

With push notifications, you can reach your followers immediately without waiting until they decide to check their inbox, which makes push notifications extremely valuable.

The easiest way to add push notifications to WordPress is by using PushEngage. It’s the best push notification software in the market used by over 10,000 businesses.

PushEngage

For more details, see our guide on how to add web push notification to your WordPress site.

After you activate and set up the plugin, you’ll be able to view your push notification follower stats. This shows you who’s signed up to receive push notifications, their location, device used, and more.

To find your push notification followers go to your dashboard on the PushEngage website, and then navigate to Analytics » Subscriber Statistics.

PushEngage follower stats example

You can also view your list of subscribers by clicking on the ‘Summary’ tab.

Note about WordPress.com Followers

The methods above are a great way to see who is following your WordPress blog. However, if you’re using WordPress.com, then you can view follower stats directly in your WordPress dashboard.

To learn the difference between the two, see our comparison of WordPress.com and WordPress.org.

To view your followers, simply navigate to your admin dashboard, click on ‘Stats’, and then click on the ‘Insights’ tab.

Navigate to WordPress.com stats and insights

As you scroll down the page, you’ll see ‘Follower totals’ and ‘Followers’ sections.

This shows you how many followers you have, along with their username and how long they’ve been following.

WordPress.com follower totals

If you want to switch your website to the self-hosted version of WordPress, then see our guide on how to move your site from WordPress.com to WordPress.org.

We hope this article helped you learn how to see who is following your WordPress site. You may also want to see our guide on how to get a free business email address and our expert pick of must-have WordPress plugins for small business.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

The post How to See Who Is Following My WordPress Site (4 Quick & Easy Ways) appeared first on WPBeginner.

next question php xmlhttp response not working

I have learning this from youtube,php quiz using ajax. I am facing problem when click on next button after last question it is not redirecting on final page.
Please help me to fix this. I think responseText not working.

Question.php page to where i display question

<script type="text/javascript">
var questionno="1";
load_questions(questionno);

function load_questions(questionno){
document.getElementById("current_que").innerHTML=questionno;
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                if (xmlhttp.responseText=="over"){
                     window.location="final.php";

            }
            else{
            document.getElementById("load_questions").innerHTML=xmlhttp.responseText;
            load_total_que();
            }
    }
};
xmlhttp.open("GET", "ajax/load_questions.php?questionno="+ questionno,true);
xmlhttp.send(null);
}
</script>

This is the Question_load.php page

<?php 
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL); 

?>
<?php
session_start();
include_once("../../configure/config.php");

$question_no="";
$question="";
$opt1="";
$opt2="";
$opt3="";
$opt4="";
$answer="";
$count=0;
$ans="";


$queno=$_GET["questionno"];

if(isset($_SESSION["answer"][$queno]))
{
    $ans=$_SESSION["answer"][$queno];
}

$res=mysqli_query($mysqli,"select * from questions where category='$_SESSION[exam_category]' AND question_no=$_GET[questionno]");

$count=mysqli_num_rows($res);

if($count==0)
{
    echo "over";
}
else
{
    while($row=mysqli_fetch_array($res))
    {
            $question_no=$row["question_no"];
            $question=$row["question"];
            $opt1=$row["opt1"];
            $opt2=$row["opt2"];
            $opt3=$row["opt3"];
            $opt4=$row["opt4"];
    }
    ?>
    <br>

<table>
<h2><?php echo " ( ". $question_no ." ) ". $question; ?></h2>
<table>
<tr>
<input type="radio" name="r1" id="r1" value="<?php echo $opt1; ?>" onclick="radioclick(this.value,<?php echo $question_no; ?>)" 
<?php
if($ans==$opt1){
    echo "checked";
}
?>>
<?php

if(strpos($opt1,'image/')!=false)
{
    ?>
<img src="admin/<?php echo $opt1?>" height="30" width="30">
    <?php
}
else
{
    echo $opt1;
}
?>
</tr>
<br>

<input type="radio" name="r1" id="r1" value="<?php echo $opt2; ?>" onclick="radioclick(this.value,<?php echo $question_no; ?>)" 
<?php
if($ans==$opt2){
    echo "checked";
}
?>>
<?php

if(strpos($opt2,'image/')!=false)
{
    ?>
<img src="admin/<?php echo $opt2?>" height="30" width="30">
    <?php
}
else
{
    echo $opt2;
}
?>
</tr>
<br>
<input type="radio" name="r1" id="r1" value="<?php echo $opt3; ?>" onclick="radioclick(this.value,<?php echo $question_no; ?>)" 
<?php
if($ans==$opt3){
    echo "checked";
}
?>>
<?php

if(strpos($opt3,'image/')!=false)
{
    ?>
<img src="admin/<?php echo $opt3?>" height="30" width="30">
    <?php
}
else
{
    echo $opt3;
}
?>
</tr>
<br>
<input type="radio" name="r1" id="r1" value="<?php echo $opt4; ?>" onclick="radioclick(this.value,<?php echo $question_no; ?>)" 
<?php
if($ans==$opt4){
    echo "checked";
}
?>>
<?php

if(strpos($opt4,'image/')!=false)
{
    ?>
<img src="admin/<?php echo $opt4?>" height="30" width="30">
    <?php
}
else
{
    echo $opt4;
}
?>
</tr>
<br>
</table>
<?php
}
?>