<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Stephan van Rooij on Coding Stephan</title><link>https://svrooij.io/</link><description>Recent content in Stephan van Rooij on Coding Stephan</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 07 Apr 2026 10:28:12 +0000</lastBuildDate><atom:link href="https://svrooij.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Build a rail menu in WinUI</title><link>https://svrooij.io/2026/04/07/build-rail-menu-winui/</link><pubDate>Tue, 07 Apr 2026 10:28:12 +0000</pubDate><guid>https://svrooij.io/2026/04/07/build-rail-menu-winui/</guid><description>&lt;p&gt;I wanted to build my next app in WinUI, and I wanted to have a rail menu, with big clickable icons that would navigate to a different page. &lt;a href="https://apps.microsoft.com/detail/9n9pn1mm3bd5?hl=en-US&amp;amp;gl=US"&gt;AI Dev Gallery&lt;/a&gt; has a great example of this, and fortunately it is all &lt;a href="https://github.com/microsoft/AI-Dev-Gallery"&gt;open-source&lt;/a&gt;. In this post I will show you how you can replicate this in your own WinUI app.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://svrooij.io/assets/images/2026/04/ai-dev-gallery-menu.png"&gt;&lt;img src="https://svrooij.io/assets/images/2026/04/ai-dev-gallery-menu.png"&gt;&lt;/a&gt;&lt;figcaption&gt;
 &lt;h4&gt;AI Dev Gallery Menu&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Automatic efficient API Client Generation with Kiota</title><link>https://svrooij.io/2026/03/16/automatic-efficient-api-client-generation-kiota/</link><pubDate>Mon, 16 Mar 2026 13:41:21 +0000</pubDate><guid>https://svrooij.io/2026/03/16/automatic-efficient-api-client-generation-kiota/</guid><description>&lt;p&gt;I don&amp;rsquo;t like repeating myself. I also don&amp;rsquo;t like writing boilerplate code. Whenever I have to interact with an API, I hope that there is an openapi specification available, or even better a client library. Microsoft has built an open source project called &lt;a href="https://github.com/microsoft/kiota"&gt;Kiota&lt;/a&gt; that can generate client libraries for APIs based on their OpenAPI specifications.&lt;/p&gt;
&lt;p&gt;You have to run a command line tool to generate your client library, but I also like to see that automated as part of my regular development lifecycle.&lt;/p&gt;</description></item><item><title>Introduction to Identity Proxy at DOTNET Zuid</title><link>https://svrooij.io/2026/01/23/introduction-identity-proxy-dotnet-zuid/</link><pubDate>Fri, 23 Jan 2026 10:28:29 +0000</pubDate><guid>https://svrooij.io/2026/01/23/introduction-identity-proxy-dotnet-zuid/</guid><description>&lt;p&gt;After visiting &lt;a href="https://www.dotnetzuid.nl/"&gt;DOTNET Zuid&lt;/a&gt; meetups several times past year, I decided that it was time to propose a talk myself. Over the past years, I&amp;rsquo;ve been building an &lt;a href="https://svrooij.io/2025/11/19/introducing-identity-proxy/"&gt;Identity Proxy&lt;/a&gt;. This is a topic I am passionate about, and I know most developers struggle with authentication and authorization in their applications. So I thought it would be a great idea to share my knowledge and experience with the community.&lt;/p&gt;</description></item><item><title>Remove merged branches with PowerShell</title><link>https://svrooij.io/2026/01/08/remove-merged-branches-powershell/</link><pubDate>Thu, 08 Jan 2026 11:53:16 +0000</pubDate><guid>https://svrooij.io/2026/01/08/remove-merged-branches-powershell/</guid><description>&lt;p&gt;When working with Git repositories, it&amp;rsquo;s common to have multiple branches that have already been merged into the main branch. To keep your repository clean and organized, you can use PowerShell to remove these merged branches easily.&lt;/p&gt;
&lt;h2 id="powershell-solution"&gt;PowerShell Solution&lt;/h2&gt;
&lt;p&gt;As a developer running Windows all search engine results pointed me to bash scripts or Linux commands. However, I wanted a solution that works natively in PowerShell. Here&amp;rsquo;s a simple script that accomplishes this:&lt;/p&gt;</description></item><item><title>OpenAPI in Dotnet 10: Number quirk</title><link>https://svrooij.io/2025/12/19/openapi-dotnet-10-number-quirk/</link><pubDate>Fri, 19 Dec 2025 13:13:15 +0000</pubDate><guid>https://svrooij.io/2025/12/19/openapi-dotnet-10-number-quirk/</guid><description>&lt;p&gt;Did you already upgrade your API to Dotnet 10, and are you using OpenAPI specs? Then you might want to read on the next information. We use the &lt;code&gt;Microsoft.AspNetCore.OpenApi&lt;/code&gt; package to generate openapi specifications for our api, which is in turn used to generate client code for various platforms.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure when this started, but it seems numbers are now specified to be either a number or a string with a regex pattern. This causes issues in the generated code and we need it gone.&lt;/p&gt;
&lt;p&gt;Check out the &lt;a href="#update"&gt;update&lt;/a&gt; below if you want to skip the context and go straight to the solution.&lt;/p&gt;</description></item><item><title>Do all your endpoints require authentication?</title><link>https://svrooij.io/2025/11/24/endpoints-require-autentication/</link><pubDate>Mon, 24 Nov 2025 09:49:16 +0000</pubDate><guid>https://svrooij.io/2025/11/24/endpoints-require-autentication/</guid><description>&lt;p&gt;You built an API, where every endpoint requires the user to be authenticated. If you&amp;rsquo;re working with dotnet core minimal apis you can add the need for authentication by adding &lt;code&gt;.RequireAuthentication()&lt;/code&gt; to that specific endpoint.&lt;/p&gt;
&lt;p&gt;Below I&amp;rsquo;ll show you how you can test all endpoints for authentication with just a few lines of test code.&lt;/p&gt;</description></item><item><title>Introducing Identity Proxy</title><link>https://svrooij.io/2025/11/19/introducing-identity-proxy/</link><pubDate>Wed, 19 Nov 2025 12:37:14 +0000</pubDate><guid>https://svrooij.io/2025/11/19/introducing-identity-proxy/</guid><description>&lt;p&gt;We built a lot of public and private APIs, they all have one thing in common, authentication works with &lt;a href="https://svrooij.io/2019/03/25/jwt-introduction/"&gt;JSON Web Tokens&lt;/a&gt;. Meaning there is an identity provider (IDP) that can create tokens and our API just accepts any token signed by that IDP. We also think it is a good idea to tests all your APIs, in that the new version does not break anything and works as intended.&lt;/p&gt;</description></item><item><title>CollabDays Belgium 2025</title><link>https://svrooij.io/2025/10/20/collabdays-belgium-2025/</link><pubDate>Mon, 20 Oct 2025 08:09:35 +0000</pubDate><guid>https://svrooij.io/2025/10/20/collabdays-belgium-2025/</guid><description>&lt;p&gt;&lt;a href="https://www.collabdays.org/2025-belgium/"&gt;CollabDays Belgium 2025&lt;/a&gt; took place on October 18th 2025 in Edegem, Belgium. This year I had the pleasure to give not one, but two sessions! What a day it was. A lot of positive energy, learnings and networking. Check out the key takeaways from this great event below.&lt;/p&gt;</description></item><item><title>Publish to nuget without a token</title><link>https://svrooij.io/2025/10/16/publish-nuget-token/</link><pubDate>Thu, 16 Oct 2025 14:22:36 +0000</pubDate><guid>https://svrooij.io/2025/10/16/publish-nuget-token/</guid><description>&lt;p&gt;Ever got a message from nuget.org stating that your API key is expiring or has expired? Well, I sure did. Most of the 20 packages I maintain are published using GitHub Actions. I created separate API keys for each package, and stored them in the respective github repository secrets. So I have 20 keys to manage and rotate every year.&lt;/p&gt;
&lt;p&gt;Fast-forward to September 2025, when NuGet announced support for &lt;a href="https://learn.microsoft.com/en-us/nuget/nuget-org/trusted-publishing?wt.mc_id=SEC-MVP-5004985"&gt;Trusted Publishing&lt;/a&gt; from GitHub. And today I show you how to convert your existing GitHub Actions workflow to use trusted publishing instead of an API key.&lt;/p&gt;</description></item><item><title>Secretless confidential applications</title><link>https://svrooij.io/2025/10/10/secretless-confidential-applications/</link><pubDate>Fri, 10 Oct 2025 12:26:07 +0000</pubDate><guid>https://svrooij.io/2025/10/10/secretless-confidential-applications/</guid><description>&lt;p&gt;The Microsoft Authentication Library (MSAL) is one of my favorite libraries. It eases the process of getting tokens for Entra ID protected resources, and since most developers seem to struggle with getting tokens that is great. What is not so great, is the (out-of-the-box) lack of support for managed identities in confidential client applications. And I&amp;rsquo;m all-in for trying to get rid of secrets in applications, so I wanted to help all other developers.&lt;/p&gt;</description></item><item><title>Let's talk App Roles</title><link>https://svrooij.io/2025/08/27/entra-approles/</link><pubDate>Wed, 27 Aug 2025 08:22:53 +0000</pubDate><guid>https://svrooij.io/2025/08/27/entra-approles/</guid><description>&lt;p&gt;What are App roles in Microsoft Entra ID and why you should definitely be using them. Let&amp;rsquo;s talk app roles today.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://svrooij.io/assets/images/2025/08/app-roles.png"&gt;&lt;img src="https://svrooij.io/assets/images/2025/08/app-roles.png"&gt;&lt;/a&gt;&lt;figcaption&gt;
 &lt;h4&gt;Manage app roles in Entra ID&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Vibe smarter not harder</title><link>https://svrooij.io/2025/08/19/vibe-smarter-harder/</link><pubDate>Tue, 19 Aug 2025 12:45:03 +0000</pubDate><guid>https://svrooij.io/2025/08/19/vibe-smarter-harder/</guid><description>&lt;p&gt;&lt;a href="https://github.com/svrooij/unobtanium-web-proxy"&gt;Unobtanium.Web.Proxy&lt;/a&gt; is my new pet project. It is a http(s) inspection proxy that allows developers to add a web proxy to their own project. This is used in &lt;a href="https://learn.microsoft.com/en-us/microsoft-cloud/dev/dev-proxy/overview?wt.mc_id=SEC-MVP-5004985"&gt;Microsoft DevProxy&lt;/a&gt;. In the next &lt;a href="https://github.com/svrooij/unobtanium-web-proxy/releases/tag/v0.9.1-beta.2"&gt;release&lt;/a&gt; the complete API of Unobtanium.Web.Proxy will be changed. Using just &amp;ldquo;native&amp;rdquo; dotnet objects to interact with Http requests.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll show you how to use Github Copilot in your next breaking change migration project.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;h2 id="breaking-changes-"&gt;Breaking Changes 💣&lt;/h2&gt;
&lt;p&gt;This &lt;a href="https://github.com/svrooij/m365-developer-proxy/commit/0633c3b920b95e982033391a56a91a3ce749ac15#diff-ce63f1fd864e22580c61c045af8e5e39ffffbd7bbe4e398514d55f2ea9594ad7"&gt;commit&lt;/a&gt; will show you exactly what changed, but I&amp;rsquo;ll summarize:&lt;/p&gt;</description></item><item><title>Deploy to Azure Static Web App the slim way</title><link>https://svrooij.io/2025/06/26/deploy-azure-static-web-app-slim/</link><pubDate>Thu, 26 Jun 2025 13:41:32 +0000</pubDate><guid>https://svrooij.io/2025/06/26/deploy-azure-static-web-app-slim/</guid><description>&lt;p&gt;Have you ever used Azure Static Web Apps, and used the portal wizard to set it up? Then you&amp;rsquo;re probably using the &lt;a href="https://github.com/marketplace/actions/azure-static-web-apps-deploy"&gt;Azure Static Web App deploy Github Actions&lt;/a&gt;. Which is a humongous Github Action (1.6 GB docker container), that is also capable of automatically discovering how to build any of the supported apps.&lt;/p&gt;
&lt;p&gt;What if you don&amp;rsquo;t need any of the auto build capabilities? Microsoft does not officially support any other way to deploy to Azure Static Web Apps, so you&amp;rsquo;re out of luck. They might be some other way, read on if you want to know more.&lt;/p&gt;</description></item><item><title>Maester at ExpertsLive NL 2025</title><link>https://svrooij.io/2025/06/10/maester-expertslive-nl-2025/</link><pubDate>Tue, 10 Jun 2025 10:07:36 +0000</pubDate><guid>https://svrooij.io/2025/06/10/maester-expertslive-nl-2025/</guid><description>&lt;p&gt;What is &lt;a href="https://maester.dev"&gt;Maester&lt;/a&gt; and why did I want to give a talk about it at &lt;a href="https://expertslive.nl"&gt;Experts live Netherlands&lt;/a&gt;? Did I spark your interest? Read on and I&amp;rsquo;ll explain all about it.&lt;/p&gt;
&lt;figure&gt;&lt;a href="#"&gt;&lt;img src="https://svrooij.io/assets/images/2025/06/el2025-maester-slide1.png"&gt;&lt;/a&gt;&lt;figcaption&gt;
 &lt;h4&gt;June 3rd - Experts Live Netherlands 2025&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;!-- more --&gt;
&lt;h2 id="what-is-maester"&gt;What is Maester?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://maester.dev"&gt;Maester&lt;/a&gt; is an &lt;a href="https://github.com/maester365/maester"&gt;open-source&lt;/a&gt; security scanner for your Microsoft 365 tenant, made by community members. Several people had this idea that it would be cool to be able to automatically scan your tenants configuration. And if you can do it automatically you can also schedule it.&lt;/p&gt;</description></item><item><title>Intune requirement for ARM64 devices</title><link>https://svrooij.io/2025/05/30/intune-requirement-arm64-devices/</link><pubDate>Fri, 30 May 2025 09:26:31 +0000</pubDate><guid>https://svrooij.io/2025/05/30/intune-requirement-arm64-devices/</guid><description>&lt;p&gt;Since Microsoft is support Windows 11 on ARM64 devices, we see more and more devices running arm. While Microsoft made sure that it will emulate support for x64 applications. Running native ARM64 applications is way more power efficient and faster. If you manage your environment with Microsoft Intune, you might want to push ARM64 applications to your devices as well.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://svrooij.io/assets/images/2025/05/intune-requirements-not-met.png"&gt;&lt;img src="https://svrooij.io/assets/images/2025/05/intune-requirements-not-met.png"&gt;&lt;/a&gt;&lt;figcaption&gt;
 &lt;h4&gt;Intune requirements not met&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>GitHub workflow commands in PowerShell</title><link>https://svrooij.io/2025/05/14/github-workflow-commands-powershell/</link><pubDate>Wed, 14 May 2025 08:05:55 +0000</pubDate><guid>https://svrooij.io/2025/05/14/github-workflow-commands-powershell/</guid><description>&lt;p&gt;As an author of GitHub Actions, you have the ability to use &lt;a href="https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions"&gt;workflow commands&lt;/a&gt; to control specific things that happen when your workflow is executed. All the samples are in bash, but what if you did everything else in PowerShell? Can you do the same in PowerShell? Read along to find out how to do that.&lt;/p&gt;</description></item><item><title>Configure JWT Authentication in Dotnet</title><link>https://svrooij.io/2025/04/17/configure-jwt-authentication-dotnet/</link><pubDate>Thu, 17 Apr 2025 08:44:30 +0000</pubDate><guid>https://svrooij.io/2025/04/17/configure-jwt-authentication-dotnet/</guid><description>&lt;p&gt;When you develop an API you probably want an easy way to authenticate users. In this post, I will show you how to configure JWT authentication in a .NET API. This is a simple and effective way to secure your API endpoints. What is JWT? And how do you configure it the right way?&lt;/p&gt;</description></item><item><title>Write to Github Actions summary from DOTNET</title><link>https://svrooij.io/2025/04/14/github-summary-from-dotnet/</link><pubDate>Mon, 14 Apr 2025 09:00:00 +0000</pubDate><guid>https://svrooij.io/2025/04/14/github-summary-from-dotnet/</guid><description>&lt;p&gt;Github action runs can have these nice generated summaries, like the one for my &lt;a href="https://github.com/svrooij/winget-pkgs-index/actions/runs/14442520225"&gt;winget package index&lt;/a&gt;. But how do you set them? And can you do that with C#? Read on to see how you can do that as well.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://github.com/svrooij/winget-pkgs-index/actions/runs/14441201769"&gt;&lt;img src="https://svrooij.io/assets/images/2025/04/winget-index-job-summary.png"&gt;&lt;/a&gt;&lt;figcaption&gt;
 &lt;h4&gt;Winget index job summary&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id="github-action-summaries"&gt;Github Action summaries&lt;/h2&gt;
