public HandshakeResponseModel Post(HandshakeRequestModel model) { // Check if we have an identity token if (string.IsNullOrEmpty(model.Identity)) { return(new HandshakeResponseModel { IsSuccessful = false, }); } // Process as handshake, matching identity token var user = dbContext.MqttUsers .Where(x => x.Identity == model.Identity) .FirstOrDefault(); // Check if user is found if (user == null) { return(new HandshakeResponseModel { IsSuccessful = false, }); } // Add handshake user.LastHandshakeAt = DateTime.Now; var userHandshake = new MqttUserHandshake { MqttUserId = user.Id, HandshakeAt = user.LastHandshakeAt, }; dbContext.MqttUserHandshakes.Add(userHandshake); dbContext.SaveChanges(); return(new HandshakeResponseModel { IsSuccessful = true, }); }
public RegisterResponseModel Post(RegisterRequestModel model) { // Validate onboarding token if required if (IsOnboardingTokenEnabled && OnboardingToken != model.OnboardingToken) { // Onboarding token enabled, no match found, reject registration return(new RegisterResponseModel { IsSuccessful = false, }); } // Register new user, token either matches or is not needed var password = GenerateRandomString(32); // Generate password, length 32 chars var user = new MqttUser { Identity = "id-" + GenerateRandomString(61), // Generate identity, length 64 chars Username = "******" + GenerateRandomString(29), // Generate username, length 32 chars Password = BCrypt.Net.BCrypt.HashPassword(password), // Hash password LastHandshakeAt = DateTime.Now, }; dbContext.MqttUsers.Add(user); dbContext.SaveChanges(); // Add ACL var userAclPub = new MqttUserAccessControlListItem { MqttUserId = user.Id, Type = MqttUserAccessControlListItem.TypePublish, TopicPattern = "#", }; var userAclSub = new MqttUserAccessControlListItem { MqttUserId = user.Id, Type = MqttUserAccessControlListItem.TypeSubscibe, TopicPattern = "#", }; dbContext.MqttUserAccessControlListItems.Add(userAclPub); dbContext.MqttUserAccessControlListItems.Add(userAclSub); // Add handshake var userHandshake = new MqttUserHandshake { MqttUserId = user.Id, HandshakeAt = user.LastHandshakeAt, }; dbContext.MqttUserHandshakes.Add(userHandshake); dbContext.SaveChanges(); // Return credentials return(new RegisterResponseModel { IsSuccessful = true, Identity = user.Identity, Username = user.Username, Password = password, }); }