diff --git a/src/Nullinside.Api.TwitchBot/Constants.cs b/src/Nullinside.Api.TwitchBot/Constants.cs
index 1fc7d36..98bb716 100644
--- a/src/Nullinside.Api.TwitchBot/Constants.cs
+++ b/src/Nullinside.Api.TwitchBot/Constants.cs
@@ -18,6 +18,11 @@ public static class Constants {
/// The twitch id for the bot account.
///
public const string BOT_ID = "640082552";
+
+ ///
+ /// The amount of time a token is valid for.
+ ///
+ public static readonly TimeSpan OAUTH_TOKEN_TIME_LIMIT = TimeSpan.FromHours(1);
// TODO: This should be dynamic but I need to find a source of "good bots" lists. Might have to cheap out and just do a database table with data entry. Let users of the bot submit suggestions that we approve manually.
///
diff --git a/src/Nullinside.Api.TwitchBot/Controllers/LoginController.cs b/src/Nullinside.Api.TwitchBot/Controllers/LoginController.cs
index 79150e5..7b20184 100644
--- a/src/Nullinside.Api.TwitchBot/Controllers/LoginController.cs
+++ b/src/Nullinside.Api.TwitchBot/Controllers/LoginController.cs
@@ -1,8 +1,12 @@
+using System.Text;
+
using log4net;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
+using Newtonsoft.Json;
+
using Nullinside.Api.Common.Twitch;
using Nullinside.Api.Common.Twitch.Support;
using Nullinside.Api.Model;
@@ -75,12 +79,13 @@ public async Task TwitchLogin([FromQuery] string code, [FromServi
return Redirect($"{siteUrl}/twitch/bot/config?error={TwitchBotLoginErrors.INTERNAL_ERROR}");
}
- string? bearerToken = await UserHelpers.GenerateTokenAndSaveToDatabase(_dbContext, email, token, api.OAuth?.AccessToken,
- api.OAuth?.RefreshToken, api.OAuth?.ExpiresUtc, user.Login, user.Id).ConfigureAwait(false);
- if (string.IsNullOrWhiteSpace(bearerToken)) {
+ var bearerToken = await UserHelpers.GenerateTokenAndSaveToDatabase(_dbContext, email, Constants.OAUTH_TOKEN_TIME_LIMIT, api.OAuth?.AccessToken,
+ api.OAuth?.RefreshToken, api.OAuth?.ExpiresUtc, user.Login, user.Id, token).ConfigureAwait(false);
+ if (null == bearerToken) {
return Redirect($"{siteUrl}/twitch/bot/config?error={TwitchBotLoginErrors.INTERNAL_ERROR}");
}
- return Redirect($"{siteUrl}/twitch/bot/config?token={bearerToken}");
+ var json = JsonConvert.SerializeObject(bearerToken);
+ return Redirect($"{siteUrl}/twitch/bot/config?token={Convert.ToBase64String(Encoding.UTF8.GetBytes(json))}");
}
}
\ No newline at end of file
diff --git a/src/Nullinside.Api.TwitchBot/Model/NullinsideContextExtensions.cs b/src/Nullinside.Api.TwitchBot/Model/NullinsideContextExtensions.cs
index ed58919..d95a4c1 100644
--- a/src/Nullinside.Api.TwitchBot/Model/NullinsideContextExtensions.cs
+++ b/src/Nullinside.Api.TwitchBot/Model/NullinsideContextExtensions.cs
@@ -7,6 +7,7 @@
using Microsoft.EntityFrameworkCore.Storage;
using Nullinside.Api.Common;
+using Nullinside.Api.Common.Auth;
using Nullinside.Api.Common.Twitch;
using Nullinside.Api.Model;
using Nullinside.Api.Model.Ddl;
@@ -34,7 +35,7 @@ public static class NullinsideContextExtensions {
/// The twitch api object currently in use.
/// The twitch api.
public static void Configure(this ITwitchApiProxy api, User user) {
- api.OAuth = new TwitchAccessToken {
+ api.OAuth = new OAuthToken {
AccessToken = user.TwitchToken,
RefreshToken = user.TwitchRefreshToken,
ExpiresUtc = user.TwitchTokenExpiration
@@ -89,7 +90,7 @@ public static void Configure(this ITwitchApiProxy api, User user) {
}
// Refresh the token with the Twitch API.
- TwitchAccessToken? newToken = await api.RefreshAccessToken(stoppingToken).ConfigureAwait(false);
+ OAuthToken? newToken = await api.RefreshAccessToken(stoppingToken).ConfigureAwait(false);
if (null == newToken) {
return null;
}
@@ -122,7 +123,7 @@ public static void Configure(this ITwitchApiProxy api, User user) {
/// The stopping token.
/// The number of state entries written to the database.
private static async Task UpdateOAuthInDatabase(this INullinsideContext db, int userId,
- TwitchAccessToken oAuth, CancellationToken stoppingToken = new()) {
+ OAuthToken oAuth, CancellationToken stoppingToken = new()) {
User? row = await db.Users.FirstOrDefaultAsync(u => u.Id == userId && !u.IsBanned, stoppingToken).ConfigureAwait(false);
if (null == row) {
return -1;
diff --git a/src/nullinside-api b/src/nullinside-api
index 76a3c69..a078ee9 160000
--- a/src/nullinside-api
+++ b/src/nullinside-api
@@ -1 +1 @@
-Subproject commit 76a3c6984cea20bf75ea6814f342ab2403cff20a
+Subproject commit a078ee91467f84f13d9ae9341e2aee698fd78dfe