&lt;p&gt;Back in 2022 Github &lt;a href="https://github.blog/news-insights/product-news/supercharging-github-actions-with-job-summaries/"&gt;released&lt;/a&gt; Github Actions job summaries. Which is a nice feature that allows you to not only write stuff to the console, but also to write stuff to the &lt;a href="https://github.com/svrooij/winget-pkgs-index/actions/runs/14442520225"&gt;build summary&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Bitbash 2025: A Deep Dive into Managed Identity</title><link>https://svrooij.io/2025/02/07/bitbash-2025-deep-dive-managed-identity/</link><pubDate>Fri, 07 Feb 2025 10:40:46 +0000</pubDate><guid>https://svrooij.io/2025/02/07/bitbash-2025-deep-dive-managed-identity/</guid><description>&lt;p&gt;&lt;a href="https://www.bitbash.nl/"&gt;Bitbash 2025&lt;/a&gt; was an &lt;a href="https://svrooij.io/2025/01/27/bitbash-2025/"&gt;awesome&lt;/a&gt; conference, where I did a talk on managed identities. Here are the cliffnotes for that talk, and why I even do public speaking.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://svrooij.io/assets/images/2025/01/bitbash-ghostbusters.jpeg"&gt;&lt;img src="https://svrooij.io/assets/images/2025/01/bitbash-ghostbusters.jpeg"&gt;&lt;/a&gt;&lt;figcaption&gt;
 &lt;h4&gt;Bitbash 2025&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Bitbash 2025: Two days packed with dotnet and cloud</title><link>https://svrooij.io/2025/01/27/bitbash-2025/</link><pubDate>Mon, 27 Jan 2025 13:29:00 +0000</pubDate><guid>https://svrooij.io/2025/01/27/bitbash-2025/</guid><description>&lt;p&gt;January 24th and 25th, 2025, &lt;a href="https://bitbash.nl"&gt;Bitbash&lt;/a&gt; was held in the Netherlands at Info Support HQ in Veenendaal. One day of workshops followed by one day packed with sessions. This was my second time attending and I enjoyed it a lot. What did I learn and what is now on my list of things I have to check into? They will probably organize it again next year and I will definitely be there.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://bitbash.nl/"&gt;&lt;img src="https://svrooij.io/assets/images/2025/01/bitbash-website.png"&gt;&lt;/a&gt;&lt;figcaption&gt;
 &lt;h4&gt;Bitbash 2025&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Connect</title><link>https://svrooij.io/connect/</link><pubDate>Wed, 01 Jan 2025 00:00:00 +0200</pubDate><guid>https://svrooij.io/connect/</guid><description>&lt;p&gt;Hi, I&amp;rsquo;m Stephan van Rooij.&lt;/p&gt;
