Files
promiscuity/microservices/AuthApi/Services/SteamAuthTransactionService.cs
T
admin cde0e28e44
Deploy Promiscuity Auth API / deploy (push) Failing after 20s
Deploy Promiscuity Character API / deploy (push) Failing after 19s
Deploy Promiscuity Crafting API / deploy (push) Failing after 20s
Deploy Promiscuity Inventory API / deploy (push) Failing after 19s
Deploy Promiscuity Locations API / deploy (push) Failing after 19s
Deploy Promiscuity Mail API / deploy (push) Failing after 20s
Deploy Promiscuity World API / deploy (push) Failing after 20s
k8s smoke test / test (push) Failing after 20s
Add Steam OpenID authentication
2026-07-20 00:30:06 -05:00

50 lines
2.4 KiB
C#

using AuthApi.Models;
using MongoDB.Driver;
namespace AuthApi.Services;
public class SteamAuthTransactionService
{
private readonly IMongoCollection<SteamAuthTransaction> _transactions;
public SteamAuthTransactionService(IConfiguration cfg)
{
var connectionString = cfg["MongoDB:ConnectionString"] ?? "mongodb://127.0.0.1:27017";
var databaseName = cfg["MongoDB:DatabaseName"] ?? "GameDb";
var database = new MongoClient(connectionString).GetDatabase(databaseName);
_transactions = database.GetCollection<SteamAuthTransaction>("SteamAuthTransactions");
var ttl = Builders<SteamAuthTransaction>.IndexKeys.Ascending(x => x.ExpiresUtc);
_transactions.Indexes.CreateOne(new CreateIndexModel<SteamAuthTransaction>(ttl,
new CreateIndexOptions { ExpireAfter = TimeSpan.Zero }));
}
public Task CreateAsync(SteamAuthTransaction transaction) => _transactions.InsertOneAsync(transaction);
public async Task<SteamAuthTransaction?> GetAsync(string id) =>
await _transactions.Find(x => x.Id == id).FirstOrDefaultAsync();
public async Task<bool> MarkVerifiedAsync(string id, string steamId, string status, string? userId)
{
var filter = Builders<SteamAuthTransaction>.Filter.Eq(x => x.Id, id) &
Builders<SteamAuthTransaction>.Filter.Eq(x => x.Status, "pending") &
Builders<SteamAuthTransaction>.Filter.Gt(x => x.ExpiresUtc, DateTime.UtcNow);
var update = Builders<SteamAuthTransaction>.Update
.Set(x => x.SteamId, steamId)
.Set(x => x.Status, status)
.Set(x => x.UserId, userId);
return (await _transactions.UpdateOneAsync(filter, update)).ModifiedCount == 1;
}
public async Task<bool> MarkCompleteAsync(string id, string steamId, string userId)
{
var filter = Builders<SteamAuthTransaction>.Filter.Eq(x => x.Id, id) &
Builders<SteamAuthTransaction>.Filter.Eq(x => x.Status, "requires_account") &
Builders<SteamAuthTransaction>.Filter.Eq(x => x.SteamId, steamId) &
Builders<SteamAuthTransaction>.Filter.Gt(x => x.ExpiresUtc, DateTime.UtcNow);
var update = Builders<SteamAuthTransaction>.Update
.Set(x => x.Status, "complete")
.Set(x => x.UserId, userId);
return (await _transactions.UpdateOneAsync(filter, update)).ModifiedCount == 1;
}
}