I’ve always wanted to play around with Menu Bar apps, so I decided to make an easy to access retro calculator in SwiftUI.
Over the past few months our team at Clemson worked with TigerOne, our card services department, and Apple to successfully bring mobile ID provisioning to campus. We were the first school to integrate this functionality into our own app, my.Clemson, and that integration correlated with the success we saw on launch day – around 4500 students, faculty, and staff were able to add their TigerOne Mobile ID to their phone and Watch. These are record numbers to date. 🎉
There were a lot of unknowns when we started the project, one being that we’d never integrated Duo (the University’s two factor system) with a native client. It made sense to reuse the embedded web version so we didn’t have to reinvent the wheel, but we weren’t sure of how to combine this with our current method of authentication via SwiftECP, whose goal is to avoid the browser!
We ended up with a pretty slick solution. After configuring the IdP to allow a Duo flow from a client that authenticated ECP, it worked like this:
- Authenticate via ECP
- Try to load the resource that’s protected by Shibboleth + MFA
- If the resource needs MFA authentication, show it in a WKWebView and use the navigationDelegate methods to determine when the user has responded
- Finally, inject the cookies provided by the Duo flow back into the native client so that it could be used for subsequent requests with a URLSession
The Rover got its own iOS app and I implemented a neat way to control the camera servos.
I made public tonight a repo I’ve had for a while that contains BeamNG experiments.
I was looking for a way to segment some IoT devices from my main network and disable their network connections on demand programmatically. The Guest Network feature on the router does a good job of segmenting the network, so I wanted a way to turn the guest network’s interface off and on based upon conditions.
Example scenario: You have cloud-based IoT cameras and want to cease all traffic when you’re home.
This puts toggling any interface on the router behind an HTTP endpoint. Since an interface is created when a guest network is enabled, we can now enable and disable that network whenever we want.