diff --git a/src/Infrastructure/BotSharp.Abstraction/Users/IUserIdentity.cs b/src/Infrastructure/BotSharp.Abstraction/Users/IUserIdentity.cs index 81b0743b..2f7a56e9 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Users/IUserIdentity.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Users/IUserIdentity.cs @@ -4,6 +4,7 @@ public interface IUserIdentity { string Id { get; } string Email { get; } + string UserName { get; } string FirstName { get; } string LastName { get; } } diff --git a/src/Infrastructure/BotSharp.Abstraction/Users/Models/User.cs b/src/Infrastructure/BotSharp.Abstraction/Users/Models/User.cs index a56e505f..2e96d782 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Users/Models/User.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Users/Models/User.cs @@ -5,6 +5,7 @@ namespace BotSharp.Abstraction.Users.Models; public class User { public string Id { get; set; } = string.Empty; + public string UserName { get; set; } = string.Empty; public string FirstName { get; set; } = string.Empty; public string LastName { get; set; } = string.Empty; public string Email { get; set; } = string.Empty; diff --git a/src/Infrastructure/BotSharp.Core/Infrastructures/Utilities.cs b/src/Infrastructure/BotSharp.Core/Infrastructures/Utilities.cs index b428c86b..449d2c3f 100644 --- a/src/Infrastructure/BotSharp.Core/Infrastructures/Utilities.cs +++ b/src/Infrastructure/BotSharp.Core/Infrastructures/Utilities.cs @@ -23,6 +23,9 @@ public static class Utilities return (splits[0], splits[1]); } + /// + /// Flush cache + /// public static void ClearCache() { // Clear whole cache. diff --git a/src/Infrastructure/BotSharp.Core/Users/Services/UserIdentity.cs b/src/Infrastructure/BotSharp.Core/Users/Services/UserIdentity.cs index e0b4051d..167d5cfe 100644 --- a/src/Infrastructure/BotSharp.Core/Users/Services/UserIdentity.cs +++ b/src/Infrastructure/BotSharp.Core/Users/Services/UserIdentity.cs @@ -17,6 +17,9 @@ public class UserIdentity : IUserIdentity public string Id => _claims?.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value!; + public string UserName + => _claims?.FirstOrDefault(x => x.Type == ClaimTypes.Name)?.Value!; + public string Email => _claims?.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value!; diff --git a/src/Infrastructure/BotSharp.Core/Users/Services/UserService.cs b/src/Infrastructure/BotSharp.Core/Users/Services/UserService.cs index f6cfd554..9fd1c676 100644 --- a/src/Infrastructure/BotSharp.Core/Users/Services/UserService.cs +++ b/src/Infrastructure/BotSharp.Core/Users/Services/UserService.cs @@ -1,5 +1,4 @@ using BotSharp.Abstraction.Repositories; -using BotSharp.Abstraction.Repositories.Records; using BotSharp.Abstraction.Users.Models; using Microsoft.Extensions.Configuration; using Microsoft.IdentityModel.Tokens; @@ -29,12 +28,15 @@ public class UserService : IUserService } record = user; + record.UserName = user.UserName.ToLower(); record.Email = user.Email.ToLower(); record.Salt = Guid.NewGuid().ToString("N"); record.Password = Utilities.HashText(user.Password, record.Salt); - record.ExternalId = _user.Id; db.CreateUser(record); + + Utilities.ClearCache(); + return record; } diff --git a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserCreationModel.cs b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserCreationModel.cs index f72749bf..21f28396 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserCreationModel.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserCreationModel.cs @@ -1,10 +1,10 @@ using BotSharp.Abstraction.Users.Enums; -using BotSharp.Abstraction.Users.Models; namespace BotSharp.OpenAPI.ViewModels.Users; public class UserCreationModel { + public string UserName { get; set; } = string.Empty; public string FirstName { get; set; } = string.Empty; public string LastName { get; set; } = string.Empty; public string Email { get; set; } = string.Empty; @@ -15,6 +15,7 @@ public class UserCreationModel { return new User { + UserName = UserName, FirstName = FirstName, LastName = LastName, Email = Email, diff --git a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserViewModel.cs b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserViewModel.cs index c2cbfba4..f3083abd 100644 --- a/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserViewModel.cs +++ b/src/Infrastructure/BotSharp.OpenAPI/ViewModels/Users/UserViewModel.cs @@ -1,6 +1,4 @@ -using BotSharp.Abstraction.Agents.Enums; using BotSharp.Abstraction.Users.Enums; -using BotSharp.Abstraction.Users.Models; using System.Text.Json.Serialization; namespace BotSharp.OpenAPI.ViewModels.Users; @@ -8,6 +6,8 @@ namespace BotSharp.OpenAPI.ViewModels.Users; public class UserViewModel { public string Id { get; set; } + [JsonPropertyName("user_name")] + public string UserName { get; set; } [JsonPropertyName("first_name")] public string FirstName { get; set; } [JsonPropertyName("last_name")] @@ -32,6 +32,7 @@ public class UserViewModel return new UserViewModel { Id = user.Id, + UserName = user.UserName, FirstName = user.FirstName, LastName = user.LastName, Email = user.Email, diff --git a/src/Plugins/BotSharp.Plugin.ChatHub/SignalRHub.cs b/src/Plugins/BotSharp.Plugin.ChatHub/SignalRHub.cs index 65ba4434..0593b94f 100644 --- a/src/Plugins/BotSharp.Plugin.ChatHub/SignalRHub.cs +++ b/src/Plugins/BotSharp.Plugin.ChatHub/SignalRHub.cs @@ -24,7 +24,7 @@ public class SignalRHub : Hub 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(); var convService = _services.GetRequiredService(); @@ -32,6 +32,7 @@ public class SignalRHub : Hub if (!string.IsNullOrEmpty(conversationId)) { + _logger.LogInformation($"Connection {Context.ConnectionId} is with conversation {conversationId}"); var conv = await convService.GetConversation(conversationId); if (conv != null) { diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Collections/UserDocument.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Collections/UserDocument.cs index f7f5320e..71829d54 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Collections/UserDocument.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Collections/UserDocument.cs @@ -2,6 +2,7 @@ namespace BotSharp.Plugin.MongoStorage.Collections; public class UserDocument : MongoBase { + public string UserName { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Email { get; set; } diff --git a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.cs b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.cs index 3efc6cb3..0f7a2750 100644 --- a/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.cs +++ b/src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.cs @@ -117,6 +117,7 @@ public class MongoRepository : IBotSharpRepository var users = _users.Select(x => new UserDocument { Id = !string.IsNullOrEmpty(x.Id) ? x.Id : Guid.NewGuid().ToString(), + UserName = x.UserName, FirstName = x.FirstName, LastName = x.LastName, Salt = x.Salt, @@ -132,6 +133,7 @@ public class MongoRepository : IBotSharpRepository { var filter = Builders.Filter.Eq(x => x.Id, user.Id); var update = Builders.Update + .Set(x => x.UserName, user.UserName) .Set(x => x.FirstName, user.FirstName) .Set(x => x.LastName, user.LastName) .Set(x => x.Email, user.Email) @@ -868,6 +870,7 @@ public class MongoRepository : IBotSharpRepository return user != null ? new User { Id = user.Id, + UserName = user.UserName, FirstName = user.FirstName, LastName = user.LastName, Email = user.Email, @@ -884,6 +887,7 @@ public class MongoRepository : IBotSharpRepository return user != null ? new User { Id = user.Id, + UserName = user.UserName, FirstName = user.FirstName, LastName = user.LastName, Email = user.Email, @@ -901,6 +905,7 @@ public class MongoRepository : IBotSharpRepository var userCollection = new UserDocument { Id = Guid.NewGuid().ToString(), + UserName = user.UserName, FirstName = user.FirstName, LastName = user.LastName, Salt = user.Salt, diff --git a/src/Plugins/BotSharp.Plugin.WeChat/Users/WeChatAccountUserService.cs b/src/Plugins/BotSharp.Plugin.WeChat/Users/WeChatAccountUserService.cs index bf48c433..e2b6d910 100644 --- a/src/Plugins/BotSharp.Plugin.WeChat/Users/WeChatAccountUserService.cs +++ b/src/Plugins/BotSharp.Plugin.WeChat/Users/WeChatAccountUserService.cs @@ -2,6 +2,7 @@ using BotSharp.Abstraction.Users; using BotSharp.Abstraction.Users.Models; using BotSharp.Core.Repository; using Microsoft.EntityFrameworkCore; +using Senparc.Weixin.MP.AdvancedAPIs.MerChant; using System; using System.Collections.Generic; using System.Text; @@ -21,6 +22,7 @@ namespace BotSharp.Plugin.WeChat.Users { var user = await userService.CreateUser(new User() { + UserName = openId + "@" + appId + ".wechat", Email = openId + "@" + appId + ".wechat", Password = openId }); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickElement.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickElement.cs index 6626161d..a8965db8 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickElement.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickElement.cs @@ -14,7 +14,7 @@ public partial class PlaywrightWebDriver foreach (var a in anchors) { var text = await a.TextContentAsync(); - str.Add($"{text}"); + str.Add($"{(string.IsNullOrEmpty(text) ? "EMPTY" : text)}"); } var buttons = await body.QuerySelectorAllAsync("button"); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/agents/f3ae2a0f-e6ba-4ee1-a0b9-75d7431ff32b/functions.json b/src/Plugins/BotSharp.Plugin.WebDriver/agents/f3ae2a0f-e6ba-4ee1-a0b9-75d7431ff32b/functions.json index 7b3014a4..1f6aceac 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/agents/f3ae2a0f-e6ba-4ee1-a0b9-75d7431ff32b/functions.json +++ b/src/Plugins/BotSharp.Plugin.WebDriver/agents/f3ae2a0f-e6ba-4ee1-a0b9-75d7431ff32b/functions.json @@ -10,7 +10,7 @@ "description": "website url." } }, - "required": [] + "required": ["url"] } }, { @@ -42,7 +42,7 @@ "description": "user input." } }, - "required": ["element_name"] + "required": ["element_name", "input_text"] } } ] diff --git a/src/WebStarter/data/users/10d12798-08fb-4aa6-977b-5dd94d82dbfe/user.json b/src/WebStarter/data/users/10d12798-08fb-4aa6-977b-5dd94d82dbfe/user.json index 58873daf..d2eb033f 100644 --- a/src/WebStarter/data/users/10d12798-08fb-4aa6-977b-5dd94d82dbfe/user.json +++ b/src/WebStarter/data/users/10d12798-08fb-4aa6-977b-5dd94d82dbfe/user.json @@ -1,4 +1,5 @@ { + "userName": "guest", "firstName": "Guest", "lastName": "Anonymous", "email": "guest@gmail.com", diff --git a/src/WebStarter/data/users/456e35c5-caf0-4d45-9084-b44a8ca717e4/user.json b/src/WebStarter/data/users/456e35c5-caf0-4d45-9084-b44a8ca717e4/user.json index e369d82a..f8273fbb 100644 --- a/src/WebStarter/data/users/456e35c5-caf0-4d45-9084-b44a8ca717e4/user.json +++ b/src/WebStarter/data/users/456e35c5-caf0-4d45-9084-b44a8ca717e4/user.json @@ -1,4 +1,5 @@ -{ +{ + "userName": "haiping", "firstName": "Haiping", "lastName": "Chen", "email": "admin@gmail.com", diff --git a/src/WebStarter/data/users/d0e6680d-03d5-4ed8-bdcd-aa7d86f2a1bc/user.json b/src/WebStarter/data/users/d0e6680d-03d5-4ed8-bdcd-aa7d86f2a1bc/user.json index b9db2bc4..ab408d77 100644 --- a/src/WebStarter/data/users/d0e6680d-03d5-4ed8-bdcd-aa7d86f2a1bc/user.json +++ b/src/WebStarter/data/users/d0e6680d-03d5-4ed8-bdcd-aa7d86f2a1bc/user.json @@ -1,4 +1,5 @@ { + "userName": "nancy", "firstName": "Nancy", "lastName": "Luna", "email": "user1@gmail.com", diff --git a/src/WebStarter/data/users/e465af5f-044f-414b-b670-92834929b96c/user.json b/src/WebStarter/data/users/e465af5f-044f-414b-b670-92834929b96c/user.json index b5b79922..97df16c0 100644 --- a/src/WebStarter/data/users/e465af5f-044f-414b-b670-92834929b96c/user.json +++ b/src/WebStarter/data/users/e465af5f-044f-414b-b670-92834929b96c/user.json @@ -1,4 +1,5 @@ { + "userName": "elon", "firstName": "Elon", "lastName": "Musk", "email": "csr1@gmail.com",