Basic UserService.CreateUser impl
This commit is contained in:
parent
b22dc7900f
commit
4271210ec2
3 changed files with 40 additions and 3 deletions
|
@ -76,6 +76,8 @@ public class ASActor : ASObject {
|
||||||
[J("https://www.w3.org/ns/activitystreams#url")]
|
[J("https://www.w3.org/ns/activitystreams#url")]
|
||||||
[JC(typeof(ASLinkConverter))]
|
[JC(typeof(ASLinkConverter))]
|
||||||
public ASLink? Url { get; set; }
|
public ASLink? Url { get; set; }
|
||||||
|
|
||||||
|
public bool? IsBot => Type?.Any(p => p == "https://www.w3.org/ns/activitystreams#Service");
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ASActorConverter : ASSerializer.ListSingleObjectConverter<ASActor>;
|
public class ASActorConverter : ASSerializer.ListSingleObjectConverter<ASActor>;
|
5
Iceshrimp.Backend/Core/Helpers/StringExtensions.cs
Normal file
5
Iceshrimp.Backend/Core/Helpers/StringExtensions.cs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
namespace Iceshrimp.Backend.Core.Helpers;
|
||||||
|
|
||||||
|
public static class StringExtensions {
|
||||||
|
public static string Truncate(this string target, int maxLength) => target[..Math.Min(target.Length, maxLength)];
|
||||||
|
}
|
|
@ -1,11 +1,15 @@
|
||||||
using Iceshrimp.Backend.Core.Database;
|
using Iceshrimp.Backend.Core.Database;
|
||||||
using Iceshrimp.Backend.Core.Database.Tables;
|
using Iceshrimp.Backend.Core.Database.Tables;
|
||||||
using Iceshrimp.Backend.Core.Federation.ActivityPub;
|
using Iceshrimp.Backend.Core.Federation.ActivityPub;
|
||||||
|
using Iceshrimp.Backend.Core.Helpers;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace Iceshrimp.Backend.Core.Services;
|
namespace Iceshrimp.Backend.Core.Services;
|
||||||
|
|
||||||
public class UserService(ILogger<UserService> logger, DatabaseContext db, HttpClient client, ActivityPubService apSvc) {
|
public class UserService(ILogger<UserService> logger, DatabaseContext db, HttpClient client, ActivityPubService apSvc) {
|
||||||
|
private const int NameLength = 128;
|
||||||
|
private const int SummaryLength = 2048;
|
||||||
|
|
||||||
private static (string Username, string Host) AcctToTuple(string acct) {
|
private static (string Username, string Host) AcctToTuple(string acct) {
|
||||||
if (!acct.StartsWith("acct:")) throw new Exception("Invalid query");
|
if (!acct.StartsWith("acct:")) throw new Exception("Invalid query");
|
||||||
|
|
||||||
|
@ -27,8 +31,34 @@ public class UserService(ILogger<UserService> logger, DatabaseContext db, HttpCl
|
||||||
public async Task<User> CreateUser(string uri, string acct) {
|
public async Task<User> CreateUser(string uri, string acct) {
|
||||||
logger.LogInformation("Creating user {acct} with uri {uri}", acct, uri);
|
logger.LogInformation("Creating user {acct} with uri {uri}", acct, uri);
|
||||||
var actor = await apSvc.FetchActor(uri);
|
var actor = await apSvc.FetchActor(uri);
|
||||||
logger.LogInformation("Got actor: {inbox}", actor.Inbox);
|
logger.LogDebug("Got actor: {inbox}", actor.Url);
|
||||||
|
if (actor.Id != uri) throw new Exception("Actor URI mismatch");
|
||||||
throw new NotImplementedException(); //FIXME
|
|
||||||
|
var user = new User {
|
||||||
|
Id = IdHelpers.GenerateSlowflakeId(),
|
||||||
|
CreatedAt = DateTime.UtcNow,
|
||||||
|
LastFetchedAt = DateTime.UtcNow,
|
||||||
|
Name = actor.DisplayName?.Truncate(NameLength) ?? actor.Username,
|
||||||
|
IsLocked = actor.IsLocked ?? false,
|
||||||
|
IsBot = actor.IsBot ?? false,
|
||||||
|
Username = actor.Username!,
|
||||||
|
UsernameLower = actor.Username!.ToLowerInvariant(),
|
||||||
|
Host = AcctToTuple(acct).Host,
|
||||||
|
//MovedToUri = actor.MovedTo
|
||||||
|
//AlsoKnownAs
|
||||||
|
IsExplorable = actor.IsDiscoverable ?? false,
|
||||||
|
Inbox = actor.Inbox?.Link,
|
||||||
|
SharedInbox = actor.SharedInbox?.Link,
|
||||||
|
FollowersUri = actor.Followers?.Id,
|
||||||
|
Uri = actor.Id,
|
||||||
|
IsCat = actor.IsCat ?? false,
|
||||||
|
Emojis = [],
|
||||||
|
Tags = [],
|
||||||
|
};
|
||||||
|
|
||||||
|
await db.Users.AddAsync(user);
|
||||||
|
await db.SaveChangesAsync();
|
||||||
|
|
||||||
|
return user;
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue