Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        /// <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));
        }