void btnQuery_Click(object sender, EventArgs e)
        {
            try
            {
                txtQueryResult.Text = DoQuery(txtQueryTransmittalBox.Text);

                try
                {
                    Transmittal resultTransmittal = (Transmittal)SerializationHelper.DeserializeFromString(txtQueryResult.Text, typeof(Transmittal));

                    if (queryType.SelectedValue == "GetCensus")
                    {
                        foreach (var applicant in resultTransmittal.Applicants)
                        {
                            if (applicant.Relationship == Relationship.Employee || applicant.Relationship == Relationship.Unknown)
                            {
                                _LastEmployeeID = applicant.UniqueID;

                                break;
                            }
                        }
                    }
                }
                catch
                {
                }
            }
            catch (Exception ex)
            {
                txtQueryResult.Text = "Error: " + ex.Message;
            }

            SetDefaultGetLoginParameters();
        }
        private void SetDefaultQueryTransmittal()
        {
            Transmittal result = new Transmittal();

            if (queryType.SelectedValue == "GetCensus")
            {
                result.Type = TransmittalType.Query;

                result.Group           = new Group();
                result.Group.GroupName = _LastPortfolioName;

                //if (string.IsNullOrEmpty(result.Group.GroupName))
                //    result.Group.GroupName = "Test Group";

                Applicant employee = new Applicant();
                employee.Relationship = Relationship.Employee;
                employee.SSN          = _LastEmployeeSSN;

                result.Applicants = new ApplicantCollection();
                result.Applicants.Add(employee);
            }
            else if (queryType.SelectedValue == "GetGroup")
            {
                result.Type = TransmittalType.GetPortfolio;

                result.Group           = new Group();
                result.Group.GroupName = _LastPortfolioName;

                //if (string.IsNullOrEmpty(result.Group.GroupName))
                //    result.Group.GroupName = "Test Group";
            }

            txtQueryTransmittalBox.Text = SerializationHelper.SerializeToString(result);
        }
        protected void OnStartButtonClicked(object sender, EventArgs e)
        {
            Session["Transmittal"] = null;

            Transmittal transmittal = new Transmittal();

            transmittal.SenderID = Guid.NewGuid();

            Applicant employee = new Applicant();

            employee.ID            = "1";
            employee.AsOfDate      = DateTime.Now;
            employee.SSN           = "123-45-6789";
            employee.FirstName     = "Joell";
            employee.MiddleInitial = "K";
            employee.LastName      = "AK-Carson";
            employee.LegalStatus   = LegalStatus.Employee;

            transmittal.Applicants = new ApplicantCollection();
            transmittal.Applicants.Add(employee);

            Session["Transmittal"] = transmittal;

            bstIframe.Attributes.Add("src", "Saml2Request.aspx");
            //bstIframe.Attributes.Add("src", "ShowTransmittal.aspx");// for test purposes
        }
        private Transmittal BuildTransmittal()
        {
            Transmittal transmittal = new Transmittal();

            transmittal.SenderID = Guid.NewGuid();

            string agentName = !string.IsNullOrEmpty(this._MiddleInitial.Text) ? this._FirstName.Text + " " + this._MiddleInitial.Text + " " : this._FirstName.Text + " ";

            agentName += !string.IsNullOrEmpty(this._Suffix.Text) ? this._LastName.Text + " " + this._Suffix.Text : this._LastName.Text;

            Agent agent = new Agent();

            agent.ID    = Guid.NewGuid().ToString();
            agent.Email = this._EmailText.Text;

            agent.FirstName     = this._FirstName.Text;
            agent.MiddleInitial = this._MiddleInitial.Text;
            agent.LastName      = this._LastName.Text;
            agent.Name          = agentName;
            agent.PhoneWork     = this._Phone1.Text + this._Phone2.Text + this._Phone3.Text + this._Phone4.Text;

            agent.Address       = new Address();
            agent.Address.Line1 = this._AddressLine1.Text;
            agent.Address.Line2 = this._AddressLine2.Text != null ? this._AddressLine2.Text : null;
            agent.Address.City  = this._City.Text;
            agent.Address.State = this._State.SelectedValue;
            agent.Address.Zip   = this._Zip.Text;

            transmittal.Agents = new AgentCollection();
            transmittal.Agents.Add(agent);

            return(transmittal);
        }
 private void SearchChanged(Transmittal obj)
 {
     if (obj == null)
     {
         IsSearching = false;
         return;
     }
     Results.Add(new TransmittalViewModel(obj));
 }
        public TransmittalViewModel(Transmittal transmittal)
        {
            OkayCommand           = new RelayCommand(OkayCommandExecute, OkayCommandCanExecute);
            CancelCommand         = new RelayCommand(CancelCommandExecute, CancelCommandCanExecute);
            AddFileCommand        = new RelayCommand(AddFileExecute, FileEditCanExecute);
            RemoveFileCommand     = new RelayCommand(RemoveFileExecute, FileRemoveCanExecute);
            EditRecipientsCommand = new RelayCommand(EditRecipientExecute, EditRecipientCanExecute);

            pg = new Progress <Document>(DocsUpdated);
            transmittalModel = transmittal;


            if (transmittalModel.IsLoadedFromDb)
            {
                Id = transmittalModel.Id;
                IssueToWorkshop = transmittalModel.IssueToWorkshop;

                SentDate          = transmittalModel.SentDate;
                IssueType         = transmittalModel.IssueType;
                TransmittalStatus = transmittalModel.TransmittalStatus;
                Comments          = transmittalModel.Comments;
                IssueBy           = transmittalModel.IssueBy;
                CreatedBy         = transmittalModel.CreatedBy;
                Project           = transmittalModel.Project;

                if (transmittalModel.ExtendedDataLoaded)
                {
                    transmittalModel.Files.ForEach(f => files.Add(new FileDataViewModel(f)));

                    Recipients = new RecipientsSelectionViewModel(transmittalModel.Recipients);
                }
            }
            else
            {
                CreatedBy         = transmittalModel.CreatedBy;
                TransmittalStatus = TransmittalStatus.Preparing;
            }


            if (!transmittalModel.IsLoadedFromDb)
            {
                ViewStatus &= ViewStatusTypes.LoadedDb;
            }
            if (User.ActiveUser.Group == Groups.NoPermisions)
            {
                ViewStatus &= ViewStatusTypes.ViewOnly;
            }
            if (TransmittalStatus == TransmittalStatus.Issued)
            {
                ViewStatus &= ViewStatusTypes.Approved;
            }

            if (!ViewStatus.HasFlag(ViewStatusTypes.ViewOnly) && !ViewStatus.HasFlag(ViewStatusTypes.Approved))
            {
                ViewStatus &= ViewStatusTypes.Editable;                                                                                                 //Otherwise it should be editable.
            }
        }
        public TransmittalDto UpdateTransmittal(long transmittalNumber, UpdateTransmittalRequest transmittalRequest)
        {
            Transmittal transmittalEntity = _transmittalRepository.GetByIdAsync(transmittalNumber).Result;

            transmittalEntity.TransmittalStatus     = transmittalRequest.TransmittalStatus;
            transmittalEntity.TransmittalTotal      = transmittalRequest.TransmittalTotal.Value;
            transmittalEntity.TransmittalTotalCount = transmittalRequest.TransmittalTotalCount.Value;

            _transmittalRepository.UpdateAsync(transmittalEntity).Wait();

            return(_mapper.Map <TransmittalDto>(transmittalEntity));
        }
        void btnUpload_Click(object sender, EventArgs e)
        {
            try
            {
                txtUploadResult.Text = DoUpdate(txtUploadTransmittalBox.Text);

                try
                {
                    Transmittal transmittal       = (Transmittal)SerializationHelper.DeserializeFromString(txtUploadTransmittalBox.Text, typeof(Transmittal));
                    Transmittal resultTransmittal = (Transmittal)SerializationHelper.DeserializeFromString(txtUploadResult.Text, typeof(Transmittal));

                    if (uploadType.SelectedValue == "UploadCensus")
                    {
                        foreach (var applicant in transmittal.Applicants)
                        {
                            if (applicant.Relationship == Relationship.Employee || applicant.Relationship == Relationship.Unknown)
                            {
                                if (!string.IsNullOrEmpty(applicant.SSN))
                                {
                                    _LastEmployeeSSN = applicant.SSN;
                                }

                                break;
                            }
                        }
                    }
                    else if (uploadType.SelectedValue == "UploadGroup")
                    {
                        if (transmittal.Portfolio != null && !string.IsNullOrEmpty(transmittal.Portfolio.Name))
                        {
                            _LastPortfolioName = transmittal.Portfolio.Name;
                        }

                        if (resultTransmittal.PortfolioID != Guid.Empty)
                        {
                            _LastPortfolioID = resultTransmittal.PortfolioID;
                        }
                    }
                }
                catch
                {
                }

                SetDefaultQueryTransmittal();
            }
            catch (Exception ex)
            {
                txtUploadResult.Text = "Error: " + ex.Message;
            }

            SetDefaultGetLoginParameters();
        }
        public TransmittalViewModel()
        {
            ///This method shouldn't be used other than for debug
            OkayCommand           = new RelayCommand(OkayCommandExecute, OkayCommandCanExecute);
            CancelCommand         = new RelayCommand(CancelCommandExecute, CancelCommandCanExecute);
            AddFileCommand        = new RelayCommand(AddFileExecute, FileEditCanExecute);
            RemoveFileCommand     = new RelayCommand(RemoveFileExecute, FileRemoveCanExecute);
            EditRecipientsCommand = new RelayCommand(EditRecipientExecute, FileRemoveCanExecute);

            transmittalModel  = new Transmittal();
            TransmittalStatus = TransmittalStatus.Preparing;
            files             = new DocumentCollectionViewModel();

            ViewStatus = ViewStatusTypes.NewlyCreated & ViewStatusTypes.Editable;
        }
        void _XMLTransmittalButton_Click(object sender, EventArgs e)
        {
            Button xmlTransmittalButton = (Button)sender;

            if (xmlTransmittalButton.CommandName == "ViewXMLTransmittal")
            {
                Transmittal transmittal = BuildTransmittal();
                _XMLTransmittal.Text = SerializationHelper.SerializeToString(transmittal);

                //Hide User/Address textboxes.
                _Table.Rows[0].Attributes.Add("style", "display:none;");
                _Table.Rows[1].Attributes.Add("style", "display:none;");
                _Table.Rows[2].Attributes.Add("style", "display:none;");
                _Table.Rows[3].Attributes.Add("style", "display:none;");
                _Table.Rows[4].Attributes.Add("style", "display:none;");
                _Table.Rows[5].Attributes.Add("style", "display:none;");

                //Display XML textbox.
                _Table.Rows[6].Attributes.Add("style", "display:'';");

                //Modify command name and text of button.
                xmlTransmittalButton.CommandName = "ViewTextBoxes";
                xmlTransmittalButton.Text        = "View Text Boxes";
            }
            else if (xmlTransmittalButton.CommandName == "ViewTextBoxes")
            {
                //Add modified info from _XMLTransmittal.Text to appropriate text boxes.
                //Transmittal transmittal = (Transmittal)SerializationHelper.DeserializeFromString(_XMLTransmittal.Text, typeof(Transmittal));

                //Hide TextBoxes.
                _Table.Rows[0].Attributes.Add("style", "display:'';");
                _Table.Rows[1].Attributes.Add("style", "display:'';");
                _Table.Rows[2].Attributes.Add("style", "display:'';");
                _Table.Rows[3].Attributes.Add("style", "display:'';");
                _Table.Rows[4].Attributes.Add("style", "display:'';");
                _Table.Rows[5].Attributes.Add("style", "display:'';");

                //Display XML TextBox.
                _Table.Rows[6].Attributes.Add("style", "display:none;");

                //Modify command name and text of button.
                xmlTransmittalButton.CommandName = "ViewXMLTransmittal";
                xmlTransmittalButton.Text        = "View XML Transmittal";

                //Remove text from _XMLTransmittal.Text.
                _XMLTransmittal.Text = string.Empty;
            }
        }
        /// <summary>
        /// Handles the Click event of the submitButton control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        private void submitButton_Click(object sender, EventArgs e)
        {
            Transmittal transmittal = null;
            string      employeeID  = this._EmployeeID.Text;

            if (!string.IsNullOrEmpty(this._XMLText.Text))
            {
                try
                {
                    transmittal = (Transmittal)SerializationHelper.DeserializeFromString(this._XMLText.Text, typeof(Transmittal));
                }
                catch (Exception exception)
                {
                    this._XMLText.Text = exception.Message;
                    Exception inner = exception.InnerException;

                    while (inner != null)
                    {
                        this._XMLText.Text += "\n" + inner.Message;
                        inner = inner.InnerException;
                    }

                    this._XMLText.Text = PrepareSourceCode(this._XMLText.Text);
                }
            }

            if (!string.IsNullOrEmpty(employeeID) && transmittal != null && transmittal.Applicants != null && transmittal.Applicants.Count > 0)
            {
                transmittal.Applicants[0].EmployeeIdent = employeeID;
            }

            Session["Transmittal"] = transmittal;

            //Creating SAML responce
            X509Certificate2 vendorCertificate  = GetVendorCertificate();
            X509Certificate2 selerixCertificate = GetSelerixCertificate();

            string assertionConsumerServiceURL = "SamlResponse.aspx";
            string audienceName = "whatever audience";

            ComponentSpace.SAML.Protocol.Response samlResponse = new ComponentSpace.SAML.Protocol.Response();
            samlResponse.Recipient = assertionConsumerServiceURL;
            samlResponse.Status    = new ComponentSpace.SAML.Protocol.Status(ComponentSpace.SAML.Protocol.StatusCode.Codes.Success);

            ComponentSpace.SAML.Assertions.Assertion samlAssertion = new ComponentSpace.SAML.Assertions.Assertion();
            samlAssertion.Issuer = "Vendor";

            ComponentSpace.SAML.Assertions.SubjectConfirmation subjectConfirmation = new ComponentSpace.SAML.Assertions.SubjectConfirmation(ComponentSpace.SAML.Assertions.ConfirmationMethod.Methods.Bearer);
            ComponentSpace.SAML.Assertions.Subject             subject             = new ComponentSpace.SAML.Assertions.Subject(new ComponentSpace.SAML.Assertions.NameIdentifier("", "", employeeID), subjectConfirmation);

            ComponentSpace.SAML.Assertions.SubjectConfirmationData subjectConfirmationData = new ComponentSpace.SAML.Assertions.SubjectConfirmationData();
            subjectConfirmation.SubjectConfirmationData = subjectConfirmationData;
            ComponentSpace.SAML.Assertions.Conditions conditions = new ComponentSpace.SAML.Assertions.Conditions(new TimeSpan(1, 0, 0));
            ComponentSpace.SAML.Assertions.AudienceRestrictionCondition audienceRestriction = new ComponentSpace.SAML.Assertions.AudienceRestrictionCondition();
            audienceRestriction.Audiences.Add(new ComponentSpace.SAML.Assertions.Audience(audienceName));
            conditions.ConditionsList.Add(audienceRestriction);
            samlAssertion.Conditions = conditions;

            ComponentSpace.SAML.Assertions.AuthenticationStatement authnStatement = new ComponentSpace.SAML.Assertions.AuthenticationStatement();
            authnStatement.Subject = subject;
            authnStatement.AuthenticationMethod = ComponentSpace.SAML.Assertions.AuthenticationStatement.AuthenticationMethods.Unspecified;
            samlAssertion.Statements.Add(authnStatement);

            ComponentSpace.SAML.Assertions.AttributeStatement attributeStatement = new ComponentSpace.SAML.Assertions.AttributeStatement();

            if (Session["Transmittal"] != null)
            {
                attributeStatement.Attributes.Add(new ComponentSpace.SAML.Assertions.Attribute("Transmittal", "", SerializationHelper.SerializeToString(transmittal)));
            }

            //Check for Transmittal Options
            for (int i = 0; i < _TransmittalOptionsList.Items.Count; i++)
            {
                string answer = "no";

                if (_TransmittalOptionsList.Items[i].Selected)
                {
                    answer = "yes";
                }

                if (_TransmittalOptionsList.Items[i].Value == "HeaderAndFooter")
                {
                    attributeStatement.Attributes.Add(new ComponentSpace.SAML.Assertions.Attribute("HeaderAndFooter", "", answer));
                }
                else if (_TransmittalOptionsList.Items[i].Value == "Sidebar")
                {
                    attributeStatement.Attributes.Add(new ComponentSpace.SAML.Assertions.Attribute("Sidebar", "", answer));
                }
                else if (_TransmittalOptionsList.Items[i].Value == "PersonalInfo")
                {
                    attributeStatement.Attributes.Add(new ComponentSpace.SAML.Assertions.Attribute("PersonalInfo", "", answer));
                }
                else if (_TransmittalOptionsList.Items[i].Value == "Welcome")
                {
                    attributeStatement.Attributes.Add(new ComponentSpace.SAML.Assertions.Attribute("Welcome", "", answer));
                }
                else if (_TransmittalOptionsList.Items[i].Value == "Review")
                {
                    attributeStatement.Attributes.Add(new ComponentSpace.SAML.Assertions.Attribute("Review", "", answer));
                }
            }

            samlAssertion.Statements.Add(attributeStatement);
            samlResponse.Assertions.Add(samlAssertion);


            //Created SAML response

            //Sending SAML response

            // Serialize the SAML response for transmission.
            XmlElement samlResponseXml = samlResponse.ToXml();

            // Sign the SAML response.
            ComponentSpace.SAML.Protocol.ResponseSignature.Generate(samlResponseXml, vendorCertificate.PrivateKey, vendorCertificate);

            HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
            HttpContext.Current.Response.AddHeader("Pragma", "no-cache");

            RemotePost remotePost = new RemotePost();

            remotePost.Add("SAMLResponse", ComponentSpace.SAML.SAML.ToBase64String(samlResponseXml));
            remotePost.Url = assertionConsumerServiceURL;
            remotePost.Post();
        }
        public string Query(string transmittal)
        {
            Transmittal response = new Transmittal();

            response.Result        = new Result();
            response.Result.Status = ResultStatus.OK;

            Transmittal request = null;

            try
            {
                if (string.IsNullOrEmpty(transmittal))
                {
                    throw new Exception("Transmittal parameter is not valid xml.");
                }

                request = (Transmittal)SerializationHelper.DeserializeFromString(transmittal, typeof(Transmittal));

                switch (request.Type)
                {
                case TransmittalType.GetPortfolio:
                    Portfolio p = FindPortfolio(request);

                    if (p == null)
                    {
                        if (request.Portfolio.UniqueID != Guid.Empty)
                        {
                            throw new Exception(
                                      String.Format("Couldn't find portfolio \"{0}\" [{1}] or user doesn't have access to it", request.Portfolio.Name, request.Portfolio.UniqueID));
                        }
                        else
                        {
                            throw new Exception(
                                      String.Format("Couldn't find portfolio \"{0}\" or user doesn't have access to it", request.Portfolio.Name));
                        }
                    }


                    response.Portfolio = p;

                    break;

                case TransmittalType.Query:

                    Transmittal t = FindCensus(request);

                    if (t == null)
                    {
                        throw new Exception("Couldn't find employee");
                    }

                    response.Applicants   = t.Applicants;
                    response.Applications = t.Applications;
                    response.Group        = t.Group;

                    break;

                default:
                    throw new Exception("Not supported transmittal type");
                }
            }
            catch (Exception e)
            {
                response.Result.Status = ResultStatus.Error;
                response.Result.Error  = e.Message;
            }

            string result = SerializationHelper.SerializeToString(response);

            return(result);
        }
        public string Upload(string transmittal)
        {
            Transmittal response = new Transmittal();

            response.Result        = new Result();
            response.Result.Status = ResultStatus.OK;

            Transmittal request = null;

            try
            {
                if (string.IsNullOrEmpty(transmittal))
                {
                    throw new Exception("Transmittal parameter is not valid xml.");
                }

                request = (Transmittal)SerializationHelper.DeserializeFromString(transmittal, typeof(Transmittal));

                switch (request.Type)
                {
                case TransmittalType.UploadPortfolio:
                    Portfolio portfolio = FindPortfolio(request);

                    if (portfolio != null)
                    {
                        request.Portfolio.UniqueID = portfolio.UniqueID;
                        _Portfolios.Remove(portfolio);
                        _Portfolios.Add(request.Portfolio);

                        response.PortfolioID = request.Portfolio.UniqueID;
                    }
                    else
                    {
                        //create new one.

                        request.Portfolio.UniqueID = Guid.NewGuid();

                        _Portfolios.Add(request.Portfolio);

                        response.PortfolioID = request.Portfolio.UniqueID;
                    }

                    break;

                case TransmittalType.UploadApplicants:

                    Portfolio p = FindPortfolio(request);

                    if (p == null)
                    {
                        throw new Exception("Portfolio is not found");
                    }

                    Transmittal t = FindCensus(request);

                    if (t != null)
                    {
                        _Census[request.Group.GroupName].Remove(t);
                    }

                    foreach (var applicant in request.Applicants)
                    {
                        if (applicant.UniqueID == Guid.Empty)
                        {
                            applicant.UniqueID = Guid.NewGuid();
                        }
                    }

                    if (!_Census.ContainsKey(request.Group.GroupName))
                    {
                        _Census.Add(request.Group.GroupName, new List <Transmittal>());
                    }

                    _Census[request.Group.GroupName].Add(request);

                    break;

                default:
                    throw new Exception("Not supported transmittal type");
                }
            }
            catch (Exception e)
            {
                response.Result.Status = ResultStatus.Error;
                response.Result.Error  = e.Message;
            }

            string result = SerializationHelper.SerializeToString(response);

            return(result);
        }
        private Portfolio FindPortfolio(Transmittal request)
        {
            if (
                (request.Group == null || string.IsNullOrEmpty(request.Group.GroupName)) &&
                request.PortfolioID == Guid.Empty &&
                (
                    request.Portfolio == null ||
                    (string.IsNullOrEmpty(request.Portfolio.Name) && request.Portfolio.UniqueID == Guid.Empty)
                )
                )
            {
                throw new Exception("Portfolio search criteria (PortfolioID, Name or UniqueID) is missing.");
            }

            Portfolio portfolio = null;

            if (request.PortfolioID != Guid.Empty)
            {
                foreach (var p in _Portfolios)
                {
                    if (p.UniqueID == request.PortfolioID)
                    {
                        portfolio = p;
                        break;
                    }
                }
            }

            if (portfolio == null && request.Portfolio != null && request.Portfolio.UniqueID != Guid.Empty)
            {
                foreach (var p in _Portfolios)
                {
                    if (p.UniqueID == request.Portfolio.UniqueID)
                    {
                        portfolio = p;
                        break;
                    }
                }
            }


            string groupName   = request.Group != null ? request.Group.GroupName : request.Portfolio != null ? request.Portfolio.Name : null;
            string groupNumber = request.Group != null ? request.Group.GroupNumber : request.Portfolio != null ? request.Portfolio.GroupNumber : null;

            if (portfolio == null && (!string.IsNullOrEmpty(groupName) || !string.IsNullOrEmpty(groupNumber)))
            {
                if (portfolio == null && !string.IsNullOrEmpty(groupName))
                {
                    List <Portfolio> portfolios = new List <Portfolio>();

                    foreach (var p in _Portfolios)
                    {
                        if (p.Name == groupName.Trim())
                        {
                            portfolios.Add(p);
                        }
                    }

                    if (portfolios.Count > 1 && !string.IsNullOrEmpty(groupNumber))
                    {
                        List <Portfolio> filteredPortfolios = new List <Portfolio>();

                        foreach (var p in portfolios)
                        {
                            if (p.GroupNumber == groupNumber)
                            {
                                filteredPortfolios.Add(p);
                            }
                        }

                        portfolios = filteredPortfolios;
                    }

                    if (portfolios.Count > 0)
                    {
                        portfolio = portfolios[0];
                    }
                }
            }

            return(portfolio);
        }
        private Transmittal FindCensus(Transmittal request)
        {
            if (request.Group == null || string.IsNullOrEmpty(request.Group.GroupName))
            {
                throw new Exception("Request missing group name");
            }

            if (request.Applicants == null || request.Applicants.Count == 0)
            {
                throw new Exception("Request missing applicants collection");
            }

            Applicant employee = null;

            if (request.Applicants != null)
            {
                foreach (var applicant in request.Applicants)
                {
                    if (applicant.Relationship == Relationship.Employee || applicant.Relationship == Relationship.Unknown)
                    {
                        if (employee != null)
                        {
                            throw new Exception("Multiple employees in request");
                        }

                        employee = applicant;
                    }
                }
            }

            if (employee == null)
            {
                throw new Exception("Couldn't find employee in request");
            }

            if (string.IsNullOrEmpty(employee.SSN))
            {
                throw new Exception("Employee is missing SSN");
            }

            Transmittal result = null;

            if (_Census.ContainsKey(request.Group.GroupName))
            {
                foreach (var transmittal in _Census[request.Group.GroupName])
                {
                    Applicant transmittalEmployee = null;

                    foreach (var applicant in transmittal.Applicants)
                    {
                        if (applicant.Relationship == Relationship.Employee || applicant.Relationship == Relationship.Unknown)
                        {
                            transmittalEmployee = applicant;
                        }
                    }

                    if (transmittalEmployee != null && transmittalEmployee.SSN == employee.SSN)
                    {
                        result = transmittal;

                        break;
                    }
                }
            }

            return(result);
        }
        private void BuildSamlRequest()
        {
            ClientScript.RegisterStartupScript(typeof(Page), "OpaqueDivider",
                                               @"
                <script language=""javascript"">
                <!--
                    var dividerID = '" + this.SamlAgentDiv.ClientID + @"';
                    var divider = document.getElementById(dividerID);

                    divider.style.visibility = 'visible';
                //-->
	            </script>"    );

            //Creating SAML response
            X509Certificate2 vendorCertificate  = GetVendorCertificate();
            X509Certificate2 selerixCertificate = GetSelerixCertificate();

            //string assertionConsumerServiceURL = "SamlResponse.aspx";
            string assertionConsumerServiceURL = "http://localhost:49000/login.aspx?Path=SAML_TEST";

            string audienceName = "whatever audience";

            SAMLResponse samlResponse = new SAMLResponse();

            samlResponse.Destination = assertionConsumerServiceURL;

            Issuer issuer = new Issuer("Vendor");

            samlResponse.Issuer = issuer;
            samlResponse.Status = new Status(SAMLIdentifiers.PrimaryStatusCodes.Success, null);

            SAMLAssertion samlAssertion = new SAMLAssertion();

            samlAssertion.Issuer = issuer;

            Subject subject = null;

            //subject = new Subject(new EncryptedID(new NameID(this._EmailText.Text), selerixCertificate, new EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl)));
            subject = new Subject(new NameID(this._EmailText.Text));

            SubjectConfirmation     subjectConfirmation     = new SubjectConfirmation(SAMLIdentifiers.SubjectConfirmationMethods.Bearer);
            SubjectConfirmationData subjectConfirmationData = new SubjectConfirmationData();

            subjectConfirmationData.Recipient           = assertionConsumerServiceURL;
            subjectConfirmationData.NotOnOrAfter        = DateTime.UtcNow.AddHours(1);
            subjectConfirmation.SubjectConfirmationData = subjectConfirmationData;

            subject.SubjectConfirmations.Add(subjectConfirmation);
            samlAssertion.Subject = subject;

            Conditions          conditions          = new Conditions(new TimeSpan(1, 0, 0));
            AudienceRestriction audienceRestriction = new AudienceRestriction();

            audienceRestriction.Audiences.Add(new Audience(audienceName));
            conditions.ConditionsList.Add(audienceRestriction);
            samlAssertion.Conditions = conditions;

            AuthnStatement authnStatement = new AuthnStatement();

            authnStatement.AuthnContext = new AuthnContext();
            authnStatement.AuthnContext.AuthnContextClassRef = new AuthnContextClassRef(SAMLIdentifiers.AuthnContextClasses.Unspecified);

            samlAssertion.Statements.Add(authnStatement);

            AttributeStatement attributeStatement = new AttributeStatement();

            Transmittal transmittal = BuildTransmittal();

            if (transmittal != null && !string.IsNullOrEmpty(this._FirstName.Text) && !string.IsNullOrEmpty(this._LastName.Text))
            {
                attributeStatement.Attributes.Add(new SAMLAttribute("Transmittal", SAMLIdentifiers.AttributeNameFormats.Basic, null, SerializationHelper.SerializeToString(transmittal)));
            }

            samlAssertion.Statements.Add(attributeStatement);

//          EncryptedAssertion encryptedAssertion = new EncryptedAssertion(samlAssertion, selerixCertificate, new EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl));
//          samlResponse.Assertions.Add(encryptedAssertion);
            samlResponse.Assertions.Add(samlAssertion);

            //Created SAML response

            //Sending SAML response

            // Serialize the SAML response for transmission.
            XmlElement samlResponseXml = samlResponse.ToXml();

            // Sign the SAML response.
            SAMLMessageSignature.Generate(samlResponseXml, vendorCertificate.PrivateKey, vendorCertificate);

            HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
            HttpContext.Current.Response.AddHeader("Pragma", "no-cache");

            IdentityProvider.SendSAMLResponseByHTTPPost(HttpContext.Current.Response, assertionConsumerServiceURL, samlResponseXml, "");// for test purposes
        }
        private void SetDefaultUploadTransmittal()
        {
            Transmittal result = new Transmittal();

            if (uploadType.SelectedValue == "UploadCensus")
            {
                result.Type = TransmittalType.UploadApplicants;

                result.Group           = new Group();
                result.Group.GroupName = _LastPortfolioName;

                Applicant employee = new Applicant();
                employee.Relationship = Relationship.Employee;
                employee.FirstName    = "TestFirst";
                employee.LastName     = "TestLast";
                employee.BirthDate    = new DateTime(1980, 12, 24);
                employee.Sex          = Gender.Male;

                employee.SSN = _LastEmployeeSSN;

                result.Applicants = new ApplicantCollection();
                result.Applicants.Add(employee);
            }
            else if (uploadType.SelectedValue == "UploadGroup")
            {
                result.Type = TransmittalType.UploadPortfolio;

                result.Portfolio             = new Portfolio();
                result.Portfolio.Name        = _LastPortfolioName;
                result.Portfolio.GroupNumber = "TESTXXXX";

                //Enrollment info
                result.Portfolio.EnrollmentStartDate = new DateTime(2010, 12, 1);
                result.Portfolio.EnrollmentEndDate   = new DateTime(2011, 2, 15);
                result.Portfolio.PlanYearStartDate   = new DateTime(2011, 1, 1);

                //Employer Info
                result.Portfolio.Employer      = new Employer();
                result.Portfolio.Employer.Name = "Test Employer";

                result.Portfolio.Employer.Address       = new Address();
                result.Portfolio.Employer.Address.Line1 = "123 Main Ln";
                result.Portfolio.Employer.Address.Line2 = null;
                result.Portfolio.Employer.Address.City  = "Chicago";
                result.Portfolio.Employer.Address.State = "IL";
                result.Portfolio.Employer.Address.Zip   = "54342";

                //Payroll provider
                result.Portfolio.PayrollProviders = new PayrollProviderCollection();

                PayrollProvider payrollProvider = new PayrollProvider();
                payrollProvider.Name = "Payroll Dept.";

                result.Portfolio.PayrollProviders.Add(payrollProvider);

                //Relationships included in enrollment
                result.Portfolio.DependentRelationships = new RelationshipCCCollection();

                result.Portfolio.DependentRelationships.Add(new RelationshipCC(Relationship.Employee));
                result.Portfolio.DependentRelationships.Add(new RelationshipCC(Relationship.Spouse));
                result.Portfolio.DependentRelationships.Add(new RelationshipCC(Relationship.Child));

                if (_LastPortfolioID != null)
                {
                    result.Portfolio.UniqueID = _LastPortfolioID;
                }
            }

            txtUploadTransmittalBox.Text = SerializationHelper.SerializeToString(result);
        }
Exemple #18
0
        /// <summary>
        /// Handles the Click event of the submitButton control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
        private void submitButton_Click(object sender, EventArgs e)
        {
            Transmittal transmittal = null;
            string      employeeID  = this._EmployeeID.Text;

            if (!string.IsNullOrEmpty(this._XMLText.Text))
            {
                try
                {
                    transmittal = (Transmittal)SerializationHelper.DeserializeFromString(this._XMLText.Text, typeof(Transmittal));
                }
                catch (Exception exception)
                {
                    this._XMLText.Text = exception.Message;
                    Exception inner = exception.InnerException;

                    while (inner != null)
                    {
                        this._XMLText.Text += "\n" + inner.Message;
                        inner = inner.InnerException;
                    }

                    this._XMLText.Text = PrepareSourceCode(this._XMLText.Text);
                }
            }

            if (!string.IsNullOrEmpty(employeeID) && transmittal != null && transmittal.Applicants != null && transmittal.Applicants.Count > 0)
            {
                transmittal.Applicants[0].EmployeeIdent = employeeID;
            }

            Session["Transmittal"] = transmittal;

            //Creating SAML responce
            X509Certificate2 vendorCertificate  = GetVendorCertificate();
            X509Certificate2 selerixCertificate = GetSelerixCertificate();

            string assertionConsumerServiceURL = "SamlResponse.aspx";
            string audienceName = "whatever audience";

            SAMLResponse samlResponse = new SAMLResponse();

            samlResponse.Destination = assertionConsumerServiceURL;
            Issuer issuer = new Issuer("Vendor");

            samlResponse.Issuer = issuer;
            samlResponse.Status = new Status(SAMLIdentifiers.PrimaryStatusCodes.Success, null);

            SAMLAssertion samlAssertion = new SAMLAssertion();

            samlAssertion.Issuer = issuer;

            Subject subject = null;

//          subject = new Subject(new EncryptedID(new NameID(employeeID), selerixCertificate, new EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl))); //employee ID
            subject = new Subject(new NameID(employeeID)); //employee ID

            SubjectConfirmation     subjectConfirmation     = new SubjectConfirmation(SAMLIdentifiers.SubjectConfirmationMethods.Bearer);
            SubjectConfirmationData subjectConfirmationData = new SubjectConfirmationData();

            subjectConfirmationData.Recipient           = assertionConsumerServiceURL;
            subjectConfirmationData.NotOnOrAfter        = DateTime.UtcNow.AddHours(1);
            subjectConfirmation.SubjectConfirmationData = subjectConfirmationData;
            subject.SubjectConfirmations.Add(subjectConfirmation);

            samlAssertion.Subject = subject;

            Conditions          conditions          = new Conditions(new TimeSpan(1, 0, 0));
            AudienceRestriction audienceRestriction = new AudienceRestriction();

            audienceRestriction.Audiences.Add(new Audience(audienceName));
            conditions.ConditionsList.Add(audienceRestriction);
            samlAssertion.Conditions = conditions;

            AuthnStatement authnStatement = new AuthnStatement();

            authnStatement.AuthnContext = new AuthnContext();
            authnStatement.AuthnContext.AuthnContextClassRef = new AuthnContextClassRef(SAMLIdentifiers.AuthnContextClasses.Unspecified);
            samlAssertion.Statements.Add(authnStatement);

            AttributeStatement attributeStatement = new AttributeStatement();

            if (transmittal != null)
            {
                attributeStatement.Attributes.Add(new SAMLAttribute("Transmittal", SAMLIdentifiers.AttributeNameFormats.Basic, null, SerializationHelper.SerializeToString(transmittal)));

                if (transmittal.Applicants != null && transmittal.Applicants.Count > 0)
                {
                    transmittal.Applicants[0].EmployeeIdent = employeeID;
                }
            }

            //Check for Transmittal Options
            for (int i = 0; i < _TransmittalOptionsList.Items.Count; i++)
            {
                string answer = "no";

                if (_TransmittalOptionsList.Items[i].Selected)
                {
                    answer = "yes";
                }

                if (_TransmittalOptionsList.Items[i].Value == "HeaderAndFooter")
                {
                    attributeStatement.Attributes.Add(new SAMLAttribute("HeaderAndFooter", SAMLIdentifiers.AttributeNameFormats.Basic, null, answer));
                }
                else if (_TransmittalOptionsList.Items[i].Value == "Sidebar")
                {
                    attributeStatement.Attributes.Add(new SAMLAttribute("Sidebar", SAMLIdentifiers.AttributeNameFormats.Basic, null, answer));
                }
                else if (_TransmittalOptionsList.Items[i].Value == "PersonalInfo")
                {
                    attributeStatement.Attributes.Add(new SAMLAttribute("PersonalInfo", SAMLIdentifiers.AttributeNameFormats.Basic, null, answer));
                }
                else if (_TransmittalOptionsList.Items[i].Value == "Welcome")
                {
                    attributeStatement.Attributes.Add(new SAMLAttribute("Welcome", SAMLIdentifiers.AttributeNameFormats.Basic, null, answer));
                }
                else if (_TransmittalOptionsList.Items[i].Value == "Review")
                {
                    attributeStatement.Attributes.Add(new SAMLAttribute("Review", SAMLIdentifiers.AttributeNameFormats.Basic, null, answer));
                }
            }

            samlAssertion.Statements.Add(attributeStatement);

//          EncryptedAssertion encryptedAssertion = new EncryptedAssertion(samlAssertion, selerixCertificate, new EncryptionMethod(EncryptedXml.XmlEncTripleDESUrl));
//          samlResponse.Assertions.Add(encryptedAssertion);
            samlResponse.Assertions.Add(samlAssertion);

            //Created SAML response

            //Sending SAML response

            // Serialize the SAML response for transmission.
            XmlElement samlResponseXml = samlResponse.ToXml();

            // Sign the SAML response.
            SAMLMessageSignature.Generate(samlResponseXml, vendorCertificate.PrivateKey, vendorCertificate);

            HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
            HttpContext.Current.Response.AddHeader("Pragma", "no-cache");

            IdentityProvider.SendSAMLResponseByHTTPPost(HttpContext.Current.Response, assertionConsumerServiceURL, samlResponseXml, "");// for test purposes
        }