&lt;p&gt;A software engineer with a passion for IoT, robots and Home Automation. I love to tinker with hardware and software to create new things. I&amp;rsquo;m always looking for new challenges and opportunities to learn.&lt;/p&gt;
&lt;p&gt;Check out my LinkedIn page &lt;a href="https://linkedin.com/in/stephanvanrooij"&gt;linkedin.com/in/stephanvanrooij&lt;/a&gt; to connect. Or browse around my blog to see what I&amp;rsquo;m up to.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://linkedin.com/in/stephanvanrooij"&gt;&lt;img src="https://svrooij.io/linkedin.svg" alt="Linkedin"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Use multi tenant managed identity in Azure Automation</title><link>https://svrooij.io/2024/12/29/multi-tenant-managed-identity-azure-automation/</link><pubDate>Sun, 29 Dec 2024 13:29:13 +0000</pubDate><guid>https://svrooij.io/2024/12/29/multi-tenant-managed-identity-azure-automation/</guid><description>&lt;p&gt;With the introduction of multi tenant support for &lt;a href="https://svrooij.io/2024/12/24/multi-tenant-managed-identity-finally/"&gt;managed identities&lt;/a&gt; it is time to take a look at how to use them in Azure Automation. This post will take you through all the steps needed to get this working.&lt;/p&gt;</description></item><item><title>Multi tenant managed identity is finally here</title><link>https://svrooij.io/2024/12/24/multi-tenant-managed-identity-finally/</link><pubDate>Tue, 24 Dec 2024 09:57:10 +0000</pubDate><guid>https://svrooij.io/2024/12/24/multi-tenant-managed-identity-finally/</guid><description>&lt;p&gt;Microsoft just announced that you can now &amp;ldquo;officially&amp;rdquo; use managed identities in a multi-tenant scenario. This is a huge step forward security wise, if you&amp;rsquo;re in the business of building multi-tenant applications. Let me explain what this is, how it works and why it&amp;rsquo;s important.&lt;/p&gt;</description></item><item><title>Comparing Azure AD B2C to Entra External ID</title><link>https://svrooij.io/2024/12/04/comparing-azure-ad-b2c-entra-external-id/</link><pubDate>Wed, 04 Dec 2024 09:52:34 +0000</pubDate><guid>https://svrooij.io/2024/12/04/comparing-azure-ad-b2c-entra-external-id/</guid><description>&lt;p&gt;Building an application that requires user authentication? We all used to build this directly in our api / web application, but with all the security requirements and continuing hacking attempts, I would recommend against doing this part yourself. You cannot possibly spent as much money on security as the big companies do. So why not leverage their knowledge and experience?&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/12/b2c-vs-external-id.jpeg"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Azure AD B2C vs Entra External ID&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Microsoft is one of those companies that can help you with user authentication for your application. They used to offer &lt;strong&gt;Azure AD B2C&lt;/strong&gt; (Business to Consumer) for this, since a year or so they also offer &lt;strong&gt;Entra External ID&lt;/strong&gt;. Both are identity solutions, but what are the differences between the two? And which one should you choose for your application? I&amp;rsquo;ll start with a comparison table and then try to explain those differences in more detail. Microsoft is not the only company that offers identity solutions, but they are the only one I have experience with. If you have experience with other solutions, please let me know in the comments.&lt;/p&gt;</description></item><item><title>Open-source explained for none developers</title><link>https://svrooij.io/2024/09/18/open-source-explained-developers/</link><pubDate>Wed, 18 Sep 2024 15:24:23 +0000</pubDate><guid>https://svrooij.io/2024/09/18/open-source-explained-developers/</guid><description>&lt;p&gt;I recently saw a tweet from a well respected open-source developer, that someone was trying to use him as a free helpdesk. This is a common problem in the open-source community, and it&amp;rsquo;s a problem that I think is worth addressing. This explanation is not set in stone, but it&amp;rsquo;s a good starting point for understanding open-source.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/09/oss-helpdesk.jpg"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Open-source helpdesk&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id="what-is-open-source"&gt;What is open-source?&lt;/h2&gt;
&lt;p&gt;Open-source is a term that refers to software that is free to use, modify, and distribute. This means that anyone can use the software for any purpose, and they can modify the software to suit their needs. Open-source software is typically developed by a community of developers who work together to create and maintain the software.&lt;/p&gt;</description></item><item><title>Kiota serializing</title><link>https://svrooij.io/2024/08/20/kiota-serializing/</link><pubDate>Tue, 20 Aug 2024 13:22:32 +0000</pubDate><guid>https://svrooij.io/2024/08/20/kiota-serializing/</guid><description>&lt;p&gt;Using Kiota to serialize your data sounds like a great idea for my new project. But why should I care about Kiota serializing? Let&amp;rsquo;s find out!&lt;/p&gt;</description></item><item><title>Hyper-V template for Intune</title><link>https://svrooij.io/2024/08/02/hyper-v-template-intune/</link><pubDate>Fri, 02 Aug 2024 12:08:43 +0000</pubDate><guid>https://svrooij.io/2024/08/02/hyper-v-template-intune/</guid><description>&lt;p&gt;Want to test out autopilot device preparation in Hyper-V, but don&amp;rsquo;t know where to start? In this post, I&amp;rsquo;ll take you through the steps needed to create a Hyper-V virtual machine template for Intune.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/08/windows11_oobe.webp"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Windows 11 Out-of-box-experience&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows 11 or Windows 10 (pro or enterprise)&lt;/li&gt;
&lt;li&gt;Hyper-V installed&lt;/li&gt;
&lt;li&gt;Windows 11 ISO (pro or enterprise), with at least the may 2024 updates&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="create-a-new-virtual-machine"&gt;Create a new virtual machine&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open Hyper-V Manager&lt;/li&gt;
&lt;li&gt;Click on &lt;code&gt;Action&lt;/code&gt; and then &lt;code&gt;New&lt;/code&gt; and &lt;code&gt;Virtual Machine&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Next&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Choose a name for the virtual machine, for example, &lt;code&gt;IntuneTemplate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;(optional) Choose a different location for the virtual machine&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Next&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Choose &lt;code&gt;Generation 2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Next&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Assign at least 4GB of memory, (more is probably faster)&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Next&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Select the virtual switch you want, I picked &lt;code&gt;Default Switch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Next&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create a new virtual hard disk, size needs to be at least 30 GB, change the location if needed&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Next&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Install an operating system from a bootable image file, select the Windows 11 ISO&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Next&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Finish&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Right-click on the new virtual machine and click &lt;code&gt;Settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Go to &lt;code&gt;Security&lt;/code&gt; and enable &lt;code&gt;Enable Secure Boot&lt;/code&gt; and &lt;code&gt;Enable TPM&lt;/code&gt; (needed for autopilot)&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;OK&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Right click on the virtual machine and click &lt;code&gt;Connect&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;In the new window, click on &lt;code&gt;Start&lt;/code&gt; and press any key to boot from the ISO&lt;/li&gt;
&lt;li&gt;Install Windows 11 as you would on a physical machine (next, next, &amp;hellip;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t go through the OOBE (setup steps)!&lt;/strong&gt; instead continue with the next step in this guide.&lt;/p&gt;</description></item><item><title>Integration tests on protected API</title><link>https://svrooij.io/2024/07/10/integration-tests-protected-api/</link><pubDate>Wed, 10 Jul 2024 09:54:59 +0000</pubDate><guid>https://svrooij.io/2024/07/10/integration-tests-protected-api/</guid><description>&lt;p&gt;If you built an api that is protected with tokens from an external IDP, you got a challenge when you want to run integration tests. They would require an access token that is signed by the IDP. And if you want to test several roles, or access levels or flows. You would need several &amp;ldquo;accounts&amp;rdquo; in your IDP. Not only that, but not all IDPs allow you to get all tokens in a non-interactive way. So you would need to have a browser open to get the tokens, which is not feasible for automated tests.&lt;/p&gt;
&lt;figure&gt;&lt;a href="#identity-proxy-in-testcontainers"&gt;&lt;img src="https://svrooij.io/assets/images/2024/07/test-with-identity-proxy.png"&gt;&lt;/a&gt;&lt;figcaption&gt;
 &lt;h4&gt;Generate a token and use in integration test&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Kiota with dependency injection</title><link>https://svrooij.io/2024/07/03/kiota-dependency-injection/</link><pubDate>Wed, 03 Jul 2024 13:51:47 +0000</pubDate><guid>https://svrooij.io/2024/07/03/kiota-dependency-injection/</guid><description>&lt;p&gt;Kiota is an &lt;a href="https://learn.microsoft.com/openapi/kiota/using?wt.mc_id=SEC-MVP-5004985"&gt;open-source application&lt;/a&gt; that allows you to generate a client for any api that is documented with open api. It&amp;rsquo;s a great tool and we use it for all our new projects where we call an api. What we also use in all our applications is dependency injection, and those two need to be combined to get the best performance and most stable application.&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://learn.microsoft.com/openapi/kiota/tutorials/dotnet-dependency-injection?wt.mc_id=SEC-MVP-5004985"&gt;&lt;img src="https://svrooij.io/assets/images/2024/07/kiota-di.png"&gt;&lt;/a&gt;&lt;figcaption&gt;
 &lt;h4&gt;Kiota Dependency Injection&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;!-- more --&gt;
&lt;h2 id="why-use-dependency-injection"&gt;Why use dependency injection?&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://learn.microsoft.com/dotnet/core/extensions/dependency-injection?wt.mc_id=SEC-MVP-5004985"&gt;Dependency injection&lt;/a&gt; is a way to make your application more testable, maintainable, and scalable. It allows you to inject the dependencies into your classes, instead of creating them in the class. This way, you can easily replace the implementation of a class with another one, without changing the class itself. This is especially useful when you want to test your application, as you can easily mock the dependencies.&lt;/p&gt;</description></item><item><title>Authentication using certificate - Entra ID</title><link>https://svrooij.io/2024/06/05/authentication-certificate-key-vault/</link><pubDate>Wed, 05 Jun 2024 11:05:42 +0000</pubDate><guid>https://svrooij.io/2024/06/05/authentication-certificate-key-vault/</guid><description>&lt;p&gt;If you want to do authentication for your multi-tenant application, you can use a secret (which you shouldn&amp;rsquo;t!) or a certificate. In almost all the samples I&amp;rsquo;ve seen, the certificate is stored in the Key Vault &amp;ldquo;to keep it safe&amp;rdquo;. But how does the authentication work? And are you sure this is the most secure way?&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/NFeufptAoZE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
 &lt;/div&gt;

&lt;!-- more --&gt;
&lt;h2 id="process"&gt;Process&lt;/h2&gt;
&lt;p&gt;The short version of the process is:&lt;/p&gt;</description></item><item><title>What have you been up to?</title><link>https://svrooij.io/2024/05/21/what-have-you-been-up-to/</link><pubDate>Tue, 21 May 2024 19:40:00 +0000</pubDate><guid>https://svrooij.io/2024/05/21/what-have-you-been-up-to/</guid><description>&lt;p&gt;It has been pretty quite on this blog, are you still blogging? What is snooping up all the time you usually got for writing blog posts?&lt;/p&gt;
&lt;figure&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7196965303044505601/"&gt;&lt;img src="https://svrooij.io/assets/images/2024/05/security-coin-microsoft-security-nl.jpg"&gt;&lt;/a&gt;&lt;figcaption&gt;
 &lt;h4&gt;My first security coin&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Azure SQL and Entra ID authentication, tips from the field</title><link>https://svrooij.io/2024/03/27/azure-sql-entra-id-tips/</link><pubDate>Wed, 27 Mar 2024 14:28:30 +0000</pubDate><guid>https://svrooij.io/2024/03/27/azure-sql-entra-id-tips/</guid><description>&lt;p&gt;Azure SQL is a managed SQL server in the cloud. It&amp;rsquo;s a great service, but it can be a bit tricky to get it to work with Entra ID Authentication. Here are some tips from the field.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/03/azure-sql-select-admin.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Azure SQL Entra ID Admin required&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Azure Pipelines and commit messages</title><link>https://svrooij.io/2024/03/27/azure-pipelines-commit-messages/</link><pubDate>Wed, 27 Mar 2024 11:18:06 +0000</pubDate><guid>https://svrooij.io/2024/03/27/azure-pipelines-commit-messages/</guid><description>&lt;p&gt;It&amp;rsquo;s just a little frustration this time, I was creating a new Azure Pipeline, and I was testing the deployment steps. After 2 PR&amp;rsquo;s to the main branch, which should be configured as the correct trigger, I was still having issues.&lt;/p&gt;
&lt;p&gt;In the mean time my commit messages in the main branch will stay there forever.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/03/pipeline-failure.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Finally success after so many tries&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>MVP Summit 2024</title><link>https://svrooij.io/2024/03/24/mvp-summit-2024/</link><pubDate>Sun, 24 Mar 2024 16:27:13 +0000</pubDate><guid>https://svrooij.io/2024/03/24/mvp-summit-2024/</guid><description>&lt;p&gt;Did you know each &lt;a href="https://mvp.microsoft.com/?wt.mc_id=SEC-MVP-5004985"&gt;Microsoft MVP&lt;/a&gt; is invited to a yearly &lt;a href="https://summit.microsoft.com/?wt.mc_id=SEC-MVP-5004985"&gt;MVP Summit&lt;/a&gt;? As one of those &lt;a href="https://mvp.microsoft.com/en-US/MVP/profile/cc128f12-003f-ed11-bba3-000d3a197333?wt.mc_id=SEC-MVP-5004985"&gt;few&lt;/a&gt;, I was invited for the 2024 MVP summit.&lt;/p&gt;
&lt;p&gt;This was my first summit, and boy what a trip. Seeing my own name on the MVP wall, between all those other people really made an impression.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/03/stephan_mvp_wall.jpg"&gt;&lt;figcaption&gt;
 &lt;h4&gt;MVP wall&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Never forget the Authorize attribute</title><link>https://svrooij.io/2024/03/05/forget-authorize-attribute/</link><pubDate>Tue, 05 Mar 2024 13:37:55 +0000</pubDate><guid>https://svrooij.io/2024/03/05/forget-authorize-attribute/</guid><description>&lt;p&gt;Did you ever deploy an application and forgot to add the &lt;code&gt;[Authorize]&lt;/code&gt; attribute to a controller or action? I did, and it meant that the application was open to the public and one controller could be used without logging in. Let me show you how you can use reflection and &lt;a href="https://fluentassertions.com/"&gt;Fluent Assertions&lt;/a&gt; to check for the existence of an attribute on a specific class. I&amp;rsquo;m using this to verify the &lt;code&gt;Authorize&lt;/code&gt; attribute on all classed that inherit from &lt;code&gt;ControllerBase&lt;/code&gt; in a .NET Core application, but this principle can be used on any class to check for the existence of a specific attribute.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/03/lego-developer-and-security-guard.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Lego mini figures developer and security guard&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Modify a HttpClientHandler with Dependency Injection</title><link>https://svrooij.io/2024/02/27/modify-httpclienthandler-dependency-injection/</link><pubDate>Tue, 27 Feb 2024 13:35:59 +0000</pubDate><guid>https://svrooij.io/2024/02/27/modify-httpclienthandler-dependency-injection/</guid><description>&lt;p&gt;In the &lt;a href="https://svrooij.io/2024/02/22/nuke-man-middle-attack"&gt;previous post&lt;/a&gt; we have seen how you can protect your application to Man-in-the-middle attacks. The sample code there, was not showing how you could do the same if you are not managing the HttpClient yourself. In this post we will see how you can utilize this with dependency injection and the &lt;code&gt;Microsoft.Extensions.Http&lt;/code&gt; package, which allows you to also protect your application if you&amp;rsquo;re using dependency injection to manage your &lt;code&gt;HttpClient&lt;/code&gt; instances.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/02/hacker-with-magnifying-glass-cartoon-style.png"&gt;
&lt;/figure&gt;</description></item><item><title>Nuke the man-in-the-middle attack</title><link>https://svrooij.io/2024/02/22/nuke-man-middle-attack/</link><pubDate>Thu, 22 Feb 2024 13:18:53 +0000</pubDate><guid>https://svrooij.io/2024/02/22/nuke-man-middle-attack/</guid><description>&lt;p&gt;Everybody should take security seriously! Let&amp;rsquo;s see what you can do to do the extra step to protect your applications. In this post we will have a look at how you can protect your application from Man-in-the-middle attacks.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/02/hacker-with-magnifying-glass-cartoon-style-and-a-police-with-a-baseball-bat.png"&gt;
&lt;/figure&gt;

&lt;!-- more --&gt;
&lt;h2 id="man-in-the-middle"&gt;Man-in-the-middle&lt;/h2&gt;
&lt;p&gt;What is a man-in-the-middle attack? It means the attacker has found a way to intercept the traffic between two parties. This is a serious problem, because the attacker can read, modify and even delete the traffic. This is a serious problem for users, but also for applications.&lt;/p&gt;</description></item><item><title>Validate JWT with OpenID Connect</title><link>https://svrooij.io/2024/02/22/validate-jwt-openid-connect/</link><pubDate>Thu, 22 Feb 2024 10:55:07 +0000</pubDate><guid>https://svrooij.io/2024/02/22/validate-jwt-openid-connect/</guid><description>&lt;p&gt;Working with API&amp;rsquo;s, or calling the Microsoft Graph API, you&amp;rsquo;ve probably seen them those JSON Web Tokens (or JWT for short). It&amp;rsquo;s a way to securely transmit information between parties. But how do you validate them? In this post, I&amp;rsquo;ll show you how to validate a JWT using OpenID Connect.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/02/jwt-title.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;JWT title screen&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;!-- more --&gt;
&lt;h2 id="what-is-a-jwt"&gt;What is a JWT&lt;/h2&gt;
&lt;p&gt;A JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. A JWT consists of three parts separated by dots (&lt;code&gt;.&lt;/code&gt;):&lt;/p&gt;</description></item><item><title>Local API for appliances</title><link>https://svrooij.io/2024/01/21/local-api-appliances/</link><pubDate>Sun, 21 Jan 2024 09:57:06 +0000</pubDate><guid>https://svrooij.io/2024/01/21/local-api-appliances/</guid><description>&lt;p&gt;I&amp;rsquo;m a home automation enthusiast, so that&amp;rsquo;s out. I&amp;rsquo;ve been using various systems for years, I even build some home automation packages, like &lt;a href="https://sonos2mqtt.svrooij.io"&gt;sonos2mqtt&lt;/a&gt; and &lt;a href="https://github.com/svrooij/ipcam2mqtt"&gt;ipcam2mqtt&lt;/a&gt;. When buying devices I always look for devices that have a local API, so I can integrate them in my home automation system. Devices that require the cloud to be controllable are getting a points deduction when comparing devices.&lt;/p&gt;
&lt;p&gt;In my opinion all devices should have a local api, and if they have a cloud api, it should be optional. I don&amp;rsquo;t want to be forced to use the cloud and I want to be able to control my devices locally.&lt;/p&gt;
&lt;p&gt;I discovered that my &lt;a href="https://svrooij.io/2023/01/25/disconnect-your-smart-appliance/"&gt;oven talks to questionable countries&lt;/a&gt; so I disconnected it from the internet. Recently &lt;a href="https://www.bleepingcomputer.com/news/security/haier-hits-home-assistant-plugin-dev-with-takedown-notice/"&gt;Haier threatened an open-source developer&lt;/a&gt; with legal action because he made a home assistant plugin for his own Haier applicance.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/01/dishwasher-cloud.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Dishwasher on a cloud&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Using dependency injection in your C# PowerShell Modules</title><link>https://svrooij.io/2024/01/18/dependencies-powershell-module-csharp/</link><pubDate>Thu, 18 Jan 2024 14:57:21 +0000</pubDate><guid>https://svrooij.io/2024/01/18/dependencies-powershell-module-csharp/</guid><description>&lt;p&gt;For those following along, this is the second post in a series about PowerShell development in C#. In the &lt;a href="https://svrooij.io/2024/01/12/create-powershell-module-csharp/"&gt;first post&lt;/a&gt; I showed you how to create a binary PowerShell module in C# and how to debug it in Visual Studio. This post will continue this journey and show you how to use dependency injection in your binary PowerShell module.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/01/powershell-dependency-injection.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Dependency injection and async code in PowerShell&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Stop asking for passwords</title><link>https://svrooij.io/2024/01/16/stop-asking-for-passwords/</link><pubDate>Tue, 16 Jan 2024 12:04:07 +0000</pubDate><guid>https://svrooij.io/2024/01/16/stop-asking-for-passwords/</guid><description>&lt;p&gt;It&amp;rsquo;s been common practice for a long time to ask for passwords, surely we are migrating to passwordless authentication, but we are not there yet. So, what can we do to improve the security of our applications? What about setting a sign-in frequency?&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2024/01/banner-ask-for-password.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Laptop asking for password&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;blockquote&gt;
&lt;p&gt;This is an opinionated post, I&amp;rsquo;m looking at this from the perspective of a security consultant that wants the best solution for the users, while still preserving security. I want to open a discussion about this topic, so please leave a comment if you have a different opinion.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Automate your SSH keys using GitHub</title><link>https://svrooij.io/2024/01/15/automate-ssh-with-github/</link><pubDate>Mon, 15 Jan 2024 10:29:18 +0000</pubDate><guid>https://svrooij.io/2024/01/15/automate-ssh-with-github/</guid><description>&lt;p&gt;Using &lt;a href="https://svrooij.io/2024/01/01/secure-ssh-windows-hello/"&gt;Windows Hello for SSH keys&lt;/a&gt; makes sure your SSH keys are secure, it also means that they are tied to a single computer. If you only have one computer that should not be too much trouble. But if you&amp;rsquo;re one of those users that uses multiple computers. You&amp;rsquo;ll need to distribute all those SSH keys to all the computers you want to use them on. Let me show you how you can automate distributing your SSH keys using GitHub.&lt;/p&gt;</description></item><item><title>Create your first PowerShell module with C#</title><link>https://svrooij.io/2024/01/12/create-powershell-module-csharp/</link><pubDate>Fri, 12 Jan 2024 15:00:58 +0000</pubDate><guid>https://svrooij.io/2024/01/12/create-powershell-module-csharp/</guid><description>&lt;p&gt;Let&amp;rsquo;s say you have a C# project and you want to create a PowerShell module for it. Creating a PowerShell module for you project allows anyone to use your project without installing the .NET SDK or compiling the project.
If your target audience consists mainly of system administrators, they will be more comfortable using PowerShell than compiling a C# project.&lt;/p&gt;
&lt;p&gt;In this post I&amp;rsquo;ll show you how to create a &lt;strong&gt;binary&lt;/strong&gt; PowerShell module, which means you&amp;rsquo;ll be writing your &lt;em&gt;command lets&lt;/em&gt; in C# and not in PowerShell.&lt;/p&gt;</description></item><item><title>Secure SSH with Windows Hello</title><link>https://svrooij.io/2024/01/01/secure-ssh-windows-hello/</link><pubDate>Mon, 01 Jan 2024 12:39:18 +0000</pubDate><guid>https://svrooij.io/2024/01/01/secure-ssh-windows-hello/</guid><description>&lt;p&gt;You currently have all these security keys these days that allow you to securely store your ssh private keys on a device to prevent them from being stolen. But what if you could use your face to unlock your ssh keys? Well, you can! And it&amp;rsquo;s pretty easy to set up.&lt;/p&gt;</description></item><item><title>Speaking at ESPC23 - Protect your API with Entra ID</title><link>https://svrooij.io/2023/12/03/speaking-espc23-protect-api-entra-id/</link><pubDate>Sun, 03 Dec 2023 12:02:36 +0000</pubDate><guid>https://svrooij.io/2023/12/03/speaking-espc23-protect-api-entra-id/</guid><description>&lt;p&gt;I got accepted to speak at &lt;a href="https://www.sharepointeurope.com/conference/schedule/2023/"&gt;ESPC23&lt;/a&gt; the European SharePoint, Office 365 &amp;amp; Azure Conference in 2023. As a Microsoft MVP in Security, the topic has to be security related.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/11/ps_protect_your_api_with_azure_ad.jpeg"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Me in front of this huge screen&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>How do Federated credentials in GitHub Actions actually work</title><link>https://svrooij.io/2023/11/07/github-actions-federated-credentials-explained/</link><pubDate>Tue, 07 Nov 2023 10:44:57 +0000</pubDate><guid>https://svrooij.io/2023/11/07/github-actions-federated-credentials-explained/</guid><description>&lt;p&gt;I&amp;rsquo;m super enthusiastic about &lt;a href="https://learn.microsoft.com/entra/identity/managed-identities-azure-resources/overview?wt.mc_id=SEC-MVP-5004985"&gt;managed identities&lt;/a&gt;, because it allows you to deploy your application without having to worry about credentials. Federated credentials are a way to accomplish the same for none Azure resources. You can use federated credentials to authenticate several tasks inside Github Actions, and thus securely deploy your app to Azure without the need of a secret configured in GitHub.&lt;/p&gt;
&lt;p&gt;As the regular readers might expect this post will explain how federated credentials actually work inside GitHub Actions, a deep dive into the techniques that are actually driving this feature.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/11/github-actions-federated-token.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Get a federation token from GitHub&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Creating IntuneWin files with C#</title><link>https://svrooij.io/2023/10/24/create-intunewin-file/</link><pubDate>Tue, 24 Oct 2023 12:53:59 +0000</pubDate><guid>https://svrooij.io/2023/10/24/create-intunewin-file/</guid><description>&lt;p&gt;Now that I figured out how to &lt;a href="https://svrooij.io/2023/10/09/decrypting-intunewin-files/"&gt;decrypt IntuneWin files&lt;/a&gt; it is time to explain how you can create those files with just C# code. With this explanation you should be able to create IntuneWin files on any platform, that supports the .NET framework. And depending on your skills you might be able to port this code to other languages as well.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/10/open-source-content-prep.gif"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Super fast Content Prep&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Introducing Content Prep PowerShell</title><link>https://svrooij.io/2023/10/19/open-source-intune-content-prep/</link><pubDate>Thu, 19 Oct 2023 12:34:58 +0000</pubDate><guid>https://svrooij.io/2023/10/19/open-source-intune-content-prep/</guid><description>&lt;p&gt;Journey until now, I created &lt;a href="https://github.com/svrooij/wingetintune"&gt;WingetIntune on GitHub&lt;/a&gt;, an open-source app packager that downloads all the details from Winget and then packages the installer for Intune. In that &lt;a href="https://svrooij.io/2023/10/09/decrypting-intunewin-files/"&gt;last post&lt;/a&gt; I dove intune decrypting &lt;code&gt;.intunewin&lt;/code&gt; files. With the end goal of being able to create those files with pure C# code. And I&amp;rsquo;m happy to announce that I succeeded in doing so.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/10/open-source-content-prep.gif"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Super fast Content Prep&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Decrypting intunewin files</title><link>https://svrooij.io/2023/10/09/decrypting-intunewin-files/</link><pubDate>Mon, 09 Oct 2023 15:32:00 +0000</pubDate><guid>https://svrooij.io/2023/10/09/decrypting-intunewin-files/</guid><description>&lt;p&gt;In my quest to build an open-source, cross platform, tool that packages Win32 apps from Winget for Intune &lt;a href="https://github.com/svrooij/wingetintune"&gt;WingetIntune on GitHub&lt;/a&gt;, I&amp;rsquo;ve been looking at the Win32 Content Prep Tool in my &lt;a href="https://svrooij.io/2023/10/04/analysing-win32-content-prep-tool/"&gt;previous post&lt;/a&gt;. In this post I&amp;rsquo;ll try to decrypt the &lt;code&gt;IntunePackage.intunewin&lt;/code&gt; file that is generated by the tool.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/10/Unlock-IntuneWinPackage.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;PowerShell module to create and decrypt .intunewin files&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Analysing Win32 Content Prep Tool</title><link>https://svrooij.io/2023/10/04/analysing-win32-content-prep-tool/</link><pubDate>Wed, 04 Oct 2023 08:05:41 +0000</pubDate><guid>https://svrooij.io/2023/10/04/analysing-win32-content-prep-tool/</guid><description>&lt;p&gt;In my quest to build an open-source, cross platform, tool that packages Win32 apps from Winget for Intune &lt;a href="https://github.com/svrooij/wingetintune"&gt;WingetIntune on GitHub&lt;/a&gt;, I&amp;rsquo;ve been looking at the Win32 Content Prep Tool. This tool is used by administrators to prepare Win32 apps for deployment in Intune. It&amp;rsquo;s a closed source application requiring windows to run. In this post I&amp;rsquo;ll be looking at the tool and how it works.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/10/detection_xml.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Detection.xml file from .intunewin&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Compute file hash in C# asynchronously</title><link>https://svrooij.io/2023/10/03/compute-file-hash-asynchronously/</link><pubDate>Tue, 03 Oct 2023 14:58:44 +0000</pubDate><guid>https://svrooij.io/2023/10/03/compute-file-hash-asynchronously/</guid><description>&lt;p&gt;In my recent quest I&amp;rsquo;ve been building a tool that publishes any apps from winget to Intune, called &lt;a href="https://github.com/svrooij/wingetintune"&gt;WingetIntune&lt;/a&gt;. One of the things that was still on the todo list was to compute and check the hash of the installer. We wouldn&amp;rsquo;t want to package a corrupted or maliciously changed installer, right?&lt;/p&gt;
&lt;p&gt;Since I&amp;rsquo;m building my application with the cloud in mind, using synchronous code is a big no-no. So I went looking for a way to compute the hash of a file asynchronously. Only to find out there is no such thing in &lt;code&gt;.NETStandard 2.0&lt;/code&gt; which I was targeting.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/10/file-hash-async.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Compute file hash asynchronously&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Remove platform dependency for WingetIntune</title><link>https://svrooij.io/2023/09/23/winget-intune-windows-deps/</link><pubDate>Sat, 23 Sep 2023 10:55:03 +0000</pubDate><guid>https://svrooij.io/2023/09/23/winget-intune-windows-deps/</guid><description>&lt;p&gt;&lt;a href="https://github.com/svrooij/wingetintune"&gt;WingetIntune&lt;/a&gt;, my latest open-source project to publish apps to Intune, has a dependency on Windows. This post explains why and how I&amp;rsquo;m planning to remove that dependency.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/09/winget-package-index.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Open-source winget community index&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Publish apps to Intune</title><link>https://svrooij.io/2023/08/31/publish-apps-to-intune/</link><pubDate>Thu, 31 Aug 2023 08:57:38 +0000</pubDate><guid>https://svrooij.io/2023/08/31/publish-apps-to-intune/</guid><description>&lt;p&gt;I&amp;rsquo;ve been taking you through the process of getting you apps in Intune. In the &lt;a href="https://svrooij.io/2023/08/30/package-apps-for-intune/"&gt;previous post&lt;/a&gt; I explained how to package apps for Intune. In this post I&amp;rsquo;ll go into publishing apps to Intune.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/08/publish-app-in-seconds-intune.gif"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Publish an app in seconds&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Package apps for Intune</title><link>https://svrooij.io/2023/08/30/package-apps-intune/</link><pubDate>Wed, 30 Aug 2023 19:58:20 +0000</pubDate><guid>https://svrooij.io/2023/08/30/package-apps-intune/</guid><description>&lt;p&gt;In the &lt;a href="https://svrooij.io/2023/08/30/apps-intune/"&gt;previous post&lt;/a&gt; I explained that you can use Intune to install applications for all you colleagues. In this post I&amp;rsquo;ll go into packaging apps for Intune&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/08/package-intune-app.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Package an app in seconds&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Get your apps in Intune</title><link>https://svrooij.io/2023/08/30/apps-intune/</link><pubDate>Wed, 30 Aug 2023 10:00:10 +0000</pubDate><guid>https://svrooij.io/2023/08/30/apps-intune/</guid><description>&lt;p&gt;Microsoft has this great tool to manage corporate devices, called Intune. Companies use it to manage their devices, and to deploy apps to them. But how do you get your apps in Intune? In this post I will explain how to get your apps in Intune, and how to deploy them to your devices.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/08/company-portal.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Apps in Company Portal&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>The Best GitHub workflow for a .NET app</title><link>https://svrooij.io/2023/08/09/best-github-workflow-net-app/</link><pubDate>Wed, 09 Aug 2023 15:11:47 +0000</pubDate><guid>https://svrooij.io/2023/08/09/best-github-workflow-net-app/</guid><description>&lt;p&gt;I might have build the best continues integration pipeline for a .NET app ever. How do you set up a workflow to automatically test your .NET application? I&amp;rsquo;ve created a &lt;a href="https://github.com/svrooij/sonos-net/actions/workflows/build.yml"&gt;workflow&lt;/a&gt; that has all the things you might need to get started.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/08/github-action-result.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Github actions build summary&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Emulate Managed Identities during development</title><link>https://svrooij.io/2023/08/03/emulate-managed-identities/</link><pubDate>Thu, 03 Aug 2023 07:38:58 +0000</pubDate><guid>https://svrooij.io/2023/08/03/emulate-managed-identities/</guid><description>&lt;p&gt;Ever used Managed Identities in Azure? You should, it&amp;rsquo;s a great way to get rid off passwords in your code and configuration. In this post I&amp;rsquo;ll show you how managed identities actually work. And how I built a small app that should help you use the &lt;code&gt;ManagedIdentityCredential&lt;/code&gt; in Docker and or during development.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/08/managed-identity-in-docker.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;App running in docker using Managed Identity&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Use System.Text.Json in Azure Functions</title><link>https://svrooij.io/2023/07/26/system-text-json-azure-functions/</link><pubDate>Wed, 26 Jul 2023 10:06:24 +0000</pubDate><guid>https://svrooij.io/2023/07/26/system-text-json-azure-functions/</guid><description>&lt;p&gt;In 2019 Microsoft has &lt;a href="https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/"&gt;released&lt;/a&gt; some new build-in API&amp;rsquo;s to (de/)serialize JSON. All the API&amp;rsquo;s in the &lt;code&gt;System.Text.Json&lt;/code&gt; namespace should allow you to work with &lt;a href="https://en.wikipedia.org/wiki/JSON"&gt;JavaScript Object Notation&lt;/a&gt; files without the need for &lt;a href="#newtonsoftjson"&gt;Newtonsoft.JSON&lt;/a&gt;, the longtime go-to library to handle JSON. In this post I&amp;rsquo;ll explorer how to use the new api&amp;rsquo;s right from Azure Functions C#.&lt;/p&gt;</description></item><item><title>Fake banking security</title><link>https://svrooij.io/2023/07/24/fake-banking-security/</link><pubDate>Mon, 24 Jul 2023 14:13:01 +0000</pubDate><guid>https://svrooij.io/2023/07/24/fake-banking-security/</guid><description>&lt;p&gt;I have this bank account, at a bank (I will not shame publicly for now), but I&amp;rsquo;m really frustrated with their &amp;ldquo;fake&amp;rdquo; security. I don&amp;rsquo;t own a bank, nor do I work for one, but in my opinion they should think differently about security. I also provide some alternative security measures that I thought up myself.&lt;/p&gt;
&lt;p&gt;&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/07/pexels-cottonbro-studio-8720586.jpg"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Photo by cottonbro studio&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;
 &lt;!-- Photo by cottonbro studio: https://www.pexels.com/photo/a-woman-typing-on-the-keyboard-8720586/ --&gt;&lt;/p&gt;</description></item><item><title>Configure SQL with managed identity</title><link>https://svrooij.io/2023/07/19/configure-sql-managed-identity/</link><pubDate>Wed, 19 Jul 2023 13:42:02 +0000</pubDate><guid>https://svrooij.io/2023/07/19/configure-sql-managed-identity/</guid><description>&lt;p&gt;This post will show you how we configure Azure SQL Server with a &lt;a href="https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview?wt.mc_id=SEC-MVP-5004985"&gt;managed identity&lt;/a&gt;, it will also show you the most common pitfalls.&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/07/sql-managed-identity.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Configure Azure Groups as database users&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>VanMoof going bankrupt, what about my digital bike key?</title><link>https://svrooij.io/2023/07/17/own-stuff-cloud-dependency/</link><pubDate>Mon, 17 Jul 2023 17:39:19 +0000</pubDate><guid>https://svrooij.io/2023/07/17/own-stuff-cloud-dependency/</guid><description>&lt;p&gt;A few days ago VanMoof (a Dutch E-bike vendor) applied for a &lt;a href="https://minerva-advocaten.nl/en/news/suspension-of-payment"&gt;suspension of payment&lt;/a&gt;, this usually means the company might go bankrupt in the near future. What does that mean for their customers? In this post I&amp;rsquo;ll share some toughs on the cloud dependency products have these days.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There was a tweet here, but it is deleted forever.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Hiding in plain Graph, an issue with Azure AD Audit log</title><link>https://svrooij.io/2023/07/07/hiding-plain-graph-azure-ad-audit-issue/</link><pubDate>Fri, 07 Jul 2023 11:27:01 +0000</pubDate><guid>https://svrooij.io/2023/07/07/hiding-plain-graph-azure-ad-audit-issue/</guid><description>&lt;p&gt;The &lt;a href="#audit-log"&gt;audit log&lt;/a&gt; in Azure AD in super important. If I was an attacker that got access to some tenant, I would make sure my details would not show up in there. I would probably use a VPN/TOR of sorts just to hide my tracks. But what if I tell you that the Microsoft Graph API does already covers your tracks?&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://svrooij.io/assets/images/2023/06/audit-log-azure-ad-masked.png"&gt;&lt;figcaption&gt;
 &lt;h4&gt;Not my IP showing in the audit log&lt;/h4&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;</description></item><item><title>Blog migrated to hugo on Static Web Apps</title><link>https://svrooij.io/2023/06/26/blog-migrated-to-hugo-on-static-web-apps/</link><pubDate>Mon, 26 Jun 2023 14:23:33 +0000</pubDate><guid>https://svrooij.io/2023/06/26/blog-migrated-to-hugo-on-static-web-apps/</guid><description>&lt;p&gt;The blog you&amp;rsquo;re currently reading is a written in Markdown, then an application runs and generates static html files. This is called a &lt;a href="https://jamstack.org/generators/"&gt;static site generator&lt;/a&gt;, there are several static site generators. Previously I used &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; and recently I decided it was time for something new, I migrated to &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt;. Let my explain why I did this and what was needed to make this happen.&lt;/p&gt;</description></item><item><title>Teams Hacktogether: Entry</title><link>https://svrooij.io/2023/06/22/teams-hacktogether-entry/</link><pubDate>Thu, 22 Jun 2023 08:21:17 +0000</pubDate><guid>https://svrooij.io/2023/06/22/teams-hacktogether-entry/</guid><description>&lt;p&gt;Microsoft organized a &lt;a href="https://github.com/microsoft/hack-together-teams"&gt;Teams Hacktogether&lt;/a&gt; hackathon, we had a great &lt;a href="https://svrooij.io/2023/06/12/teams-hacktogether-idea/"&gt;idea&lt;/a&gt;. This post will show you our &lt;a href="https://github.com/microsoft/hack-together-teams/issues/66"&gt;entry&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Remove PowerShell modules by name</title><link>https://svrooij.io/2023/06/21/remove-powershell-modules-by-name/</link><pubDate>Wed, 21 Jun 2023 09:46:12 +0000</pubDate><guid>https://svrooij.io/2023/06/21/remove-powershell-modules-by-name/</guid><description>&lt;p&gt;Let&amp;rsquo;s say you installed a lot of PowerShell modules, and maybe several different versions. Cleaning this up or upgrading to the latest version is a terrible job.&lt;/p&gt;
&lt;p&gt;Luckily you can use PowerShell to fix this for you.&lt;/p&gt;</description></item><item><title>Assign additional permissions to service principal</title><link>https://svrooij.io/2023/06/19/assign-additional-permissions-to-service-principal/</link><pubDate>Mon, 19 Jun 2023 15:00:48 +0000</pubDate><guid>https://svrooij.io/2023/06/19/assign-additional-permissions-to-service-principal/</guid><description>&lt;p&gt;You have a service principal in your tenant. Either you created it yourself or it&amp;rsquo;s a service principal for an app registration from another tenant (multi tenant application). Now this service principal needs access to an addition role. It&amp;rsquo;s not always possible to do a new admin consent sometimes you want the change just for a single service principal in a single tenant.&lt;/p&gt;
&lt;p&gt;I &lt;a href="https://svrooij.io/2022/04/21/access-api-with-managed-identity/"&gt;wrote&lt;/a&gt; about this before, but since the &lt;strong&gt;Azure AD&lt;/strong&gt; module is depreciated, it&amp;rsquo;s time to do the same with the new &lt;strong&gt;Microsoft Graph PowerShell module&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Teams Hacktogether: Blazor</title><link>https://svrooij.io/2023/06/14/teams-hacktogether-blazor/</link><pubDate>Wed, 14 Jun 2023 10:46:41 +0000</pubDate><guid>https://svrooij.io/2023/06/14/teams-hacktogether-blazor/</guid><description>&lt;p&gt;In the previous post I shared my first experience with the &lt;a href="https://svrooij.io/2023/06/13/teams-hacktogether-toolkit/"&gt;teams toolkit&lt;/a&gt;. For the &lt;a href="https://github.com/microsoft/hack-together-teams"&gt;Teams Hacktogether&lt;/a&gt;, we started our Teams Tab in &lt;a href="https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor"&gt;Blazor&lt;/a&gt;. What is Blazor, what flavours are there and what about hosting your app?&lt;/p&gt;</description></item><item><title>Teams Hacktogether: Toolkit</title><link>https://svrooij.io/2023/06/13/teams-hacktogether-toolkit/</link><pubDate>Tue, 13 Jun 2023 09:12:39 +0000</pubDate><guid>https://svrooij.io/2023/06/13/teams-hacktogether-toolkit/</guid><description>&lt;p&gt;There were some &lt;a href="https://svrooij.io/2023/06/12/teams-hacktogether-idea/#learning-new-stuff"&gt;ground rules&lt;/a&gt; for the &lt;a href="https://github.com/microsoft/hack-together-teams"&gt;Teams Hacktogether&lt;/a&gt;, we were going to build our Teams tab in &lt;a href="https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor"&gt;Blazor&lt;/a&gt;. And this post describes the experience we had with the Visual Studio template for a Teams Tab in Blazor.&lt;/p&gt;</description></item><item><title>Teams Hacktogether: Getting access</title><link>https://svrooij.io/2023/06/12/teams-hacktogether-getting-access/</link><pubDate>Mon, 12 Jun 2023 12:30:21 +0000</pubDate><guid>https://svrooij.io/2023/06/12/teams-hacktogether-getting-access/</guid><description>&lt;p&gt;For our &lt;a href="https://svrooij.io/2023/06/12/teams-hacktogether-idea/"&gt;Teams app&lt;/a&gt; we wanted to access the applications from the &lt;strong&gt;My Apps&lt;/strong&gt; page, but how do you access data from an app that does not have a public api? Let me start by saying that accessing an internal api, like I&amp;rsquo;ll be showing is never recommended to use in production. Only use this information for proof-of-concepts, like what we are building.&lt;/p&gt;</description></item><item><title>Teams Hacktogether: Idea</title><link>https://svrooij.io/2023/06/12/teams-hacktogether-idea/</link><pubDate>Mon, 12 Jun 2023 12:30:21 +0000</pubDate><guid>https://svrooij.io/2023/06/12/teams-hacktogether-idea/</guid><description>&lt;p&gt;A few months ago, my friend &lt;a href="https://janbakker.tech/"&gt;Jan Bakker&lt;/a&gt; came to me, with a great idea. He had a client that asked &amp;ldquo;Can we show the applications from the &lt;a href="https://myapps.microsoft.com"&gt;My Apps&lt;/a&gt; page inside of Teams?&amp;rdquo; I thought this was an interesting idea, and checked the &lt;a href="https://learn.microsoft.com/graph/api/overview?view=graph-rest-1.0&amp;amp;preserve-view=true&amp;amp;wt.mc_id=SEC-MVP-5004985"&gt;documentation&lt;/a&gt; on the Microsoft Graph only to find out that you cannot easily access that information.&lt;/p&gt;</description></item><item><title>Sonos TypeScript</title><link>https://svrooij.io/projects/sonos-typescript/</link><pubDate>Tue, 06 Jun 2023 10:03:53 +0200</pubDate><guid>https://svrooij.io/projects/sonos-typescript/</guid><description>&lt;p&gt;Sonos speakers have an extensive local &lt;a href="https://sonos.svrooij.io/services/"&gt;api&lt;/a&gt; which was not documented anywhere. In my other project &lt;a href="https://svrooij.io/projects/sonos2mqtt"&gt;sonos2mqtt&lt;/a&gt; I wanted to control everything on the Sonos speakers you could with the official application.&lt;/p&gt;
&lt;p&gt;So I decided it was time to parse the xml service documentation and write a custom &lt;a href="https://github.com/svrooij/sonos-api-docs/tree/main/generator/sonos-docs"&gt;client generator&lt;/a&gt; and a matching &lt;a href="https://github.com/svrooij/node-sonos-ts/tree/master/.generator/ts"&gt;template&lt;/a&gt; to generate a Sonos client library that could do everything you can do with the original application.&lt;/p&gt;
&lt;p&gt;Check out this library and control your sonos speakers from your own application.&lt;/p&gt;</description></item><item><title>Sonos2mqtt</title><link>https://svrooij.io/projects/sonos2mqtt/</link><pubDate>Tue, 06 Jun 2023 10:03:53 +0200</pubDate><guid>https://svrooij.io/projects/sonos2mqtt/</guid><description>&lt;p&gt;Sonos2mqtt is my pet project for years. It allows you to control your Sonos speakers through a mqtt server. This pub/sub mechanism is perfect in a smarthome environment. There is an event and you want to ack on in.&lt;/p&gt;
&lt;p&gt;This project started because I had no way to control my Sonos speakers without the Sonos application (which kinda sucks). And now years later it&amp;rsquo;s downloaded 335k times from &lt;a href="https://hub.docker.com/r/svrooij/sonos2mqtt"&gt;Dockerhub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://svrooij.io/sonos2mqtt"&gt;&lt;img src="https://img.shields.io/badge/sonos-mqtt-blue?style=for-the-badge" alt="Sonos2mqtt"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/sonos2mqtt"&gt;&lt;img src="https://img.shields.io/npm/v/sonos2mqtt?style=for-the-badge" alt="npm"&gt;&lt;/a&gt;
&lt;a href="https://hub.docker.com/r/svrooij/sonos2mqtt"&gt;&lt;img src="https://img.shields.io/docker/pulls/svrooij/sonos2mqtt?style=for-the-badge" alt="docker pulls"&gt;&lt;/a&gt;
&lt;a href="https://npmjs.org/package/sonos2mqtt"&gt;&lt;img src="https://img.shields.io/npm/dw/sonos2mqtt.svg?style=for-the-badge" alt="Downloads/week"&gt;&lt;/a&gt;
&lt;a href="https://github.com/svrooij/sonos2mqtt/blob/master/package.json"&gt;&lt;img src="https://img.shields.io/npm/l/sonos2mqtt.svg?style=for-the-badge" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://github.com/svrooij/sonos2mqtt/issues"&gt;&lt;img src="https://img.shields.io/github/issues/svrooij/sonos2mqtt?style=for-the-badge" alt="github issues"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Nginx fault finding</title><link>https://svrooij.io/2023/03/30/nginx-errors/</link><pubDate>Thu, 30 Mar 2023 00:00:00 +0000</pubDate><guid>https://svrooij.io/2023/03/30/nginx-errors/</guid><description>&lt;p&gt;I had an issue with a NGINX server not starting after an upgrade, &lt;code&gt;sudo nginx -t&lt;/code&gt; did not help.&lt;/p&gt;</description></item><item><title>Betatalks, I was their guest</title><link>https://svrooij.io/2023/03/06/betatalks-podcast/</link><pubDate>Mon, 06 Mar 2023 00:00:00 +0000</pubDate><guid>https://svrooij.io/2023/03/06/betatalks-podcast/</guid><description>&lt;p&gt;I was asked to be a guest in &lt;a href="https://podcast.betatalks.nl/1622272/12352945-52-home-automation-and-security-done-right-and-wrong-with-stephan-van-rooij"&gt;Betatalks the Podcast&lt;/a&gt;, and I like sharing knowledge on security and home automation, so I taught why not.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://podcast.betatalks.nl/1622272/12352945-52-home-automation-and-security-done-right-and-wrong-with-stephan-van-rooij"&gt;&lt;img src="https://svrooij.io/assets/images/2023/03/betatalks-episode-52.png" alt="Betatalks podcast banner"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Beware, spoilers ahead. First listen to the episode then read this post.&lt;/p&gt;</description></item><item><title>Batching with Microsoft Graph</title><link>https://svrooij.io/2023/03/03/batching-in-microsoft-graph/</link><pubDate>Fri, 03 Mar 2023 00:00:00 +0000</pubDate><guid>https://svrooij.io/2023/03/03/batching-in-microsoft-graph/</guid><description>&lt;p&gt;Microsoft has this great &lt;a href="https://learn.microsoft.com/en-us/graph/overview?wt.mc_id=SEC-MVP-5004985"&gt;api&lt;/a&gt; where you can control almost everything in the Microsoft 365 cloud. To speed up your requests, you can combine up to &lt;a href="#need-link"&gt;20&lt;/a&gt; requests in a &lt;a href="https://learn.microsoft.com/en-us/graph/json-batching?wt.mc_id=SEC-MVP-5004985"&gt;batch&lt;/a&gt;. This post will explain how to use batching and how it got implemented in the &lt;a href="https://github.com/microsoftgraph/msgraph-sdk-dotnet-core?wt.mc_id=SEC-MVP-5004985"&gt;Graph SDK for DOTNET&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://svrooij.io/assets/images/2023/03/batch-add-users-to-group.png" alt="Add users to group fast"&gt;&lt;/p&gt;</description></item><item><title>I disconnected our smart oven, and maybe you should as well</title><link>https://svrooij.io/2023/01/25/disconnect-your-smart-appliance/</link><pubDate>Wed, 25 Jan 2023 00:00:00 +0000</pubDate><guid>https://svrooij.io/2023/01/25/disconnect-your-smart-appliance/</guid><description>&lt;p&gt;&lt;strong&gt;Arstechnica&lt;/strong&gt; published an &lt;a href="https://arstechnica.com/gadgets/2023/01/half-of-smart-appliances-remain-disconnected-from-internet-makers-lament/"&gt;article&lt;/a&gt; yesterday, called &lt;strong&gt;&amp;ldquo;Appliance makers sad that 50% of customers won’t connect smart appliances&amp;rdquo;&lt;/strong&gt;. Let me tell you, I&amp;rsquo;m glad people don&amp;rsquo;t connect their oven to the internet. We own two of these smart appliances from AEG and I disconnected them as soon as I discovered what they do.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://svrooij.io/assets/images/2023/01/ping-aeg.png" alt="Pinging aeg"&gt;&lt;/p&gt;</description></item><item><title>Creating a Home Assistant component</title><link>https://svrooij.io/2023/01/18/home-assistant-component/</link><pubDate>Wed, 18 Jan 2023 00:00:00 +0000</pubDate><guid>https://svrooij.io/2023/01/18/home-assistant-component/</guid><description>&lt;p&gt;Home automation is a topic that speaks to the imagination for most of us. Rooms that light up if you enter them, a notification on your phone when someone rings the doorbell. These thing tickled my personal interest years ago. Back then nobody was doing these kinds of things and as a developer I was intrigued.&lt;/p&gt;
&lt;p&gt;If you talk about Home Automation in 2023 you&amp;rsquo;re probably also talking about &lt;a href="https://www.home-assistant.io"&gt;Home Assistant&lt;/a&gt;, if you&amp;rsquo;ve never heard about that. Go on check their website, it&amp;rsquo;s awesome. Open-source mostly &lt;strong&gt;local&lt;/strong&gt; home automation with, &amp;ldquo;components&amp;rdquo; or &amp;ldquo;integrations&amp;rdquo; (they mix these terms, don&amp;rsquo;t know why) for thousands of devices. Out-of-the-box you have support for a lot of devices, but because it&amp;rsquo;s open-source you can easily add your own custom components. Home Assistant started as an applciation you would run on a simple raspberry pi you had laying around, recently more and more people are switching to a slightly more powerful system because the pi is no longer sufficient for their needs.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/stephanvanrooij"&gt;&lt;img src="https://img.shields.io/badge/LinkedIn-stephanvanrooij-blue?style=for-the-badge&amp;amp;logo=linkedin" alt="LinkedIn Profile"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/svrooij"&gt;&lt;img src="https://img.shields.io/twitter/follow/svrooij?logo=twitter&amp;amp;style=for-the-badge&amp;amp;logoColor=white" alt="Twitter follow"&gt;&lt;/a&gt;
&lt;a href="https://dotnet.social/@svrooij"&gt;&lt;img src="https://img.shields.io/mastodon/follow/109502876771613420?domain=https%3A%2F%2Fdotnet.social&amp;amp;label=%40svrooij%40dotnet.social&amp;amp;logo=mastodon&amp;amp;logoColor=white&amp;amp;style=for-the-badge" alt="Link Mastodon"&gt;&lt;/a&gt;
&lt;a href="https://svrooij.io/"&gt;&lt;img src="https://img.shields.io/badge/blog-svrooij.io-blue?style=for-the-badge" alt="Blog"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Extract all users with powershell and what to do about it part two</title><link>https://svrooij.io/2023/01/16/extract-all-users-with-powershell-part-two/</link><pubDate>Mon, 16 Jan 2023 00:00:00 +0000</pubDate><guid>https://svrooij.io/2023/01/16/extract-all-users-with-powershell-part-two/</guid><description>&lt;p&gt;In a &lt;a href="https://svrooij.io/2022/05/16/extract-all-users-with-powershell/"&gt;previous post&lt;/a&gt; I showed how to extract all users from a Microsoft 365 tenant, and what you should do about that. If you followed along that leak got restricted. The Azure AD module isn&amp;rsquo;t the only way to extract user information from a tenant. This post will show you how to do the same (extract all users to csv file) with the Graph PowerShell modules and what you should do about that.&lt;/p&gt;</description></item><item><title>An introduction to cmd.ms</title><link>https://svrooij.io/2023/01/11/cmd-ms/</link><pubDate>Wed, 11 Jan 2023 00:00:00 +0000</pubDate><guid>https://svrooij.io/2023/01/11/cmd-ms/</guid><description>&lt;p&gt;Developers and admins love to open apps using their keyboard, with all kinds of shortcuts. &lt;a href="https://github.com/merill"&gt;Merill Fernando&lt;/a&gt; made something really usefull called &lt;code&gt;cmd.ms&lt;/code&gt;. Continue reading to see what it is and how you can use it yourself.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://svrooij.io/assets/images/2023/01/cmd_ms_home.png" alt="CMD.ms screenshot"&gt;&lt;/p&gt;</description></item><item><title>2022: An exciting year</title><link>https://svrooij.io/2023/01/02/this-was-2022/</link><pubDate>Mon, 02 Jan 2023 00:00:00 +0000</pubDate><guid>https://svrooij.io/2023/01/02/this-was-2022/</guid><description>&lt;p&gt;Previous year was quite exciting, a lot has happened. In this post I look back on my most popular posts in 2022 and some of the open-source projects I enjoyed building.&lt;/p&gt;</description></item><item><title>Every project needs a badge</title><link>https://svrooij.io/2023/01/02/badges-badges-badges/</link><pubDate>Mon, 02 Jan 2023 00:00:00 +0000</pubDate><guid>https://svrooij.io/2023/01/02/badges-badges-badges/</guid><description>&lt;p&gt;You just created a new open-source project. Great, you rock! A lot of repositories have these nice images showing dynamic details of the repository. How does that work? By using these dynamic badges you can really make your repository stand out.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.linkedin.com/in/stephanvanrooij"&gt;&lt;img src="https://img.shields.io/badge/LinkedIn-stephanvanrooij-blue?style=for-the-badge&amp;amp;logo=linkedin" alt="LinkedIn Profile"&gt;&lt;/a&gt;
&lt;a href="https://twitter.com/svrooij"&gt;&lt;img src="https://img.shields.io/twitter/follow/svrooij?logo=twitter&amp;amp;style=for-the-badge&amp;amp;logoColor=white" alt="Twitter follow"&gt;&lt;/a&gt;
&lt;a href="https://dotnet.social/@svrooij"&gt;&lt;img src="https://img.shields.io/mastodon/follow/109502876771613420?domain=https%3A%2F%2Fdotnet.social&amp;amp;label=%40svrooij%40dotnet.social&amp;amp;logo=mastodon&amp;amp;logoColor=white&amp;amp;style=for-the-badge" alt="Link Mastodon"&gt;&lt;/a&gt;
&lt;a href="https://svrooij.io/"&gt;&lt;img src="https://img.shields.io/badge/blog-svrooij.io-blue?style=for-the-badge" alt="Blog"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Proof of concept: Multi tenant managed identity</title><link>https://svrooij.io/2022/12/16/poc-multi-tenant-managed-identity/</link><pubDate>Fri, 16 Dec 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/12/16/poc-multi-tenant-managed-identity/</guid><description>&lt;p&gt;Ever since Microsoft created &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview?wt.mc_id=SEC-MVP-5004985"&gt;managed identities&lt;/a&gt;, people are asking how/if they work for multi-tenant applications. They even spend a &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/managed-identities-faq?wt.mc_id=SEC-MVP-5004985#can-i-use-a-managed-identity-to-access-a-resource-in-a-different-directorytenant"&gt;faq&lt;/a&gt; on it.&lt;/p&gt;
&lt;p&gt;In my &lt;a href="https://svrooij.io/2022/06/21/managed-identity-multi-tenant-app/"&gt;previous post&lt;/a&gt; I wrote that it was possible to use a managed identity to get access tokens for some multi tenant application, if you haven&amp;rsquo;t seen that post be sure to check it out since this post uses the knowlage from that post to demo the process.&lt;/p&gt;</description></item><item><title>Hacking Primary refresh tokens, oops created a virus</title><link>https://svrooij.io/2022/10/18/hacking-prt/</link><pubDate>Tue, 18 Oct 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/10/18/hacking-prt/</guid><description>&lt;p&gt;Windows has some cleaver ways to handle SSO in combination with Azure AD. They use this so called &lt;a href="https://learn.microsoft.com/en-us/azure/active-directory/devices/concept-primary-refresh-token?wt.mc_id=SEC-MVP-5004985"&gt;Primary Refresh Token&lt;/a&gt;. These highly sensitive key materials, are usually stored in the systems TPM (trusted platform module), a hardware device that can protect keys. And are &amp;ldquo;unlocked&amp;rdquo; when the user logs in.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://posts.specterops.io/requesting-azure-ad-request-tokens-on-azure-ad-joined-machines-for-browser-sso-2b0409caad30"&gt;A post&lt;/a&gt;, by &lt;a href="https://twitter.com/tifkin_"&gt;Lee Christensen&lt;/a&gt; and the accompanying &lt;a href="https://github.com/leechristensen/RequestAADRefreshToken"&gt;RequestAADRefreshToken source&lt;/a&gt;, inspired me to check out what he had found.&lt;/p&gt;</description></item><item><title>Cancellable task with timeout</title><link>https://svrooij.io/2022/10/04/cancellable-task-with-timeout/</link><pubDate>Tue, 04 Oct 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/10/04/cancellable-task-with-timeout/</guid><description>&lt;p&gt;Don&amp;rsquo;t you like the &lt;code&gt;async&lt;/code&gt; and &lt;code&gt;await&lt;/code&gt; way of asynchronously programming in C#? I can tell you I like them a lot. Recently I came across a case where I wanted to add a timeout to an asynchronous task.&lt;/p&gt;</description></item><item><title>Create Outlook category for everyone</title><link>https://svrooij.io/2022/09/27/create-corporate-outlook-category/</link><pubDate>Tue, 27 Sep 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/09/27/create-corporate-outlook-category/</guid><description>&lt;p&gt;Did you know you can categorize items in your Outlook calendar to give them a different color (in most official Outlook clients)? You can help your users by pre-configuring some default categories. You can also create categories for your users if you have some automation to create items in their calendar by some automated way.&lt;/p&gt;</description></item><item><title>Protect against SSO for Graph PowerShell</title><link>https://svrooij.io/2022/09/14/protect-against-sso-graph-powershell/</link><pubDate>Wed, 14 Sep 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/09/14/protect-against-sso-graph-powershell/</guid><description>&lt;p&gt;Why would you want to disable SSO for some cloud app, we love SSO, it makes our life easier? I agree, single-sign-on is great, until it is used without the knowledge of a user that logged-in with his admin account (don&amp;rsquo;t do that!).&lt;/p&gt;</description></item><item><title>Replace an owner in all their Teams</title><link>https://svrooij.io/2022/09/13/replace-teams-owner/</link><pubDate>Tue, 13 Sep 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/09/13/replace-teams-owner/</guid><description>&lt;p&gt;Microsoft Teams without an owner are no longer manageable, so what happens if some user leaves the company and he/she was an owner in several Teams?&lt;/p&gt;</description></item><item><title>Externalize user accounts: OpenID Connect</title><link>https://svrooij.io/2022/08/05/externalize-user-acconts-openid-connect/</link><pubDate>Fri, 05 Aug 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/08/05/externalize-user-acconts-openid-connect/</guid><description>&lt;p&gt;Externalizing user accounts, what is he thinking? The &lt;a href="https://svrooij.io/2022/07/28/externalize-user-acconts-intro/"&gt;previous post&lt;/a&gt; should give you a clear view what this means and why you should consider it. This post will go a into details of &amp;ldquo;delegating login&amp;rdquo; to a separate application.&lt;/p&gt;</description></item><item><title>Externalize user accounts: An introduction</title><link>https://svrooij.io/2022/07/28/externalize-user-accounts-intro/</link><pubDate>Thu, 28 Jul 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/07/28/externalize-user-accounts-intro/</guid><description>&lt;p&gt;Externalizing user accounts, what is he thinking? In this post I&amp;rsquo;ll explain why every company should consider externalizing their user account management from their applications.&lt;/p&gt;</description></item><item><title>Using a managed identity as a client credential</title><link>https://svrooij.io/2022/06/21/managed-identity-multi-tenant-app/</link><pubDate>Tue, 21 Jun 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/06/21/managed-identity-multi-tenant-app/</guid><description>&lt;p&gt;Ever since Microsoft created &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview?wt.mc_id=SEC-MVP-5004985"&gt;managed identities&lt;/a&gt;, people are asking how/if they work for multi-tenant applications. They even spend a &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/managed-identities-faq?wt.mc_id=SEC-MVP-5004985#can-i-use-a-managed-identity-to-access-a-resource-in-a-different-directorytenant"&gt;faq&lt;/a&gt; on it.&lt;/p&gt;
&lt;p&gt;Previously you had to go through &lt;a href="https://svrooij.io/2022/01/20/secure-multi-tenant-app/"&gt;some hoops&lt;/a&gt; to use managed identities with your multi tenant app.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s have a look if we can solve this with in combination with &lt;a href="https://svrooij.io/2022/06/20/federated-credentials/"&gt;federated credentials&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Federated credentials, wait what?</title><link>https://svrooij.io/2022/06/20/federated-credentials/</link><pubDate>Mon, 20 Jun 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/06/20/federated-credentials/</guid><description>&lt;p&gt;Workflow identity federation of &amp;ldquo;federated credentials&amp;rdquo; as they are called in the Azure Portal are brand new in the Microsoft identity suite. As of writing they are still in preview.&lt;/p&gt;
&lt;p&gt;What are they and how does it work? This will all be explained in the post below.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://svrooij.io/assets/images/2022/06/federated-credentials.png" alt="federated credentials on Azure portal"&gt;&lt;/p&gt;</description></item><item><title>Building a GitHub Action in .NET</title><link>https://svrooij.io/2022/06/09/building-github-action-in-net/</link><pubDate>Thu, 09 Jun 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/06/09/building-github-action-in-net/</guid><description>&lt;p&gt;GitHub Actions allow you to run some program every time an event (or trigger) happens in GitHub. You can respond to a new PR, a new issue or even periodically run some job. There are &lt;a href="https://github.com/marketplace?type=actions"&gt;thousands&lt;/a&gt; of little actions you can use in your own workflow.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://svrooij.io/assets/images/github-actions-banner.png" alt="undraw image"&gt;&lt;/p&gt;</description></item><item><title>Protect against certificate extraction - encryption</title><link>https://svrooij.io/2022/06/01/certificate-extraction-encryption/</link><pubDate>Wed, 01 Jun 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/06/01/certificate-extraction-encryption/</guid><description>&lt;p&gt;You&amp;rsquo;re encrypting sensitive data with RSA encryption, great start! But how do you protect your certificates from being extracted? You get hacked and they steal your encrypted data, no problem, it&amp;rsquo;s encrypted! If they hack you, are you sure they can&amp;rsquo;t also steal the certificate? This series covers several risks of &lt;strong&gt;Certificate Extraction&lt;/strong&gt; and what you can do about it.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://svrooij.io/assets/images/undraw_Security_on_re_e491.png" alt="undraw image"&gt;&lt;/p&gt;</description></item><item><title>Protect against certificate extraction - Client credentials</title><link>https://svrooij.io/2022/05/27/certificate-extraction-client-credentials/</link><pubDate>Fri, 27 May 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/05/27/certificate-extraction-client-credentials/</guid><description>&lt;p&gt;You have this multi-tenant application that is protected with Azure AD, great! How about the certificate you&amp;rsquo;re using as a client credential? If you followed the Microsoft samples it&amp;rsquo;s probably stored in the Azure Key Vault. This seems really secure, but there is one thing no one thought about &lt;strong&gt;Certificate Extraction&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://svrooij.io/assets/images/undraw_Safe_re_kiil.png" alt="undraw image"&gt;&lt;/p&gt;</description></item><item><title>Extract all Azure AD admin accounts</title><link>https://svrooij.io/2022/05/17/extract-azure-admins/</link><pubDate>Tue, 17 May 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/05/17/extract-azure-admins/</guid><description>&lt;p&gt;Powershell is pretty powerful for all kind of administrative tasks, especially if you load some extra modules. We use the &lt;a href="https://docs.microsoft.com/en-us/powershell/module/azuread/?wt.mc_id=SEC-MVP-5004985"&gt;AzureAD&lt;/a&gt; module for a lot of tasks that can be (semi-)automated with the use of some script. In &lt;a href="https://svrooij.io/2022/05/16/extract-all-users-with-powershell/"&gt;this post&lt;/a&gt; I described how to extract all users from Azure AD as a regular user, and what you should do about it.&lt;/p&gt;
&lt;p&gt;Extracting users isn&amp;rsquo;t the only thing you can do with Azure AD powershell and this page shows how to export all Azure AD global admins (which can be executed by &lt;strong&gt;ANY&lt;/strong&gt; user in your tenant unless you &lt;a href="https://svrooij.io/2022/05/16/extract-all-users-with-powershell/#block-azuread-module-with-powershell"&gt;take action&lt;/a&gt; against that.)&lt;/p&gt;</description></item><item><title>Extract all users with powershell and what you should do about it</title><link>https://svrooij.io/2022/05/16/extract-all-users-with-powershell/</link><pubDate>Mon, 16 May 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/05/16/extract-all-users-with-powershell/</guid><description>&lt;p&gt;Powershell is pretty powerful for all kind of administrative tasks, especially if you load some extra modules. We use the &lt;a href="https://docs.microsoft.com/en-us/powershell/module/azuread/?wt.mc_id=SEC-MVP-5004985"&gt;AzureAD&lt;/a&gt; module for a lot of tasks that can be (semi-)automated with the use of some script.&lt;/p&gt;</description></item><item><title>Deploy to Azure Static Web App with only the name</title><link>https://svrooij.io/2022/05/05/deploy-static-web-app-without-token/</link><pubDate>Thu, 05 May 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/05/05/deploy-static-web-app-without-token/</guid><description>&lt;p&gt;Ever heard of &lt;a href="https://azure.microsoft.com/en-us/services/app-service/static/"&gt;Azure Static Web Apps&lt;/a&gt;? It combines a single page app (Angular/React/?) with Azure Functions, and manages it all for you.&lt;/p&gt;
&lt;p&gt;The deployment is a breeze, as long as you have the &lt;strong&gt;deployment token&lt;/strong&gt; available to your build pipeline. The deployment token should be kept a secret and you should save it somewhere secure.&lt;/p&gt;</description></item><item><title>Access Azure AD protected API with managed Identity</title><link>https://svrooij.io/2022/04/21/access-api-with-managed-identity/</link><pubDate>Thu, 21 Apr 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/04/21/access-api-with-managed-identity/</guid><description>&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview?wt.mc_id=SEC-MVP-5004985"&gt;Managed identities&lt;/a&gt; are a great way to improve the security of your application.
Microsoft &amp;ldquo;manages&amp;rdquo; the rotation of secrets and makes sure they cannot be extracted or used anywhere outside their platform.
That is the reason I&amp;rsquo;m a big fan off Managed Identities!&lt;/p&gt;
&lt;p&gt;You should use managed identities wherever possible. It&amp;rsquo;s possible to use managed identities for accessing (custom) api&amp;rsquo;s, an that is exactly what I&amp;rsquo;ll be explaining in this post. At the and you will be able to call any Azure AD protected api with using a managed identity.&lt;/p&gt;</description></item><item><title>UPDATE: Elektrische steps in Nederland</title><link>https://svrooij.io/2022/03/30/step-met-ondersteuning/</link><pubDate>Wed, 30 Mar 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/03/30/step-met-ondersteuning/</guid><description>&lt;p&gt;Nederland roept al jaren dat het technologisch voor wil lopen op de rest. We hebben enorm veel dingen uitgevonden in Nederland, Videobanden, bluetooth, enzovoort. Maar op het gebied van vervoersmiddelen lopen we echt enorm achter. In heel Europa zie je overal elektrische steps, in mijn ogen een super goede manier om mensen uit hun auto te krijgen.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://svrooij.io/assets/images/2022/03/e-step-verboden.png" alt="Elektrische step&amp;hellip; levensgevaarlijk&amp;hellip;"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; Deze pagina sprak over een pagina die is verwijderd van &lt;code&gt;rijksoverheid.nl&lt;/code&gt;, dat is inmiddels rechtgezet zie &lt;a href="#update-wob-verzoek"&gt;update WOB Verzoek&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Open-source sonos apps</title><link>https://svrooij.io/2022/03/06/sonos-apps/</link><pubDate>Sun, 06 Mar 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/03/06/sonos-apps/</guid><description>&lt;p&gt;Out of personal interest I&amp;rsquo;ve build several apps to have better control your Sonos speakers. This page will give you a brief overview of these apps.&lt;/p&gt;</description></item><item><title>KeyVault proxy demo</title><link>https://svrooij.io/2022/03/03/keyvault-proxy/</link><pubDate>Thu, 03 Mar 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/03/03/keyvault-proxy/</guid><description>&lt;p&gt;Today I&amp;rsquo;ll demo my new &lt;a href="https://svrooij.io/2022/02/04/token-proxy/"&gt;KeyVault proxy&lt;/a&gt; in the &lt;a href="https://www.twitch.tv/425show"&gt;425show&lt;/a&gt;.
This page will allow you to follow along.&lt;/p&gt;
&lt;p&gt;Check out the &lt;a href="https://www.twitch.tv/videos/1414084395"&gt;recording&lt;/a&gt; and if you have any questions, contact me on &lt;a href="https://twitter.com/svrooij"&gt;twitter @svrooij&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Clean developer install - Winget</title><link>https://svrooij.io/2022/02/18/winget/</link><pubDate>Fri, 18 Feb 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/02/18/winget/</guid><description>&lt;p&gt;A clean windows installation just feels faster, and as a developer I want a &lt;strong&gt;fast&lt;/strong&gt; machine! Why don&amp;rsquo;t you just reinstall your machine once a month, you ask? Because it takes a lot of time to set it up just right.&lt;/p&gt;</description></item><item><title>Introducing OBS Clock</title><link>https://svrooij.io/2022/02/15/obs-clock/</link><pubDate>Tue, 15 Feb 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/02/15/obs-clock/</guid><description>&lt;p&gt;I like to make my Team meetings a little more interactive, so I use &lt;a href="https://obsproject.com/"&gt;OBS&lt;/a&gt; to make my webcam look more awesome. I&amp;rsquo;ve setup hosting for some javascript clock I found on the web somewhere.&lt;/p&gt;</description></item><item><title>Securing credentials during development</title><link>https://svrooij.io/2022/02/04/token-proxy/</link><pubDate>Fri, 04 Feb 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/02/04/token-proxy/</guid><description>&lt;p&gt;Protecting client credentials for (multi-tenant) application should be your highest priority, not only in &lt;strong&gt;production&lt;/strong&gt; also during &lt;strong&gt;development&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We developed a small application that helps you do just that.
Use your Visual Studio credentials to sign a token request while the certificate stays in the KeyVault.
You could even only authorize developers to use the certificates in a KeyVault when they need it and de-authorize then when it&amp;rsquo;s no longer needed.&lt;/p&gt;</description></item><item><title>Jekyll website to progressive web app</title><link>https://svrooij.io/2022/01/29/jekyll-pwa/</link><pubDate>Sat, 29 Jan 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/01/29/jekyll-pwa/</guid><description>&lt;p&gt;A PWA (or Progressive web application) is a website which can be installed on a desktop and acts like an app. It has an icon and a title. And it can even receive messages from the server if the app isn&amp;rsquo;t running. It can also show notification messages to the users.&lt;/p&gt;
&lt;p&gt;So in short it&amp;rsquo;s a website acting like an app. This post shows you how to turn a Github Pages website into a pwa in three easy steps.&lt;/p&gt;</description></item><item><title>Twitter cards for static web page</title><link>https://svrooij.io/2022/01/21/twitter-cards/</link><pubDate>Fri, 21 Jan 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/01/21/twitter-cards/</guid><description>&lt;p&gt;My personal page is a static website hosted on &lt;a href="https://pages.github.com/"&gt;Github pages&lt;/a&gt;. Posts are written in &lt;a href="https://en.wikipedia.org/wiki/Markdown"&gt;markdown&lt;/a&gt; and the source of all the posts is in my &lt;a href="https://github.com/svrooij/svrooij.github.io/tree/master/_posts"&gt;public repository&lt;/a&gt;. I tweet about most posts at least once, and it just shows the link, that&amp;rsquo;s not what I want.&lt;/p&gt;
&lt;p&gt;All tweets to my blog should at least show the title and a short description. Maybe even a large image related to the post.&lt;/p&gt;</description></item><item><title>Securing multi-tenant app with Managed Identity</title><link>https://svrooij.io/2022/01/20/secure-multi-tenant-app/</link><pubDate>Thu, 20 Jan 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/01/20/secure-multi-tenant-app/</guid><description>&lt;p&gt;Keeping your secrets secure, can be a huge challenge. And keeping secrets becomes a huge responsibility, especially if you&amp;rsquo;re in the business of building multi-tenant applications. Microsoft created managed identities to ease this responsibility, but &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/managed-identities-faq?wt.mc_id=SEC-MVP-5004985#can-i-use-a-managed-identity-to-access-a-resource-in-a-different-directorytenant"&gt;according to the faq&lt;/a&gt;, you cannot use them to secure resources in other tenants. And that is exactly where we could use extra help is securing secrets.&lt;/p&gt;</description></item><item><title>Clone a BIG git repository</title><link>https://svrooij.io/2022/01/19/clone-big-repository/</link><pubDate>Wed, 19 Jan 2022 00:00:00 +0000</pubDate><guid>https://svrooij.io/2022/01/19/clone-big-repository/</guid><description>&lt;p&gt;Wanted to clone a repository to do a quick text fix and create a pull request. Created the &lt;a href="https://github.com/svrooij/azure-docs"&gt;fork&lt;/a&gt;, and tried to clone.
Cloning the repository took way longer than I&amp;rsquo;m used to.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://svrooij.io/assets/images/2022/01/slow-git-clone.png" alt="Slow git clone"&gt;&lt;/p&gt;</description></item><item><title>Github Actions: Use secret file</title><link>https://svrooij.io/2021/08/17/github-actions-secret-file/</link><pubDate>Tue, 17 Aug 2021 00:00:00 +0000</pubDate><guid>https://svrooij.io/2021/08/17/github-actions-secret-file/</guid><description>&lt;p&gt;&lt;a href="https://github.com/features/actions"&gt;Github Actions&lt;/a&gt; are great for automating tests and builds, among other things. If you need a secret (key/token/password), you can add those in the configuration and use them in your workflow.&lt;/p&gt;
&lt;p&gt;Sometimes you need a file that is meant to be secret inside your workflow. This post shows you how to securely save this file as a secret and recreate the file during build. We use base64 encoding for a way to convert any file to a string that can be saved in the secrets.&lt;/p&gt;
&lt;p&gt;This is all done in powershell core, which is available in all (Windows/Mac/Linux) runners on Github. The code below should work on any platform, but is only tested on a &lt;code&gt;windows-latest&lt;/code&gt; runner.&lt;/p&gt;</description></item><item><title>Using Managed Identity without Azure</title><link>https://svrooij.io/2021/07/20/managed-identity-without-azure/</link><pubDate>Tue, 20 Jul 2021 00:00:00 +0000</pubDate><guid>https://svrooij.io/2021/07/20/managed-identity-without-azure/</guid><description>&lt;p&gt;Azure &lt;a href="https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview?wt.mc_id=SEC-MVP-5004985"&gt;managed identities&lt;/a&gt; are great. You just turn it on and your Azure Resource can request a token for other resources that support it in your tenant. This way each resource in Azure can get it&amp;rsquo;s own &amp;ldquo;identity&amp;rdquo; and Microsoft will manage the credentials for you. You&amp;rsquo;ll no longer have to store credentials in the configuration as this is all part of the managed services.&lt;/p&gt;
&lt;p&gt;This post will give you an in-depth view of how Azure allows several client apps to requests tokens for Azure Resources.&lt;/p&gt;</description></item><item><title>Home automation setup</title><link>https://svrooij.io/2021/06/09/home-automation-setup/</link><pubDate>Wed, 09 Jun 2021 00:00:00 +0000</pubDate><guid>https://svrooij.io/2021/06/09/home-automation-setup/</guid><description>&lt;p&gt;I&amp;rsquo;m big fan of smart homes, almost everything in our home is controlable over the network. And I&amp;rsquo;ve build &lt;a href="#my-smarthome-apps"&gt;some awesome apps&lt;/a&gt; for it. This post will describe all the components used in my home, and how they connect to each other.&lt;/p&gt;</description></item><item><title>Azure Functions with multi tenant authentication</title><link>https://svrooij.io/2021/05/05/azure-functions-multi-tenant-authentication/</link><pubDate>Wed, 05 May 2021 00:00:00 +0000</pubDate><guid>https://svrooij.io/2021/05/05/azure-functions-multi-tenant-authentication/</guid><description>&lt;p&gt;Azure Functions (and Azure App Service) support authentication out of the box. They even made a wizard to get you started quickly. This is really useful if you just want users from your tenant (or a specific other tenant) to login.&lt;/p&gt;
&lt;p&gt;Check-out the &lt;a href="https://docs.microsoft.com/en-us/azure/app-service/overview-authentication-authorization?wt.mc_id=SEC-MVP-5004985"&gt;documentation&lt;/a&gt; to get started.&lt;/p&gt;</description></item><item><title>Azure Functions restore app settings</title><link>https://svrooij.io/2021/04/28/azure-functions-restore-appsettings/</link><pubDate>Wed, 28 Apr 2021 00:00:00 +0000</pubDate><guid>https://svrooij.io/2021/04/28/azure-functions-restore-appsettings/</guid><description>&lt;p&gt;Azure Functions share a lot with ASP.NET core, but some really useful things aren&amp;rsquo;t supported by default. I was missing the &lt;a href="https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?wt.mc_id=SEC-MVP-5004985"&gt;configuration stuff&lt;/a&gt; when building an Azure Functions app.&lt;/p&gt;</description></item><item><title>Generate awesome flows in markdown</title><link>https://svrooij.io/2021/04/01/generate-flows-from-markdown/</link><pubDate>Thu, 01 Apr 2021 00:00:00 +0000</pubDate><guid>https://svrooij.io/2021/04/01/generate-flows-from-markdown/</guid><description>&lt;p&gt;Flow diagrams can help greatly to explain some flow, it works much better the just text. To generate visual flows from text (markdown), &lt;a href="https://github.com/knsv"&gt;Knut Sveidqvist&lt;/a&gt; created &lt;a href="https://mermaid-js.github.io/mermaid/#/"&gt;Mermaid-js&lt;/a&gt;. It&amp;rsquo;s awesome, go check out the docs.&lt;/p&gt;</description></item><item><title>Schijnveiligheid van Marktplaats gelijk oversteken service</title><link>https://svrooij.io/2021/04/01/schijnveiligheid-van-gelijk-oversteken/</link><pubDate>Thu, 01 Apr 2021 00:00:00 +0000</pubDate><guid>https://svrooij.io/2021/04/01/schijnveiligheid-van-gelijk-oversteken/</guid><description>&lt;p&gt;Marktplaats is in Nederland &lt;strong&gt;de&lt;/strong&gt; website voor tweedehands spullen (als ik &lt;a href="https://www.alexa.com/topsites/countries/NL"&gt;Alexa ranking&lt;/a&gt; moet geloven). Hier worden jaarlijks vele dingen verhandeld en weggegeven.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE 13-04-2022&lt;/strong&gt; deze pagina ging over hoe slecht de gelijkoversteken service van Marktplaats was. Op 13 april 2022 komt eindelijk het bericht dat &lt;a href="https://www.rtlnieuws.nl/tech/artikel/5301713/marktplaats-gelijk-oversteken-betalen-versturen-ontvangen-functie-stopt"&gt;marktplaats stopt met gelijkoversteken service&lt;/a&gt;. Dit is enorm goed nieuws, want dit was niet eens een &lt;em&gt;service&lt;/em&gt; te noemen.&lt;/p&gt;</description></item><item><title>Microsoft Teams Desktop with multiple accounts</title><link>https://svrooij.io/2021/01/13/teams-with-multiple-accounts/</link><pubDate>Wed, 13 Jan 2021 00:00:00 +0000</pubDate><guid>https://svrooij.io/2021/01/13/teams-with-multiple-accounts/</guid><description>&lt;p&gt;We use Microsoft Teams a lot for communication, but once you start using it with multiple accounts you continuously have to switch accounts. That means logging out and signin back in with the other account.&lt;/p&gt;</description></item><item><title>Adding device support to zigbee2mqtt</title><link>https://svrooij.io/2020/12/31/new-device-for-zigbee2mqtt/</link><pubDate>Thu, 31 Dec 2020 00:00:00 +0000</pubDate><guid>https://svrooij.io/2020/12/31/new-device-for-zigbee2mqtt/</guid><description>&lt;p&gt;I&amp;rsquo;ve been using &lt;a href="https://www.zigbee2mqtt.io"&gt;zigbee2mqtt&lt;/a&gt; for years (for the people that don&amp;rsquo;t know zigbee2mqtt, it&amp;rsquo;s a great way to get rid of proprietary Zigbee hubs). At the moment I have 38 zigbee devices connected.&lt;/p&gt;</description></item><item><title>Github pages (Jekyll) live reload with docker</title><link>https://svrooij.io/2020/12/31/github-pages-live-reload/</link><pubDate>Thu, 31 Dec 2020 00:00:00 +0000</pubDate><guid>https://svrooij.io/2020/12/31/github-pages-live-reload/</guid><description>&lt;p&gt;I really like &lt;a href="https://pages.github.com/"&gt;Github Pages&lt;/a&gt; to host static webpages. Static in this case means the files are generated at build time (so once when you publish a new version), instead of every time like with a wordpress website. One of the main benefits is that it results in a blazing fast website.&lt;/p&gt;</description></item><item><title>Azure Functions serve static files</title><link>https://svrooij.io/2020/11/05/azure-functions-serve-static-files/</link><pubDate>Thu, 05 Nov 2020 00:00:00 +0000</pubDate><guid>https://svrooij.io/2020/11/05/azure-functions-serve-static-files/</guid><description>&lt;p&gt;Azure functions are great to quickly create an API. But did you know you can also host static files with it? Anthony Chu made a &lt;a href="https://anthonychu.ca/post/azure-functions-static-file-server/"&gt;great post&lt;/a&gt; about hosting static files in Azure Functions. His code is from March 9, 2017 however, and can be improved in the mean time.&lt;/p&gt;</description></item><item><title>Git extra author</title><link>https://svrooij.io/2020/07/31/add-extra-author/</link><pubDate>Fri, 31 Jul 2020 00:00:00 +0000</pubDate><guid>https://svrooij.io/2020/07/31/add-extra-author/</guid><description>&lt;p&gt;If someone else created some source code, but for whatever reason they aren&amp;rsquo;t the one adding it to the repository. You can still have their name/photo in the git commit.&lt;/p&gt;</description></item><item><title>Fork proof actions</title><link>https://svrooij.io/2020/07/08/fork-proof-actions/</link><pubDate>Wed, 08 Jul 2020 00:00:00 +0000</pubDate><guid>https://svrooij.io/2020/07/08/fork-proof-actions/</guid><description>&lt;p&gt;Github actions are a great tool to setup automatic build and tests. I also use it for any of my automatic releases. See &lt;a href="https://svrooij.nl/2020/06/automate-your-release-with-github-actions/"&gt;this&lt;/a&gt; post.
Until now there was one thing missing. If someone would fork the repository, all builds would fail because of missing secrets needed for the release.&lt;/p&gt;
&lt;p&gt;Yesterday I released my &lt;a href="https://github.com/svrooij/secret-gate-action"&gt;first github action&lt;/a&gt;, it allows you to check if certain secrets are set, and then decide to continue yourself. Or skip specific steps, this functionallity seemed to be missing from the actions marketplace. So now yoou can check the existens of certain secrets (or other inputs), and decide to either have the actioon run fail or just continue and skip some steps.&lt;/p&gt;</description></item><item><title>Query github sponsors with graphql</title><link>https://svrooij.io/2020/07/07/load-github-sponsors/</link><pubDate>Tue, 07 Jul 2020 00:00:00 +0000</pubDate><guid>https://svrooij.io/2020/07/07/load-github-sponsors/</guid><description>&lt;p&gt;Github exposes all their data at a &lt;a href="https://developer.github.com/v4/"&gt;GraphQL endpoint&lt;/a&gt;, that you can also try out with the &lt;a href="https://developer.github.com/v4/explorer/"&gt;Github GraphQL explorer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you want to query who is sponsoring you, use the following GraphQL. You can use this query at the explorer of in your own graphql client.&lt;/p&gt;</description></item><item><title>Wordpress plugin REST in peace</title><link>https://svrooij.io/2020/06/29/rest-in-peace/</link><pubDate>Mon, 29 Jun 2020 00:00:00 +0000</pubDate><guid>https://svrooij.io/2020/06/29/rest-in-peace/</guid><description>&lt;p&gt;In January 2017 I released a plugin for Wordpress called &lt;a href="https://wordpress.org/support/plugin/rest-api-filter-fields/"&gt;WP REST API - filter fields&lt;/a&gt; it had a somewhat limited reach (2000+ active installs according to the stats),
but people where using it. It was a plugin on the wordpress rest api (which was also a plugin at that time), it allowed the user to tell the server which fields from the api they wanted back. Because I wasn&amp;rsquo;t changing the api, I was only filtering the output (after everything was retrieved from the database), this didn&amp;rsquo;t make it much faster, but the resulting data to transfer was smaller (which was a big thing 4 years ago).&lt;/p&gt;</description></item><item><title>Daily rebuild github pages</title><link>https://svrooij.io/2020/06/27/rebuild-github-pages/</link><pubDate>Sat, 27 Jun 2020 00:00:00 +0000</pubDate><guid>https://svrooij.io/2020/06/27/rebuild-github-pages/</guid><description>&lt;p&gt;Today I switched to &lt;a href="https://github.com/github/personal-website"&gt;personal website&lt;/a&gt; for my new &lt;a href="https://static.svrooij.nl"&gt;personal page&lt;/a&gt; on Github.
It&amp;rsquo;s a pretty nice template to generate a &lt;strong&gt;static page&lt;/strong&gt; with the use of &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt;, at build time it loads some details from github (like my repositories).
This means that the page will only show the data of the last time it was build.&lt;/p&gt;</description></item><item><title>Automate your release with Github Actions</title><link>https://svrooij.io/2020/06/07/automate-release-github-actions/</link><pubDate>Sun, 07 Jun 2020 12:15:22 +0000</pubDate><guid>https://svrooij.io/2020/06/07/automate-release-github-actions/</guid><description>&lt;p&gt;I&amp;rsquo;ve got several node/typescript packages on my &lt;a href="https://github.com/svrooij/"&gt;Github page&lt;/a&gt;. And one of the struggles I faced when starting these, was the manual work needed to release a new version to npm and/or docker hub.&lt;/p&gt;</description></item><item><title>Smart energy meter</title><link>https://svrooij.io/2020/04/10/smart-energy-meter/</link><pubDate>Fri, 10 Apr 2020 11:33:12 +0000</pubDate><guid>https://svrooij.io/2020/04/10/smart-energy-meter/</guid><description>&lt;p&gt;A lot of people in the Netherlands have a smartenergy meter. They send the total usage to the power network provider on a regular interval. But is also has a port that can be used to monitor the usage yourself, and this can be really interesting.&lt;/p&gt;</description></item><item><title>Quickly connect to Exchange online powershell</title><link>https://svrooij.io/2020/04/08/quickly-connect-to-exchange-online-powershell/</link><pubDate>Wed, 08 Apr 2020 09:51:06 +0000</pubDate><guid>https://svrooij.io/2020/04/08/quickly-connect-to-exchange-online-powershell/</guid><description>&lt;p&gt;Microsoft is making it really easy to manage your Exchange Online environment from every device. You&amp;rsquo;ll need an active Azure subscription and be an Exchange Online admin though.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the online shell &lt;a rel="noreferrer noopener" aria-label="https://shell.azure.com (opens in a new tab)" href="https://shell.azure.com" target="_blank"&gt;&lt;a href="https://shell.azure.com"&gt;https://shell.azure.com&lt;/a&gt;&lt;/a&gt; and pick powershell.&lt;/li&gt;
&lt;li&gt;Typ &lt;strong&gt;Connect-EXOPSSession&lt;/strong&gt; and press enter&lt;/li&gt;
&lt;li&gt;Wait a little bit for it to connect&lt;/li&gt;
&lt;li&gt;Use all the &lt;a rel="noreferrer noopener" aria-label="supported (opens in a new tab)" href="https://docs.microsoft.com/en-us/powershell/exchange/exchange-online/exchange-online-powershell-v2/exchange-online-powershell-v2?view=exchange-ps&amp;wt.mc_id=SEC-MVP-5004985" target="_blank"&gt;supported&lt;/a&gt; commands.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Professioneel online presenteren</title><link>https://svrooij.io/2020/04/07/professioneel-online-presenteren/</link><pubDate>Tue, 07 Apr 2020 15:37:47 +0000</pubDate><guid>https://svrooij.io/2020/04/07/professioneel-online-presenteren/</guid><description>&lt;p&gt;Iedereen is steeds meer online aan het communiceren op dit moment, dat is heel begrijpelijk in de huidige situatie. Hier zal ik in het kort proberen uit te leggen hoe je redelijk eenvoudig een professionele presentatie kan geven.&lt;figure class="wp-block-gallery columns-2 is-cropped"&gt;&lt;/p&gt;</description></item><item><title>Expose home automation from the internet</title><link>https://svrooij.io/2020/01/22/expose-home-automation-from-the-internet/</link><pubDate>Wed, 22 Jan 2020 19:28:09 +0000</pubDate><guid>https://svrooij.io/2020/01/22/expose-home-automation-from-the-internet/</guid><description>&lt;p&gt;I&amp;rsquo;ve got a lot of home automation devices in my house, most of them are controllable while I&amp;rsquo;m on my local (wifi) network. The web interfaces are in various security levels, ranging from no security to password security.&lt;/p&gt;</description></item><item><title>Sonos goodness</title><link>https://svrooij.io/2019/12/28/sonos-goodness/</link><pubDate>Sat, 28 Dec 2019 22:42:11 +0000</pubDate><guid>https://svrooij.io/2019/12/28/sonos-goodness/</guid><description>&lt;p&gt;I&amp;rsquo;m a big fan of the sonos devices, but I&amp;rsquo;m not a big fan of the Sonos app (mac/windows/android/ios), it just isn&amp;rsquo;t that good. At least the following points should be fixed before I would consider changing my mind:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Android/iOS -&amp;gt; Alarm settings are hidden to far in the application. (two clicks, a long scroll and another click).&lt;/li&gt;
&lt;li&gt;Slowly startup, they do device discovery even though all my speakers have a semi-static (dhcp reservation) ip.&lt;/li&gt;
&lt;li&gt;The playbar should rejoin the previous group after watching tv.&lt;/li&gt;
&lt;li&gt;Memory usage on mac&lt;/li&gt;
&lt;li&gt;No integration with other systems&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Developing a typescript library</title><link>https://svrooij.io/2019/12/28/developing-a-typescript-library/</link><pubDate>Sat, 28 Dec 2019 21:56:08 +0000</pubDate><guid>https://svrooij.io/2019/12/28/developing-a-typescript-library/</guid><description>&lt;p&gt;I&amp;rsquo;ve been building node libraries for home automation purposes for a while now, see my &lt;a href="https://github.com/svrooij/"&gt;repositories&lt;/a&gt;. I decided that it was time to try out the strong-type goodness you get when using &lt;a href="https://www.typescriptlang.org/"&gt;Typescript&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Interesting dotnet blogs</title><link>https://svrooij.io/2019/12/28/interesting-dotnet-blogs/</link><pubDate>Sat, 28 Dec 2019 20:38:24 +0000</pubDate><guid>https://svrooij.io/2019/12/28/interesting-dotnet-blogs/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a rel="noreferrer noopener" aria-label="Andrew Lock (opens in a new tab)" href="https://andrewlock.net/" target="_blank"&gt;Andrew Lock&lt;/a&gt; – Dependency injection, dotnet core, amazon.&lt;/li&gt;
&lt;li&gt;&lt;a rel="noreferrer noopener" aria-label="Scott Hanselman (opens in a new tab)" href="https://www.hanselman.com/blog/" target="_blank"&gt;Scott Hanselman&lt;/a&gt; – dotnet core stuff, diy hacks&lt;/li&gt;
&lt;li&gt;&lt;a rel="noreferrer noopener" aria-label="Scott Brady (opens in a new tab)" href="https://www.scottbrady91.com/" target="_blank"&gt;Scott Brady&lt;/a&gt; – Identity server, security in general&lt;/li&gt;
&lt;li&gt;&lt;a rel="noreferrer noopener" aria-label="Damien Bod (opens in a new tab)" href="https://damienbod.com/aspnetcore/" target="_blank"&gt;Damien Bod&lt;/a&gt; – mainly Dotnet security/indentity&lt;/li&gt;
&lt;li&gt;&lt;a rel="noreferrer noopener" aria-label="Rick Strahl's Web log (opens in a new tab)" href="https://weblog.west-wind.com/" target="_blank"&gt;Rick Strahl&amp;rsquo;s Web log&lt;/a&gt; – Angular and dotnet core&lt;/li&gt;
&lt;li&gt;&lt;a rel="noreferrer noopener" aria-label="Steve Gordon (opens in a new tab)" href="https://www.stevejgordon.co.uk/" target="_blank"&gt;Steve Gordon&lt;/a&gt; – HttpClient, new dotnet core features.&lt;/li&gt;
&lt;li&gt;&lt;a rel="noreferrer noopener" aria-label="Brock Allen (opens in a new tab)" href="https://brockallen.com/" target="_blank"&gt;Brock Allen&lt;/a&gt; – Identity management&lt;/li&gt;
&lt;li&gt;&lt;a rel="noreferrer noopener" aria-label="Visual studio geeks (opens in a new tab)" href="https://www.visualstudiogeeks.com/" target="_blank"&gt;Visual studio geeks&lt;/a&gt; – Azure devops&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Install wordpress server site</title><link>https://svrooij.io/2019/08/22/install-wordpress-server-site/</link><pubDate>Thu, 22 Aug 2019 16:01:16 +0000</pubDate><guid>https://svrooij.io/2019/08/22/install-wordpress-server-site/</guid><description>&lt;p&gt;You can install wordpress by using FTP, but sometimes it&amp;rsquo;s much quicker to do it server site. Basic linux knowledge is needed!. First SSH into the server.&lt;/p&gt;</description></item><item><title>Cache-aside in dotnet core</title><link>https://svrooij.io/2019/04/30/cache-aside-in-dotnet-core/</link><pubDate>Tue, 30 Apr 2019 23:37:59 +0000</pubDate><guid>https://svrooij.io/2019/04/30/cache-aside-in-dotnet-core/</guid><description>&lt;p&gt;A really nice way to improve performance in any web application is to using caching. This is also true for dotnet core. The &lt;a rel="noreferrer noopener" aria-label="Cache-aside (opens in a new tab)" href="https://docs.microsoft.com/nl-nl/azure/architecture/patterns/cache-aside?wt.mc_id=SEC-MVP-5004985" target="_blank"&gt;Cache-aside&lt;/a&gt; pattern is a best described as. Let&amp;rsquo;s check the cache if we got the required result, if we got this item cached return that. If we don&amp;rsquo;t have it in cache, get it from the data store and save it for next time.&lt;/p&gt;
&lt;p&gt;In dotnet core you can use both &lt;a href="https://www.nuget.org/packages/Microsoft.Extensions.Caching.Memory/"&gt;Microsoft.Extentions.Caching.Memory&lt;/a&gt; or some &lt;a href="https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed?view=aspnetcore-2.2&amp;amp;wt.mc_id=SEC-MVP-5004985"&gt;Distributed Cache&lt;/a&gt;. Choose either one because you&amp;rsquo;re going to use it down the line.&lt;/p&gt;</description></item><item><title>JWT: Part 3 &amp;#8211; Sign your own</title><link>https://svrooij.io/2019/03/29/jwt-part-3-sign-your-own/</link><pubDate>Fri, 29 Mar 2019 17:26:29 +0000</pubDate><guid>https://svrooij.io/2019/03/29/jwt-part-3-sign-your-own/</guid><description>&lt;p&gt;This is part of my JSON Web Token series. This time to show you how to create your own JWTs in dotnet core. Small note, creating your own token server isn&amp;rsquo;t something I would recommend! If you need your own token (identity/login/openid connect) server, have a look at &lt;a rel="noreferrer noopener" aria-label="Identity Server (opens in a new tab)" href="http://docs.identityserver.io/en/latest/index.html" target="_blank"&gt;Identity Server&lt;/a&gt; and the Identity server with Asp.net Identity &lt;a rel="noreferrer noopener" aria-label="quickstart (opens in a new tab)" href="http://docs.identityserver.io/en/latest/quickstarts/8_aspnet_identity.html" target="_blank"&gt;quickstart&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>JWT: Part 2 &amp;#8211; In the wild</title><link>https://svrooij.io/2019/03/26/jwt-part-2-in-the-wild/</link><pubDate>Tue, 26 Mar 2019 10:00:28 +0000</pubDate><guid>https://svrooij.io/2019/03/26/jwt-part-2-in-the-wild/</guid><description>&lt;p&gt;JSON Web Tokens are used everywhere. Microsoft uses them as access tokens for their entire Authentication platform and their Graph API. Google uses them in their applications both in the Login with Google system and in their apis.&lt;/p&gt;</description></item><item><title>JWT: Part 1 &amp;#8211; Introduction</title><link>https://svrooij.io/2019/03/25/jwt-introduction/</link><pubDate>Mon, 25 Mar 2019 22:03:28 +0000</pubDate><guid>https://svrooij.io/2019/03/25/jwt-introduction/</guid><description>&lt;p&gt;What exactly is a &lt;strong&gt;Json Web Token?&lt;/strong&gt; I like to describe them as an easy way to digitally sign some json data about a user, that can then be used as an access token for some kind of api. Check out &lt;a rel="noreferrer noopener" aria-label="JSON Web Token (opens in a new tab)" href="https://en.wikipedia.org/wiki/JSON_Web_Token" target="_blank"&gt;JSON Web Token&lt;/a&gt; on wikepedia for an exact description.&lt;/p&gt;
&lt;p&gt;I really like JWTs because they are verifiable without an additional call to some identity server. They are short-lived by default (at least should be). And it is the best option for access tokens at the moment.&lt;/p&gt;</description></item><item><title>Generate X509Certificate2 in C#</title><link>https://svrooij.io/2018/04/18/generate-x509certificate2-in-csharp/</link><pubDate>Wed, 18 Apr 2018 13:05:45 +0000</pubDate><guid>https://svrooij.io/2018/04/18/generate-x509certificate2-in-csharp/</guid><description>&lt;p&gt;Sometimes you just need a &lt;strong&gt;X509Certificate2&lt;/strong&gt; in your C# code. For authenticating to an external webservice for instance.&lt;/p&gt;
&lt;p&gt;This will show you how to create such a certificate right from your C# code. By the way you&amp;rsquo;ll need the &lt;a href="https://www.nuget.org/packages/BouncyCastle/" target="_blank" rel="noopener noreferrer"&gt;Bouncy castle&lt;/a&gt; or &lt;a href="https://www.nuget.org/packages/BouncyCastle.NetCore/" target="_blank" rel="noopener noreferrer"&gt;Bouncy castle core&lt;/a&gt; library&lt;/p&gt;</description></item><item><title>Visual studio geeks</title><link>https://svrooij.io/2018/04/11/visual-studio-geeks/</link><pubDate>Wed, 11 Apr 2018 22:01:06 +0000</pubDate><guid>https://svrooij.io/2018/04/11/visual-studio-geeks/</guid><description>&lt;p&gt;I just found a really cool article about using deployment gates in VSTS, that use Azure functions to check Github issues.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.visualstudiogeeks.com/DevOps/github-issues-as-deployment-gate-in-vsts-rm"&gt;Visual studio geeks - Check it out&lt;/a&gt;&lt;/p&gt;</description></item><item><title>XS4All glasvezel met eigen router</title><link>https://svrooij.io/2017/08/04/xs4all-glasvezel-met-eigen-router/</link><pubDate>Fri, 04 Aug 2017 13:46:58 +0000</pubDate><guid>https://svrooij.io/2017/08/04/xs4all-glasvezel-met-eigen-router/</guid><description>&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: XS4ALL drukt de laatste tijd zijn routed IPTV bij iedereen door de strot. Deze handleiding ging over bridged IPTV, dat is niet meer mogelijk. De reacties zijn daarom ook gesloten.&lt;/p&gt;
&lt;p&gt;Standaard krijg je bij XS4All glasvezel tegenwoordig een &lt;a href="https://nl.hardware.info/product/358976/avm-fritzbox-5490/specificaties" target="_blank" rel="noopener noreferrer"&gt;Fritz!Box 5490&lt;/a&gt;. Dit is een consumenten router met een rechtstreekse glasvezel aansluiting. Vanuit XS4All gezien een slimme keuze, want dat scheelt een kastje in de meterkast dat ook kapot kan gaan.&lt;/p&gt;
&lt;p&gt;Maar er zijn ook andere mogelijkheden, met een beetje technische kennis en wat extra apparatuur is het ook mogelijk om gewoon je oude router te blijven gebruiken. En nog steeds TV te kunnen kijken.&lt;/p&gt;</description></item><item><title>Angular2 CLI with ASP.NET Core</title><link>https://svrooij.io/2017/05/16/angular2-cli-with-asp-net-core/</link><pubDate>Tue, 16 May 2017 12:47:50 +0000</pubDate><guid>https://svrooij.io/2017/05/16/angular2-cli-with-asp-net-core/</guid><description>&lt;p&gt;If you&amp;rsquo;re creating a new Angular2 application, you definitely want to use the &lt;a href="https://cli.angular.io" target="_blank" rel="noopener noreferrer"&gt;Angular2 CLI&lt;/a&gt;. It help you setup a new Angular application. It has a build-in development server and it will generate &lt;strong&gt;Components&lt;/strong&gt; for you. This means less typing (isn&amp;rsquo;t that always better?).&lt;/p&gt;</description></item><item><title>Review: FactuurSturen.nl</title><link>https://svrooij.io/2017/01/18/review-factuursturen-nl/</link><pubDate>Wed, 18 Jan 2017 20:33:43 +0000</pubDate><guid>https://svrooij.io/2017/01/18/review-factuursturen-nl/</guid><description>&lt;p&gt;Ik vind het leuk om opdrachten voor bedrijven te doen vanuit mijn bedrijf &lt;a href="https://smartersoft.nl"&gt;Smartersoft&lt;/a&gt;, maar ik heb een hekel aan administratie. Het gevolg, mijn administratie is een beetje een zooi en daardoor kost het elke keer meer tijd dan er eigenlijk voor nodig is.&lt;/p&gt;
&lt;p&gt;Ik heb afgelopen jaar Invoice2Go gebruikt, maar deze website is niet zo goed bevallen omdat ik daarnaast ook nog los iets moest bijhouden voor de inkomende facturen. Vanaf dit jaar gebruikt ik &lt;a href="https://www.factuursturen.nl/?a=3023" target="_blank" rel="noopener noreferrer"&gt;FactuurSturen.nl&lt;/a&gt; en ik ben tot nu toe erg enthousiast.&lt;/p&gt;</description></item><item><title>Getting started with Angular2 and .NET core</title><link>https://svrooij.io/2017/01/10/getting-started-with-angular2-and-net-core/</link><pubDate>Tue, 10 Jan 2017 15:23:43 +0000</pubDate><guid>https://svrooij.io/2017/01/10/getting-started-with-angular2-and-net-core/</guid><description>&lt;p&gt;I&amp;rsquo;ve found a few nice articles to get you started with Angular 2 and .NET core. Normally it would be somewhat of a hassle to get started, but this should provide you with some working samples.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://jonhilton.net/2016/12/01/fast-track-your-angular-2-and-net-core-web-app-development/" target="_blank"&gt;Fast track your Angular 2 and .NET Core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jonhilton.net/2016/12/13/angular-2-and-net-core-your-first-component/" target="_blank"&gt;Angular 2 and .NET Core – your first component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jonhilton.net/2017/01/03/angular-2-and-net-core-route-to-an-angular-component/" target="_blank"&gt;Angular 2 and .NET Core – route directly to your components&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is a series of posts by Jon Hilton and uses the &lt;a href="https://marketplace.visualstudio.com/items?itemName=MadsKristensen.ASPNETCoreTemplatePack"&gt;ASP.NET Core Template Pack&lt;/a&gt; to get started.&lt;/p&gt;</description></item><item><title>Youtube link to Embed code</title><link>https://svrooij.io/2016/12/29/youtube-link-to-embed-code/</link><pubDate>Thu, 29 Dec 2016 01:04:50 +0000</pubDate><guid>https://svrooij.io/2016/12/29/youtube-link-to-embed-code/</guid><description>&lt;p&gt;Allowing users of your website to include a video into a message, can be done in two ways.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You instruct all the users to go to the video page, find the embed code, let them upload html to your website and displaying the raw html to all users.&lt;/li&gt;
&lt;li&gt;You tell them to paste the link to the youtube page, and your website generates the embed code right from that link.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>CreatedAt property with Entity framework</title><link>https://svrooij.io/2016/06/15/entity-framework-auto-timestamp/</link><pubDate>Wed, 15 Jun 2016 14:13:48 +0000</pubDate><guid>https://svrooij.io/2016/06/15/entity-framework-auto-timestamp/</guid><description>&lt;p&gt;You&amp;rsquo;re building a new application, and you&amp;rsquo;re using Entity Framework Code First. Probably all your entities need an &lt;strong&gt;Id&lt;/strong&gt; and &lt;strong&gt;CreatedAt/UpdatedAt&lt;/strong&gt; property.&lt;/p&gt;
&lt;p&gt;The sample below shows you how to define these properties in a base class, and (more importantly) how to set them correctly on every save, without setting them manually on every place where you&amp;rsquo;re changing things.&lt;/p&gt;</description></item><item><title>WordPress just got even better!</title><link>https://svrooij.io/2015/12/09/wordpress-just-got-even-better/</link><pubDate>Wed, 09 Dec 2015 23:47:48 +0000</pubDate><guid>https://svrooij.io/2015/12/09/wordpress-just-got-even-better/</guid><description>&lt;p&gt;Yesterday &lt;strong&gt;WordPress 4.4&lt;/strong&gt; was released, with this version they improved this product even more.&lt;/p&gt;
&lt;p&gt;The most notable new features are, support for &lt;strong&gt;oEmbed&lt;/strong&gt; and an integrated &lt;strong&gt;REST API&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;What is &lt;strong&gt;oEmbed&lt;/strong&gt; and why is this a new amazing feature? oEmbed is a specification for embedding content from an other website right inside the consuming website. This enables (for instance) Twitter to display the excerpt of a post instead of just a link to your wordpress website. This specification is originally design by (members of) Flicr, but with the wordpress implementation the adoption will get even bigger.&lt;/p&gt;</description></item><item><title>Hosting a wordpress plugin on Github</title><link>https://svrooij.io/2015/10/29/wordpress-plugin-on-github/</link><pubDate>Thu, 29 Oct 2015 13:04:59 +0000</pubDate><guid>https://svrooij.io/2015/10/29/wordpress-plugin-on-github/</guid><description>&lt;p&gt;Someone at &lt;a href="http://wordpress.org" target="_blank"&gt;WordPress&lt;/a&gt; decided that if you want to create a plugin for WordPress, you&amp;rsquo;ll have to host it at their SVN server. Personally I&amp;rsquo;m not a big fan of SVN, I&amp;rsquo;m more a GIT person.&lt;/p&gt;
&lt;p&gt;Lucky for me, it appears I&amp;rsquo;m not the only one. So for my latest WordPress plugin (&lt;a href="https://wordpress.org/plugins/rest-api-filter-fields/" target="_blank"&gt;REST API – Filter Fields&lt;/a&gt;) I used &lt;a href="https://github.com/svrooij/rest-api-filter-fields/" target="_blank"&gt;Github&lt;/a&gt;. Then I came to a few problems that had to be solved.&lt;/p&gt;</description></item><item><title>Filter the fields returned by the wordpress api</title><link>https://svrooij.io/2015/10/29/filter-fields-returned-by-wordpress-api/</link><pubDate>Thu, 29 Oct 2015 12:22:08 +0000</pubDate><guid>https://svrooij.io/2015/10/29/filter-fields-returned-by-wordpress-api/</guid><description>&lt;p&gt;&lt;a href="http://wordpress.org" target="_blank"&gt;WordPress&lt;/a&gt; is a great platform for running a website with a content management system behind it. Around a year ago the released a plugin called &lt;a href="https://wordpress.org/plugins/rest-api/" target="_blank"&gt;WordPress REST API&lt;/a&gt;. And this is a really nice addition to WordPress. This plugin enables you to retrieve all the posts/comments/terms in a really easy JSON format.&lt;/p&gt;</description></item><item><title>Mooie aanbieding of misleiding?</title><link>https://svrooij.io/2015/10/21/mooie-aanbieding-of-misleiding/</link><pubDate>Wed, 21 Oct 2015 13:03:30 +0000</pubDate><guid>https://svrooij.io/2015/10/21/mooie-aanbieding-of-misleiding/</guid><description>&lt;p&gt;Op advies van mijn moeder heb ik mijzelf laatst aangemeld voor een &lt;strong&gt;proefabonnement&lt;/strong&gt; voor de &lt;a href="http://volkskrant.nl" target="_blank"&gt;Volkskrant&lt;/a&gt;. Bij het aanmelden stond al een opmerkelijk &lt;em&gt;Ik accepteer vinkje&lt;/em&gt;, namelijk:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ik ga akkoord met de voorwaarden en ontvang per e-mail, sms en telefoon exclusieve abonnee- en kortingsaanbiedingen.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maar ik wil toch wel eens proberen of deze krant iets voor mij is, dus ik heb het gewoon aangevinkt (zonder overigens de rest van de &lt;code&gt;voorwaarden&lt;/code&gt; te lezen).&lt;/p&gt;</description></item><item><title>Shutdown your mac with the keyboard</title><link>https://svrooij.io/2015/05/01/shutdown-your-mac-with-keyboard/</link><pubDate>Fri, 01 May 2015 21:34:20 +0000</pubDate><guid>https://svrooij.io/2015/05/01/shutdown-your-mac-with-keyboard/</guid><description>&lt;p&gt;With my Windows computer I could control the power button action.&lt;/p&gt;
&lt;p&gt;I was a bit disappointed that you cannot control this action on a Mac. But now I found out that there is a keyboard shortcut to instantly shutdown your mac.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CMD&lt;/code&gt; + &lt;code&gt;alt&lt;/code&gt; + &lt;code&gt;ctrl&lt;/code&gt; + &lt;code&gt;Power button&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I know it is a horrible shortcut, but it works!!&lt;/p&gt;</description></item><item><title>WordPress mail with Gmail</title><link>https://svrooij.io/2015/05/01/wordpress-mail-with-gmail/</link><pubDate>Fri, 01 May 2015 19:38:09 +0000</pubDate><guid>https://svrooij.io/2015/05/01/wordpress-mail-with-gmail/</guid><description>&lt;p&gt;At some point you would like your wordpress website to be able to send email. You&amp;rsquo;ll need it for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Password recovery&lt;/li&gt;
&lt;li&gt;&lt;code&gt;New User&lt;/code&gt; notifications&lt;/li&gt;
&lt;li&gt;Contact forms&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Homescreen application</title><link>https://svrooij.io/2015/04/26/homescreen-application/</link><pubDate>Sun, 26 Apr 2015 10:42:48 +0000</pubDate><guid>https://svrooij.io/2015/04/26/homescreen-application/</guid><description>&lt;p&gt;It is quitte easy to create a mobile website. With these tweaks it will look even more like a real application.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll just have to append some items to the html source code.&lt;/p&gt;</description></item><item><title>Resolve exchange alias to SMTP address</title><link>https://svrooij.io/2015/04/04/resolve-exchange-alias-to-smtp-address/</link><pubDate>Sat, 04 Apr 2015 13:16:52 +0000</pubDate><guid>https://svrooij.io/2015/04/04/resolve-exchange-alias-to-smtp-address/</guid><description>&lt;p&gt;When working with Exchange, you&amp;rsquo;ll sometimes need the primary address and not some kind of alias. This snippet helps you with that.&lt;/p&gt;</description></item><item><title>Why most C# apps lack https security</title><link>https://svrooij.io/2015/04/04/c-sharp-apps-lack-https-security/</link><pubDate>Sat, 04 Apr 2015 13:10:35 +0000</pubDate><guid>https://svrooij.io/2015/04/04/c-sharp-apps-lack-https-security/</guid><description>&lt;p&gt;A lot of apps build in C# (or probably any other language) lack the basic protection against &lt;strong&gt;&lt;a title="Wikipedia Man-in-the-middle attack" href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack" target="_blank"&gt;Man-in-the-middle-attacks&lt;/a&gt;&lt;/strong&gt;. One of the reasons I could find for this is because of the following.&lt;/p&gt;</description></item><item><title>Block certain facebook apps?</title><link>https://svrooij.io/2013/04/04/block-certain-facebook-apps/</link><pubDate>Thu, 04 Apr 2013 12:44:54 +0000</pubDate><guid>https://svrooij.io/2013/04/04/block-certain-facebook-apps/</guid><description>&lt;p&gt;Don&amp;rsquo;t you hate those games that keep appearing on your facebook timelime or in the notifications? Facebook has a feature to totally block an app.&lt;/p&gt;
&lt;h2 id="block-annoying-facebook-apps"&gt;&lt;a href="https://www.facebook.com/settings?tab=blocking"&gt;Block (annoying) facebook apps&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The apps I blocked are most of the apps containing &lt;code&gt;*ville&lt;/code&gt; or &lt;code&gt;*sage&lt;/code&gt; or &lt;code&gt;*bash&lt;/code&gt;. They also have a nice search function. Just type one of these words and click the most used ones.&lt;/p&gt;</description></item><item><title>Github extra author</title><link>https://svrooij.io/github-info/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://svrooij.io/github-info/</guid><description>&lt;p&gt;Sometimes you just want to include someone as a co-contributor of a certain commit. You can do this, but you'll need their personal (possibly hidden) mail address.&lt;/p&gt;
&lt;p&gt;Luckily for us Github also creates a secret no-reply email for each user.&lt;/p&gt;
&lt;h2&gt;Find co-contributor string by Github user&lt;/h2&gt;
&lt;input type="text" id="github_username" placeholder="Github username" onkeyup="keyPressed(event);"/&gt;
&lt;button onclick="loadUserInfo();"&gt;Search&lt;/button&gt;
&lt;hr /&gt;
&lt;div id="info" style="display: none;"&gt;
 &lt;h3&gt;Co-authored-by&lt;/h3&gt;
 &lt;pre id="co-authored-by"&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="https://svrooij.io/assets/jquery-3.5.1.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;


function keyPressed(e) {
 if (e.keyCode === 13) {
 e.preventDefault();
 loadUserInfo();
 }
}

function loadUserInfo() {
 const username = $('#github_username').val();
 $.getJSON(`https://api.github.com/users/${username}?callback=?`, {}, (resp) =&gt; {
 const u = resp.data;
 $('#info').show();
 $('#co-authored-by').text(`Co-authored-by: ${u.name} &lt;${u.id}+${u.login}@users.noreply.github.com&gt;`);
 console.log(resp.data);
 });
}
&lt;/script&gt;</description></item></channel></rss>