Exemplo n.º 1
0
        protected virtual SecurityToken GetSecurityToken(Login formsSignInControl)
        {
            if (formsSignInControl == null)
            {
                throw new ArgumentNullException("formsSignInControl");
            }
            SecurityToken securityToken = null;
            //AAM settings must correnspond with the domain(s).
            SPIisSettings iisSettings = this.IisSettings;

            if (!iisSettings.UseClaimsAuthentication || !iisSettings.UseFormsClaimsAuthenticationProvider)
            {
                /*
                 * ULSCat msoulscatWSSClaimsAuthentication = ULSCat.msoulscat_WSS_ClaimsAuthentication;
                 * string str = string.Concat(this.LogPrefix, "Loaded the FormsSignInPage from request '{0}' but we are not in a context where claims forms sign is is enabled.");
                 * object[] contextUri = new object[] { SPAlternateUrl.ContextUri };
                 * ULS.SendTraceTag(1430947, msoulscatWSSClaimsAuthentication, ULSTraceLevel.Unexpected, str, contextUri);
                 */
                throw new InvalidOperationException();
            }

            //Initialize Providers
            try
            {
                ZimbraMembershipProvider z_membershipProvider = (ZimbraMembershipProvider)Membership.Providers["ZimbraMembershipProvider"];
                ZimbraRoleProvider       z_roleProvider       = (ZimbraRoleProvider)Roles.Providers["ZimbraRoleProvider"];
            }
            catch (Exception ex)
            {
                ProviderLogging.LogError(ex);
            }

            if (this.IsLoginControlInValidState(formsSignInControl))
            {
                //string str1 = null;
                Uri appliesTo = this.AppliesTo;
                SPFormsAuthenticationProvider formsClaimsAuthenticationProvider = iisSettings.FormsClaimsAuthenticationProvider;
                CultureInfo invariantCulture = CultureInfo.InvariantCulture;
                object[]    userName         = new object[] { (formsSignInControl.RememberMeSet ? string.Empty : "non-"), formsSignInControl.UserName, formsClaimsAuthenticationProvider.MembershipProvider, formsClaimsAuthenticationProvider.RoleProvider, appliesTo, SPAlternateUrl.ContextUri };
                //str1 = string.Format(invariantCulture, "{0}persistant security token for user '{1}' with membership provider '{2}' and role provider '{3}' with applies to '{4}' for request '{5}'.", userName);
                //ULS.SendTraceTag(1430977, ULSCat.msoulscat_WSS_ClaimsAuthentication, ULSTraceLevel.Verbose, string.Concat(this.LogPrefix, "Requesting a ", str1));
                SPFormsAuthenticationOption sPFormsAuthenticationOption = SPFormsAuthenticationOption.None;
                if (formsSignInControl.RememberMeSet)
                {
                    sPFormsAuthenticationOption = SPFormsAuthenticationOption.PersistentSignInRequest;
                }
                try
                {
                    securityToken = SPSecurityContext.SecurityTokenForFormsAuthentication(appliesTo, formsClaimsAuthenticationProvider.MembershipProvider, formsClaimsAuthenticationProvider.RoleProvider, formsSignInControl.UserName, formsSignInControl.Password, sPFormsAuthenticationOption);
                    //ULS.SendTraceTag(1430978, ULSCat.msoulscat_WSS_ClaimsAuthentication, ULSTraceLevel.Verbose, string.Concat(this.LogPrefix, "Successfully got a ", str1));
                }
                catch //(Exception exception1)
                {
                    /*
                     * Exception exception = exception1;
                     * ULSCat uLSCat = ULSCat.msoulscat_WSS_ClaimsAuthentication;
                     * string str2 = string.Concat(this.LogPrefix, "Failed to get a ", str1, " Exception: '{0}'");
                     * object[] objArray = new object[] { exception };
                     * ULS.SendTraceTag(1430979, uLSCat, ULSTraceLevel.Verbose, str2, objArray);
                     */
                    securityToken = null;
                    //SPSecurityContext.SecurityTokenForContext
                }
            }
            else
            {
                /*
                 * ULSCat msoulscatWSSClaimsAuthentication1 = ULSCat.msoulscat_WSS_ClaimsAuthentication;
                 * string str3 = string.Concat(this.LogPrefix, "Cancelling sign-in for request '{0}'.");
                 * object[] contextUri1 = new object[] { SPAlternateUrl.ContextUri };
                 * ULS.SendTraceTag(1430976, msoulscatWSSClaimsAuthentication1, ULSTraceLevel.VerboseEx, str3, contextUri1);
                 */
                securityToken = null;
            }
            return(securityToken);
        }
        /*
         * private ZimbraServer _zimbra;
         *
         * internal ZimbraServer Zimbra
         * {
         *  get
         *  {
         *      if(this._zimbra == null)
         *      {
         *          this._zimbra = new ZimbraServer("mail.clubcloud.nl");
         *      }
         *
         *      return this._zimbra;
         *  }
         * }
         */

        /// <summary>
        ///
        /// </summary>
        /// <param name="gebruiker"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        private async Task <bool> CreateOrUpdateMembershipGebruiker(ClubCloud_Gebruiker gebruiker, ClubCloud_Setting settings = null)
        {
            try
            {
                if (settings == null)
                {
                    settings = GetClubCloudSettings(gebruiker.Bondsnummer);// beheerModel.ClubCloud_Settings.SingleOrDefault(g => g.GebruikerId == gebruiker.Id);
                }
                //ClubCloud_Setting updatesettings = beheerModel.ClubCloud_Settings.SingleOrDefault(g => g.GebruikerId == gebruiker.Id);
                if (settings != null)// && updatesettings.Id != null)
                {
                    ZimbraMembershipUser zuser = await ZimbraMembershipProvider.GetZimbraUserAsync(gebruiker.Bondsnummer, false);

                    MembershipCreateStatus status = MembershipCreateStatus.Success;

                    if (zuser == null)
                    {
                        string nummer = "00000";
                        ClubCloud_Vereniging vereniging = null;
                        try
                        {
                            vereniging = GetVerenigingById(gebruiker.Bondsnummer, gebruiker.VerenigingId.Value, false);
                        }
                        catch { }

                        if (vereniging != null)
                        {
                            nummer = vereniging.Nummer;
                        }

                        string password = gebruiker.Achternaam[0] + gebruiker.Bondsnummer + '!';
                        string email    = string.IsNullOrEmpty(gebruiker.EmailKNLTB) ? gebruiker.Bondsnummer + "@clubcloud.nl" : gebruiker.EmailKNLTB;

                        Tuple <MembershipCreateStatus, MembershipUser> result = await ZimbraMembershipProvider.CreateUserAsync(gebruiker.Bondsnummer + "@clubcloud.nl", password, email, "Wat uw verenigingsnummer?", nummer, true, null);

                        if (result.Item1 == MembershipCreateStatus.Success)
                        {
                            status = result.Item1;
                            zuser  = result.Item2 as ZimbraMembershipUser;
                        }
                    }

                    if (status == MembershipCreateStatus.Success)
                    {
                        List <ClubCloud_Address> adressen = GetAddressenForGebruikerById(gebruiker.Id, false, settings);

                        ClubCloud_Address home = new ClubCloud_Address();
                        ClubCloud_Address post = new ClubCloud_Address();
                        if (adressen != null && adressen.Count > 0)
                        {
                            home = adressen.First();
                            post = adressen.Last();
                        }
                        ClubCloud_Nationaliteit nationaliteit = GetNationaliteitById(gebruiker.Bondsnummer, gebruiker.NationaliteitId.Value, false, settings);
                        ClubCloud_Vereniging    vereniging    = GetVerenigingById(gebruiker.Bondsnummer, gebruiker.VerenigingId.Value, false);
                        ClubCloud_District      district      = GetDistrictById(gebruiker.Bondsnummer, vereniging.DistrictId.Value, false, settings);

                        if (gebruiker != null)
                        {
                            zuser.cn             = gebruiker.Volledigenaam;
                            zuser.sn             = gebruiker.Achternaam;
                            zuser.displayName    = gebruiker.Volledigenaam;
                            zuser.employeeNumber = gebruiker.Id.ToString();
                            zuser.givenName      = gebruiker.Voornamen;
                            zuser.initials       = gebruiker.Voorletters;
                            zuser.zimbraPrefMailForwardingAddress = gebruiker.EmailKNLTB;

                            if (!string.IsNullOrWhiteSpace(gebruiker.TelefoonOverdag))
                            {
                                zuser.telephoneNumber = Regex.Replace(gebruiker.TelefoonOverdag, @"[^A-Za-z0-9+ -]+", "");
                            }
                            if (!string.IsNullOrWhiteSpace(gebruiker.TelefoonAvond))
                            {
                                zuser.homePhone = Regex.Replace(gebruiker.TelefoonAvond, @"[^A-Za-z0-9+ -]+", "");
                            }
                            if (!string.IsNullOrWhiteSpace(gebruiker.Mobiel))
                            {
                                zuser.mobile = Regex.Replace(gebruiker.Mobiel, @"[^A-Za-z0-9+ -]+", "");
                            }
                        }

                        if (nationaliteit != null)
                        {
                            zuser.co = nationaliteit.Naam;
                        }

                        if (vereniging != null)
                        {
                            zuser.o       = vereniging.Nummer;
                            zuser.company = vereniging.Nummer;
                        }

                        if (district != null)
                        {
                            zuser.departmentNumber = district.Naam;
                        }



                        if (home != null)
                        {
                            zuser.homePostalAddress = home.Straat + " " + home.Nummer + " " + home.Toevoeging + " " + Environment.NewLine + home.Postcode + "," + home.Stad + " " + Environment.NewLine + home.Gemeente + "," + home.Provincie;
                            zuser.l          = home.Stad;
                            zuser.postalCode = home.Postcode;
                            zuser.st         = home.Gemeente;
                            zuser.street     = home.Straat + " " + home.Nummer + " " + home.Toevoeging;
                        }

                        if (post != null)
                        {
                            zuser.postalAddress = post.Straat + " " + post.Nummer + " " + post.Toevoeging + " " + Environment.NewLine + post.Postcode + "," + post.Stad + " " + Environment.NewLine + post.Gemeente + "," + post.Provincie;
                        }
                    }

                    if (zuser != null && status == MembershipCreateStatus.Success)
                    {
                        await ZimbraMembershipProvider.UpdateZimbraUserAsync(zuser);
                    }
                }
                //}

                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }