Add UserName

This commit is contained in:
Haiping Chen 2024-01-04 21:20:50 -06:00
parent 71e2c17e43
commit ddebff69ec
15 changed files with 32 additions and 7 deletions

View file

@ -4,6 +4,7 @@ public interface IUserIdentity
{ {
string Id { get; } string Id { get; }
string Email { get; } string Email { get; }
string UserName { get; }
string FirstName { get; } string FirstName { get; }
string LastName { get; } string LastName { get; }
} }

View file

@ -5,6 +5,7 @@ namespace BotSharp.Abstraction.Users.Models;
public class User public class User
{ {
public string Id { get; set; } = string.Empty; public string Id { get; set; } = string.Empty;
public string UserName { get; set; } = string.Empty;
public string FirstName { get; set; } = string.Empty; public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty; public string LastName { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty; public string Email { get; set; } = string.Empty;

View file

@ -23,6 +23,9 @@ public static class Utilities
return (splits[0], splits[1]); return (splits[0], splits[1]);
} }
/// <summary>
/// Flush cache
/// </summary>
public static void ClearCache() public static void ClearCache()
{ {
// Clear whole cache. // Clear whole cache.

View file

@ -17,6 +17,9 @@ public class UserIdentity : IUserIdentity
public string Id public string Id
=> _claims?.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value!; => _claims?.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value!;
public string UserName
=> _claims?.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value!;
public string Email public string Email
=> _claims?.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value!; => _claims?.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value!;

View file

@ -1,5 +1,4 @@
using BotSharp.Abstraction.Repositories; using BotSharp.Abstraction.Repositories;
using BotSharp.Abstraction.Repositories.Records;
using BotSharp.Abstraction.Users.Models; using BotSharp.Abstraction.Users.Models;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
@ -29,12 +28,15 @@ public class UserService : IUserService
} }
record = user; record = user;
record.UserName = user.UserName.ToLower();
record.Email = user.Email.ToLower(); record.Email = user.Email.ToLower();
record.Salt = Guid.NewGuid().ToString("N"); record.Salt = Guid.NewGuid().ToString("N");
record.Password = Utilities.HashText(user.Password, record.Salt); record.Password = Utilities.HashText(user.Password, record.Salt);
record.ExternalId = _user.Id;
db.CreateUser(record); db.CreateUser(record);
Utilities.ClearCache();
return record; return record;
} }

View file

@ -1,10 +1,10 @@
using BotSharp.Abstraction.Users.Enums; using BotSharp.Abstraction.Users.Enums;
using BotSharp.Abstraction.Users.Models;
namespace BotSharp.OpenAPI.ViewModels.Users; namespace BotSharp.OpenAPI.ViewModels.Users;
public class UserCreationModel public class UserCreationModel
{ {
public string UserName { get; set; } = string.Empty;
public string FirstName { get; set; } = string.Empty; public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty; public string LastName { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty; public string Email { get; set; } = string.Empty;
@ -15,6 +15,7 @@ public class UserCreationModel
{ {
return new User return new User
{ {
UserName = UserName,
FirstName = FirstName, FirstName = FirstName,
LastName = LastName, LastName = LastName,
Email = Email, Email = Email,

View file

@ -1,6 +1,4 @@
using BotSharp.Abstraction.Agents.Enums;
using BotSharp.Abstraction.Users.Enums; using BotSharp.Abstraction.Users.Enums;
using BotSharp.Abstraction.Users.Models;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
namespace BotSharp.OpenAPI.ViewModels.Users; namespace BotSharp.OpenAPI.ViewModels.Users;
@ -8,6 +6,8 @@ namespace BotSharp.OpenAPI.ViewModels.Users;
public class UserViewModel public class UserViewModel
{ {
public string Id { get; set; } public string Id { get; set; }
[JsonPropertyName("user_name")]
public string UserName { get; set; }
[JsonPropertyName("first_name")] [JsonPropertyName("first_name")]
public string FirstName { get; set; } public string FirstName { get; set; }
[JsonPropertyName("last_name")] [JsonPropertyName("last_name")]
@ -32,6 +32,7 @@ public class UserViewModel
return new UserViewModel return new UserViewModel
{ {
Id = user.Id, Id = user.Id,
UserName = user.UserName,
FirstName = user.FirstName, FirstName = user.FirstName,
LastName = user.LastName, LastName = user.LastName,
Email = user.Email, Email = user.Email,

View file

@ -24,7 +24,7 @@ public class SignalRHub : Hub
public override async Task OnConnectedAsync() public override async Task OnConnectedAsync()
{ {
_logger.LogInformation($"SignalR Hub: {_user.FirstName} {_user.LastName} ({Context.UserIdentifier}) connected in {Context.ConnectionId} [{DateTime.Now}]"); _logger.LogInformation($"SignalR Hub: {_user.FirstName} {_user.LastName} ({Context.User.Identity.Name}) connected in {Context.ConnectionId}");
var hooks = _services.GetServices<IConversationHook>(); var hooks = _services.GetServices<IConversationHook>();
var convService = _services.GetRequiredService<IConversationService>(); var convService = _services.GetRequiredService<IConversationService>();
@ -32,6 +32,7 @@ public class SignalRHub : Hub
if (!string.IsNullOrEmpty(conversationId)) if (!string.IsNullOrEmpty(conversationId))
{ {
_logger.LogInformation($"Connection {Context.ConnectionId} is with conversation {conversationId}");
var conv = await convService.GetConversation(conversationId); var conv = await convService.GetConversation(conversationId);
if (conv != null) if (conv != null)
{ {

View file

@ -2,6 +2,7 @@ namespace BotSharp.Plugin.MongoStorage.Collections;
public class UserDocument : MongoBase public class UserDocument : MongoBase
{ {
public string UserName { get; set; }
public string FirstName { get; set; } public string FirstName { get; set; }
public string LastName { get; set; } public string LastName { get; set; }
public string Email { get; set; } public string Email { get; set; }

View file

@ -117,6 +117,7 @@ public class MongoRepository : IBotSharpRepository
var users = _users.Select(x => new UserDocument var users = _users.Select(x => new UserDocument
{ {
Id = !string.IsNullOrEmpty(x.Id) ? x.Id : Guid.NewGuid().ToString(), Id = !string.IsNullOrEmpty(x.Id) ? x.Id : Guid.NewGuid().ToString(),
UserName = x.UserName,
FirstName = x.FirstName, FirstName = x.FirstName,
LastName = x.LastName, LastName = x.LastName,
Salt = x.Salt, Salt = x.Salt,
@ -132,6 +133,7 @@ public class MongoRepository : IBotSharpRepository
{ {
var filter = Builders<UserDocument>.Filter.Eq(x => x.Id, user.Id); var filter = Builders<UserDocument>.Filter.Eq(x => x.Id, user.Id);
var update = Builders<UserDocument>.Update var update = Builders<UserDocument>.Update
.Set(x => x.UserName, user.UserName)
.Set(x => x.FirstName, user.FirstName) .Set(x => x.FirstName, user.FirstName)
.Set(x => x.LastName, user.LastName) .Set(x => x.LastName, user.LastName)
.Set(x => x.Email, user.Email) .Set(x => x.Email, user.Email)
@ -868,6 +870,7 @@ public class MongoRepository : IBotSharpRepository
return user != null ? new User return user != null ? new User
{ {
Id = user.Id, Id = user.Id,
UserName = user.UserName,
FirstName = user.FirstName, FirstName = user.FirstName,
LastName = user.LastName, LastName = user.LastName,
Email = user.Email, Email = user.Email,
@ -884,6 +887,7 @@ public class MongoRepository : IBotSharpRepository
return user != null ? new User return user != null ? new User
{ {
Id = user.Id, Id = user.Id,
UserName = user.UserName,
FirstName = user.FirstName, FirstName = user.FirstName,
LastName = user.LastName, LastName = user.LastName,
Email = user.Email, Email = user.Email,
@ -901,6 +905,7 @@ public class MongoRepository : IBotSharpRepository
var userCollection = new UserDocument var userCollection = new UserDocument
{ {
Id = Guid.NewGuid().ToString(), Id = Guid.NewGuid().ToString(),
UserName = user.UserName,
FirstName = user.FirstName, FirstName = user.FirstName,
LastName = user.LastName, LastName = user.LastName,
Salt = user.Salt, Salt = user.Salt,

View file

@ -2,6 +2,7 @@ using BotSharp.Abstraction.Users;
using BotSharp.Abstraction.Users.Models; using BotSharp.Abstraction.Users.Models;
using BotSharp.Core.Repository; using BotSharp.Core.Repository;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Senparc.Weixin.MP.AdvancedAPIs.MerChant;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
@ -21,6 +22,7 @@ namespace BotSharp.Plugin.WeChat.Users
{ {
var user = await userService.CreateUser(new User() var user = await userService.CreateUser(new User()
{ {
UserName = openId + "@" + appId + ".wechat",
Email = openId + "@" + appId + ".wechat", Email = openId + "@" + appId + ".wechat",
Password = openId Password = openId
}); });

View file

@ -1,4 +1,5 @@
{ {
"userName": "guest",
"firstName": "Guest", "firstName": "Guest",
"lastName": "Anonymous", "lastName": "Anonymous",
"email": "guest@gmail.com", "email": "guest@gmail.com",

View file

@ -1,4 +1,5 @@
{ {
"userName": "haiping",
"firstName": "Haiping", "firstName": "Haiping",
"lastName": "Chen", "lastName": "Chen",
"email": "admin@gmail.com", "email": "admin@gmail.com",

View file

@ -1,4 +1,5 @@
{ {
"userName": "nancy",
"firstName": "Nancy", "firstName": "Nancy",
"lastName": "Luna", "lastName": "Luna",
"email": "user1@gmail.com", "email": "user1@gmail.com",

View file

@ -1,4 +1,5 @@
{ {
"userName": "elon",
"firstName": "Elon", "firstName": "Elon",
"lastName": "Musk", "lastName": "Musk",
"email": "csr1@gmail.com", "email": "csr1@gmail.com",