/// <summary> /// Converts a db-user to a user dto /// </summary> /// <param name="cc">The caller context to be used</param> /// <returns>user DTO</returns> public Monosoft.Auth.DTO.User Convert2DTO(CallContext cc) { Monosoft.Auth.DTO.User res = new Monosoft.Auth.DTO.User(); res.Userid = this.Id; res.Username = this.Name; res.Email = this.Email; res.Mobile = this.Mobile; if (cc.IsCurrentUser) { res.Metadata = this.Metadata.Select(p => p.Convert2DTO()).ToArray(); res.Organisations = this.UserInOrganisations.Select(x => x.Convert2DTO(cc.IsAdministrator, cc.IsCurrentUser)).ToArray(); } else if (cc.IsAdministrator) { res.Organisations = this.UserInOrganisations.Where(p => p.FK_Organisation == cc.OrganisationId).Select(x => x.Convert2DTO(cc.IsAdministrator, cc.IsCurrentUser)).ToArray(); } return(res); }
public CallContext(Guid organisation, Token userContextToken, Monosoft.Auth.DTO.User user, DateTime issueDate, string scope) { this.User = user; this.CurrentUserToken = userContextToken; this.OrganisationId = organisation; CurrentUserTokenData = MemoryCache.FindToken(CurrentUserToken, organisation); if (user == null) { this.IsCurrentUser = false; } else { this.IsCurrentUser = MemoryCache.IsEqual(userContextToken, user.Userid, organisation); } this.IsAdministrator = MemoryCache.Instance.HasClaim(userContextToken, organisation, ClaimDefinitions.IsAdmin, issueDate); this.AllowEdit = MemoryCache.Instance.HasClaim(userContextToken, organisation, ClaimDefinitions.AllowEdit, issueDate) || this.IsCurrentUser; }
/// <summary> /// Gets detailed user data, can only be called by the user himself /// </summary> /// <param name="cc">CallContext is provided to check verify that access can be granted</param> /// <returns>Current user, based on CallContext</returns> public static Monosoft.Auth.DTO.User ReadUser(CallContext cc) { if (cc.IsCurrentUser) { var user = DataContext.Instance.Users.Where(p => p.Id == cc.User.Userid).FirstOrDefault(); var userInOrg = DataContext.Instance.UserInOrganisations.Where(p => p.User.Id == user.Id).ToList(); var res = new Monosoft.Auth.DTO.User() { Userid = user.Id, Username = user.Name, Email = user.Email, Mobile = user.Mobile, Metadata = user.Metadata.Select(p => new Common.DTO.MetaData() { Key = p.Key, Scope = p.Scope, Value = p.Value }).ToArray(), Organisations = userInOrg. Select(p => new Monosoft.Auth.DTO.OrganisationClaims() { Id = p.FK_Organisation, OrgClaims = DataContext.Instance.UserInOrg_OrgClaimsMetadatas.Where(x => x.UserInOrganisation.User.Id == user.Id).Select(x => new Common.DTO.MetaData() { Key = x.Key, Scope = x.Scope, Value = x.Value }).ToArray(), UserClaims = DataContext.Instance.UserInOrg_UserClaimsMetadatas.Where(x => x.UserInOrganisation.User.Id == user.Id).Select(x => new Common.DTO.MetaData() { Key = x.Key, Scope = x.Scope, Value = x.Value }).ToArray() }).ToArray() }; return(res); } return(null); }
/// <summary> /// Create an administrator account on the given organisation context /// </summary> /// <param name="usr">The user details for the account</param> /// <param name="organisationContext">The organisation context</param> /// <returns>The created/updated user</returns> public static User CreateAdmin(Monosoft.Auth.DTO.User usr, Guid organisationContext) { Console.Write(organisationContext); string pwd = "defaultPWD";// Guid.NewGuid().ToString("N").ToUpper().Substring(0, 8); var dbuser = DataContext.Instance.Users.Where(p => p.Name == usr.Username).FirstOrDefault(); if (dbuser == null) { dbuser = new User() { Id = usr.Userid, Name = usr.Username, Email = usr.Email, Mobile = usr.Mobile, MD5Password = Common.Utils.HashHelper.CalculateMD5Hash(pwd) }; DataContext.Instance.Users.Add(dbuser); } var userInOrg = DataContext.Instance.UserInOrganisations .Where(p => p.User.Id == dbuser.Id && p.FK_Organisation == organisationContext).FirstOrDefault(); if (userInOrg == null) { userInOrg = new UserInOrganisation() { FK_Organisation = organisationContext, User = dbuser, }; DataContext.Instance.UserInOrganisations.Add(userInOrg); } var claim = DataContext.Instance.UserInOrg_OrgClaimsMetadatas .Where(p => p.UserInOrganisation == userInOrg && p.Key == ClaimDefinitions.IsAdmin.Key).FirstOrDefault(); if (claim == null) { DataContext.Instance.UserInOrg_OrgClaimsMetadatas .Add(new UserInOrg_OrgClaimsMetadata() { Key = ClaimDefinitions.IsAdmin.Key, Scope = ClaimDefinitions.IsAdmin.Scope, Value = "true", UserInOrganisation = userInOrg }); DataContext.Instance.UserInOrg_OrgClaimsMetadatas .Add(new UserInOrg_OrgClaimsMetadata() { Key = "isServiceStoreAdmin", Scope = "Monosoft.Service.AUTH", Value = "true", UserInOrganisation = userInOrg }); DataContext.Instance.UserInOrg_OrgClaimsMetadatas .Add(new UserInOrg_OrgClaimsMetadata() { Key = "isSysAdm", Scope = "Monosoft.Service.AUTH", Value = "true", UserInOrganisation = userInOrg }); } DataContext.Instance.SaveChanges(); return(dbuser); }
/// <summary> /// Handle an incomming message /// </summary> /// <param name="topicparts">The topic/route as a list of strings</param> /// <param name="wrapper">Message wrapper</param> /// <returns>NULL</returns> public static ReturnMessageWrapper HandleMessage(string[] topicparts, Common.DTO.MessageWrapper wrapper) { var operation = topicparts[1]; Monosoft.Auth.DTO.User user = new Monosoft.Auth.DTO.User(); if (wrapper.MessageData != null) { user = Common.DTO.MessageWrapperHelper <Monosoft.Auth.DTO.User> .GetData(wrapper); } CallContext cc = new CallContext( wrapper.OrgContext, new Common.DTO.Token() { Scope = wrapper.Scope, Tokenid = wrapper.UserContextToken }, user, wrapper.IssuedDate, Monosoft.User.Service.GlobalValues.Scope); Common.DTO.EventDTO eventdata = null; switch (operation) { case "create": // TESTET OK: 28-09-2018 var createRes = User.CreateUser(cc); var res = createRes == null ? null : createRes.Convert2DTO(cc); eventdata = new Common.DTO.EventDTO( res, wrapper.Clientid, wrapper.Messageid); Common.MessageQueue.EventClient.Instance.RaiseEvent(Monosoft.User.Service.GlobalValues.RouteUserCreated + "." + wrapper.OrgContext, eventdata); if (createRes == null) { return(ReturnMessageWrapper.CreateResult(true, wrapper, new System.Collections.Generic.List <LocalizedString>() { new LocalizedString() { Lang = "en", Text = "OK" } }, res)); } else { return(ReturnMessageWrapper.CreateResult(true, wrapper, new System.Collections.Generic.List <LocalizedString>() { new LocalizedString() { Lang = "en", Text = "Missing rights" } }, res)); } case "update": // TESTET OK: 28-09-2018 var updatedUser = User.UpdateUser(cc); var updatedResult = updatedUser == null ? null : updatedUser.Convert2DTO(cc); eventdata = new Common.DTO.EventDTO( updatedResult, wrapper.Clientid, wrapper.Messageid); Common.MessageQueue.EventClient.Instance.RaiseEvent(Monosoft.User.Service.GlobalValues.RouteUserUpdated + "." + wrapper.OrgContext, eventdata); if (updatedUser == null) { return(ReturnMessageWrapper.CreateResult(true, wrapper, new System.Collections.Generic.List <LocalizedString>() { new LocalizedString() { Lang = "en", Text = "OK" } }, updatedResult)); } else { return(ReturnMessageWrapper.CreateResult(true, wrapper, new System.Collections.Generic.List <LocalizedString>() { new LocalizedString() { Lang = "en", Text = "Missing rights" } }, updatedResult)); } case "delete": // TESTET OK: 28-09-2018 User.DeleteUser(cc); eventdata = new Common.DTO.EventDTO( user, wrapper.Clientid, wrapper.Messageid); Common.MessageQueue.EventClient.Instance.RaiseEvent(Monosoft.User.Service.GlobalValues.RouteTokenInvalidateUser, eventdata); return(ReturnMessageWrapper.CreateResult(true, wrapper, new System.Collections.Generic.List <LocalizedString>() { new LocalizedString() { Lang = "en", Text = "OK" } }, null)); case "get": var userRes = User.ReadUser(cc); Common.MessageQueue.EventClient.Instance.RaiseEvent( Monosoft.User.Service.GlobalValues.RouteUserRead, new Common.DTO.EventDTO(userRes, wrapper.Clientid, wrapper.Messageid)); return(ReturnMessageWrapper.CreateResult(true, wrapper, new System.Collections.Generic.List <LocalizedString>() { new LocalizedString() { Lang = "en", Text = "OK" } }, userRes)); case "getall": // TESTET OK: 28-09-2018 var usersRes = User.ReadUsers(cc); Common.MessageQueue.EventClient.Instance.RaiseEvent( Monosoft.User.Service.GlobalValues.RouteUserRead + "." + wrapper.OrgContext, new Common.DTO.EventDTO(usersRes.ToArray(), wrapper.Clientid, wrapper.Messageid)); //TODO ikke lovlig resultat... return(ReturnMessageWrapper.CreateResult(true, wrapper, new System.Collections.Generic.List <LocalizedString>() { new LocalizedString() { Lang = "en", Text = "OK" } }, usersRes.ToArray())); //TODO ikke lovlig resultat... default: /*log error event*/ Common.MessageQueue.Diagnostics.Instance.LogEvent( "Unknow topic for User.", operation + " is unknown", Common.DTO.Severity.Information, wrapper.OrgContext); break; } return(ReturnMessageWrapper.CreateResult(true, wrapper, new System.Collections.Generic.List <LocalizedString>() { new LocalizedString() { Lang = "en", Text = "unknown situation" } }, null)); }