public static bool GetGlobalConfig(
            ref DataAccessTools dA,
            ref PawnSecVO pwnSec,
            out string decryptKey)
        {
            //Set changed public key to false
            decryptKey = string.Empty;

            //Get global configuration
            DataReturnSet globalConfig;

            if (!DataAccessService.ExecuteQuery(false,
                                                PawnStoreSetupQueries.SELECT_PAWNSEC_GLOBAL,
                                                "globalconfig",
                                                PAWNSEC,
                                                out globalConfig,
                                                ref dA))
            {
                MessageBox.Show("Could not query global configuration from pawn sec",
                                "Alert");
                return(false);
            }

            if (globalConfig == null || globalConfig.NumberRows <= 0)
            {
                MessageBox.Show("Invalid or unexpected number of global config rows returned",
                                "Alert");
                return(false);
            }

            //Retrieve the data row
            DataReturnSetRow globDr;

            if (!globalConfig.GetRow(0, out globDr))
            {
                MessageBox.Show("Could not retrieve first row of the global config data table",
                                "Alert");
                return(false);
            }

            pwnSec.GlobalConfiguration.Version =
                Utilities.GetStringValue(globDr.GetData("APPVERSIONID"));
            pwnSec.GlobalConfiguration.BaseTemplatePath =
                Utilities.GetStringValue(globDr.GetData("TEMPLATEPATH"));
            //BZ 485: RB:  The following line needs to be added to pickup the base log path and keep it from getting hard coded.
            pwnSec.GlobalConfiguration.BaseLogPath =
                Utilities.GetStringValue(globDr.GetData("LOGPATH"));
            pwnSec.GlobalConfiguration.BaseMediaPath =
                Utilities.GetStringValue(globDr.GetData("MEDIAPATH"));
            pwnSec.GlobalConfiguration.AdobeReaderPath =
                Utilities.GetStringValue(globDr.GetData("ADOBEPATH"));
            pwnSec.GlobalConfiguration.GhostScriptPath =
                Utilities.GetStringValue(globDr.GetData("GHOSTPATH"));
            //Decrypt the global public key
            var globPubKeyEnc = Utilities.GetStringValue(globDr.GetData("PUBLICKEY"));
            var globPubKeyDec =
                StringUtilities.Decrypt(globPubKeyEnc,
                                        Common.Properties.Resources.PrivateKey,
                                        true);

            //Set the global public key if we do not have one
            if (string.IsNullOrEmpty(pwnSec.GlobalConfiguration.DataPublicKey))
            {
                pwnSec.GlobalConfiguration.DataPublicKey = globPubKeyDec;
            }

            //If we made it here, we were successful in acquiring global configuration
            decryptKey = globPubKeyDec + Common.Properties.Resources.PrivateKey;

            //Pull MD5 hash
            DataReturnSet verDataOut;

            if (!DataAccessService.ExecuteQuery(false, "select verchk from pawnsec.storeappversion where id = 5",
                                                "storeappversion", PAWNSEC, out verDataOut, ref dA))
            {
                MessageBox.Show("Could not retrieve version row from pawnsec");
                return(false);
            }

            //Validate data set
            if (verDataOut == null || verDataOut.NumberRows <= 0)
            {
                MessageBox.Show("No rows returned from storeappversion table in pawnsec");
                return(false);
            }

            //Extract row data
            DataReturnSetRow verRow;

            if (!verDataOut.GetRow(0, out verRow))
            {
                MessageBox.Show("Could not retrieve row data from pawnsec appversion data set");
                return(false);
            }

            //Retrieve remote MD5 value for this application
            var remoteMD5 = Utilities.GetStringValue(verRow.GetData("VERCHK"));

            //Generate MD5 value for this application version
            var appMD5 = StringUtilities.GenerateRawMD5Hash(Assembly.GetExecutingAssembly().GetName().Version.ToString(), Encoding.ASCII);

            //Ensure the MD5 keys match
            if (!string.Equals(remoteMD5, appMD5, StringComparison.OrdinalIgnoreCase))
            {
                MessageBox.Show("App version in pawn sec does not match the executing assembly version.");
                return(false);
            }

            return(true);
        }
        /*
         * select storenumber, storage_id, storage_date, storage_time from ccsowner.pawndocumentregistry pdr
         *  where PDR.STORENUMBER = '02030'
         *  and   PDR.DOC_TYPE = 'PDF'
         *  and   PDR.RECEIPTDETAIL_NUMBER = 0
         *  and   PDR.TICKET_NUMBER = 0
         *  and   PDR.CUSTOMERNUMBER is null
         *  and   PDR.STORAGE_DATE > (sysdate-90);
         *
         */

        private void submitStoreButton_Click(object sender, RoutedEventArgs e)
        {
            if (this.storeCalendar != null)
            {
                this.storeCalendar.IsEnabled = false;
            }
            //Check file time - we do not want to hit production if the time limit is still in effect
            TupleType <long, long, string> timeData;

            if (TimeFileExists() && WithinTimeLimit(out timeData))
            {
                var diffTime = timeData.Right;
                MessageBox.Show("You are still within the time restriction limit. " + Environment.NewLine + " The application will now close.", "*** TIME LIMIT WARNING ***");
                Application.Current.Shutdown();
                this.Close();
                return;
            }
            if (!string.IsNullOrEmpty(this.selectedStore))
            {
                //Check to see if the store is in the list
                if (this.storeList.BinarySearch(this.selectedStore) < 0)
                {
                    MessageBox.Show("That store has not yet been converted to Cashlinx.  Please enter a different store number.");
                    return;
                }
                string errTxt;
                var    dTools = this.CshLnxDataTools;
                this.submitStoreButton.IsEnabled = false;
                var ninetyDaysAgo   = DateTime.Now.Date.Subtract(new TimeSpan(90, 0, 0, 0));
                var toDateConstruct = string.Format(
                    "to_date('{0}/{1}/{2}', 'MM/DD/YYYY')",
                    ninetyDaysAgo.Date.Month.ToString().PadLeft(2, '0'),
                    ninetyDaysAgo.Date.Day.ToString().PadLeft(2, '0'),
                    ninetyDaysAgo.Date.Year.ToString().PadLeft(4, '0'));

                if (!InitCouchDB())
                {
                    MessageBox.Show("Cannot connect to couch server! Exiting...", "Exit Warning");
                    Application.Current.Shutdown();
                    this.DialogResult = false;
                    this.Close();
                }
                var procMsg = new ProcessingMessage("*** PLEASE WAIT - FINDING DOCUMENTS ***");
                procMsg.Show();
                if (!DataAccessService.ExecuteQuery(
                        false,
                        string.Format(
                            "select storage_id, storage_time from ccsowner.pawndocumentregistry where storenumber = '{0}' " +
                            "and receiptdetail_number = 0 and ticket_number = 0 and doc_type = 'PDF' " +
                            "and customernumber is null and storage_date > {1} order by storage_time desc",
                            this.selectedStore, toDateConstruct),
                        "ccsowner.pawndocumentregistry",
                        PawnStoreProcedures.CCSOWNER,
                        out dstrStorageData,
                        ref dTools))
                {
                    procMsg.Hide();
                    errTxt = string.Format(
                        "Could not find any DSTR documents for that store");
                    showError(errTxt);
                    this.submitStoreButton.IsEnabled = true;
                    return;
                }
                if (dstrStorageData == null || dstrStorageData.NumberRows <= 0)
                {
                    procMsg.Hide();
                    errTxt = string.Format(
                        "Could not find any DSTR documents to view");
                    showError(errTxt);
                    this.submitStoreButton.IsEnabled = true;
                    return;
                }

                //Collect dates into a temporary map
                this.dateStorageMap.Clear();
                bool foundValidDoc = false;
                for (var j = 0; j < dstrStorageData.NumberRows; ++j)
                {
                    DataReturnSetRow dRow;
                    if (!dstrStorageData.GetRow(j, out dRow))
                    {
                        continue;
                    }
                    var dRowDate = Utilities.GetDateTimeValue(dRow.GetData("STORAGE_TIME"), DateTime.Now.Date);
                    List <PairType <string, Document> > storageIds;
                    var ticksKey = dRowDate.Date.Ticks;
                    if (CollectionUtilities.isNotEmptyContainsKey(this.dateStorageMap, ticksKey))
                    {
                        storageIds = this.dateStorageMap[ticksKey];
                    }
                    else
                    {
                        storageIds = new List <PairType <string, Document> >();
                        this.dateStorageMap.Add(ticksKey, storageIds);
                    }
                    //Get the storage id first
                    var      storageId = Utilities.GetStringValue(dRow.GetData("STORAGE_ID"), string.Empty);
                    Document doc;
                    if (IsDocumentDSTR(storageId, out doc))
                    {
                        storageIds.Add(new PairType <string, Document>(storageId, doc));
                        foundValidDoc = true;
                    }
                }

                procMsg.Hide();

                if (!foundValidDoc)
                {
                    procMsg.Hide();
                    errTxt = string.Format(
                        "Could not find any DSTR documents to view for this store");
                    showError(errTxt);
                    this.submitStoreButton.IsEnabled = true;
                    return;
                }


                //Update calendar
                var today        = DateTime.Now.Date;
                var tomorrowDate = DateTime.Now.Date.Add(new TimeSpan(1, 0, 0, 0));
                //Clear calendar black out dates
                this.storeCalendar.BlackoutDates.Clear();
                //Black out calendar from start of time to 90 days ago
                this.storeCalendar.BlackoutDates.Add(new CalendarDateRange(DateTime.MinValue.Date, ninetyDaysAgo.Date));
                //Black out calendar from tomorrow to the end of time
                this.storeCalendar.BlackoutDates.Add(new CalendarDateRange(tomorrowDate.Date, DateTime.MaxValue.Date));
                //Ensure store calendar is set to single date mode
                this.storeCalendar.SelectionMode = CalendarSelectionMode.SingleDate;
                //Ensure calendar is on today's date
                this.storeCalendar.SelectedDate = null;
                //Go through the ninety day range to today and black out dates we do not have storage ids for...
                var curDay = ninetyDaysAgo.Date;
                while (curDay.Date.CompareTo(today.Date) < 0)
                {
                    if (!CollectionUtilities.isNotEmptyContainsKey(this.dateStorageMap, curDay.Date.Ticks))
                    {
                        this.storeCalendar.BlackoutDates.Add(new CalendarDateRange(curDay.Date));
                        if (FileLogger.Instance.IsLogDebug)
                        {
                            FileLogger.Instance.logMessage(LogLevel.DEBUG, this, "Blackout date found = " + curDay.Date.ToLongDateString() + ", Ticks = " + curDay.Date.Ticks);
                        }
                    }
                    else
                    {
                        var idList = this.dateStorageMap[curDay.Date.Ticks];
                        if (CollectionUtilities.isEmpty(idList))
                        {
                            this.storeCalendar.BlackoutDates.Add(new CalendarDateRange(curDay.Date));
                            if (FileLogger.Instance.IsLogWarn)
                            {
                                FileLogger.Instance.logMessage(LogLevel.WARN, this, "Date with no DSTR found = " + curDay.Date.ToLongDateString() + ", Ticks = " + curDay.Date.Ticks);
                            }
                        }
                        else
                        {
                            if (FileLogger.Instance.IsLogDebug)
                            {
                                FileLogger.Instance.logMessage(LogLevel.DEBUG, this, "Valid date found = " + curDay.Date.ToLongDateString() + ", Ticks = " + curDay.Date.Ticks);
                            }
                        }
                    }
                    //Increment date
                    curDay = curDay.Date.Add(new TimeSpan(1, 0, 0, 0));
                }
                //Enable calendar
                this.storeCalendar.IsEnabled = true;
            }
        }
Beispiel #3
0
        private void addMachineButton_Click(object sender, EventArgs e)
        {
            string macName = this.machineNameComboBox.Text;

            if (!string.IsNullOrEmpty(macName) &&
                macName.ToLowerInvariant().Contains(CASHAM_DOMAIN))
            {
                macName = macName.Trim();
                var res = MessageBox.Show("Are you sure you want to add " + macName + " to PAWNSEC™ ?",
                                          PawnStoreSetupForm.SETUPALERT_TXT,
                                          MessageBoxButtons.YesNo,
                                          MessageBoxIcon.Question);
                if (res == DialogResult.No)
                {
                    return;
                }

                //Ensure that this machine does not exist in pawn sec already for this store or
                //any other store
                var fndMachine = false;
                var pgFm       = new InProgressForm("* VERIFYING UNIQUENESS OF MACHINE *");
                if (CollectionUtilities.isNotEmpty(this.storeData.PawnSecData.ClientMachines))
                {
                    var fndMac = this.storeData.PawnSecData.ClientMachines.Find(
                        x => x.Machine.MachineName.Equals(macName, StringComparison.OrdinalIgnoreCase));
                    if (fndMac != null)
                    {
                        fndMachine = true;
                    }
                    if (fndMachine == false &&
                        !string.IsNullOrEmpty(ipAddressTextBox.Text))
                    {
                        var trimIp = ipAddressTextBox.Text.Trim();
                        if (!string.IsNullOrEmpty(trimIp))
                        {
                            //See if IP address is used, and if so, ensure uniqueness
                            var fndIp =
                                this.storeData.PawnSecData.ClientMachines.Find(
                                    x => x.Machine.IPAddress.Equals(trimIp));
                            if (fndIp != null)
                            {
                                fndMachine = true;
                            }
                        }
                    }

                    if (fndMachine == false &&
                        !string.IsNullOrEmpty(macAddressTextBox.Text))
                    {
                        var trimMac = macAddressTextBox.Text.Trim();
                        if (!string.IsNullOrEmpty(trimMac))
                        {
                            var fndMacAddr =
                                this.storeData.PawnSecData.ClientMachines.Find(
                                    x =>
                                    x.Machine.MACAddress.Equals(trimMac, StringComparison.OrdinalIgnoreCase));
                            if (fndMacAddr != null)
                            {
                                fndMachine = true;
                            }
                        }
                    }
                }

                //Now check globally against all entries
                if (!fndMachine)
                {
                    var whereClause = "machinename = '" + macName + "'";
                    if (!string.IsNullOrEmpty(ipAddressTextBox.Text))
                    {
                        var trimIp = ipAddressTextBox.Text.Trim();
                        if (!string.IsNullOrEmpty(trimIp))
                        {
                            whereClause += " or ipaddress = '" + trimIp + "'";
                        }
                    }
                    if (!string.IsNullOrEmpty(macAddressTextBox.Text))
                    {
                        var trimMac = macAddressTextBox.Text.Trim();
                        if (!string.IsNullOrEmpty(trimMac))
                        {
                            whereClause += " or macaddress = '" + trimMac + "'";
                        }
                    }
                    DataReturnSet dS;
                    if (DataAccessService.ExecuteQuery(false,
                                                       string.Format(
                                                           "select machinename from clientregistry where {0}",
                                                           whereClause),
                                                       "clientregistry",
                                                       PawnStoreSetupForm.PAWNSEC,
                                                       out dS,
                                                       ref this.dAPawnSec))
                    {
                        if (dS != null && dS.NumberRows > 0)
                        {
                            fndMachine = true;
                        }
                    }
                    pgFm.HideMessage();
                }

                if (fndMachine)
                {
                    pgFm.Dispose();
                    MessageBox.Show(
                        "This machine already exists in the pawn security database. " + Environment.NewLine +
                        "  If this machine has moved to a different store, please " + Environment.NewLine +
                        "remove it from that store's security database first.",
                        PawnStoreSetupForm.SETUPALERT_TXT);
                    return;
                }
                pgFm.Dispose();
                this.addMachineButton.Enabled    = false;
                this.removeButton.Enabled        = false;
                this.machineNameComboBox.Enabled = false;
                var newMac     = new PawnSecVO.ClientPawnSecMachineVO();
                var newMapping = new PawnSecVO.ClientStoreMapVO();
                newMac.Machine.MachineName = macName;
                int perIdx = macName.IndexOf(".");
                if (perIdx != -1)
                {
                    newMac.Machine.WorkstationName = macName.Substring(0, perIdx);
                }
                //Set terminal number
                if (CollectionUtilities.isNotEmpty(this.storeData.PawnSecData.ClientMachines))
                {
                    newMac.StoreMachine.TerminalNumber =
                        this.storeData.PawnSecData.ClientMachines.Max(
                            x => x.StoreMachine.TerminalNumber) + 1;
                }
                else
                {
                    newMac.StoreMachine.TerminalNumber = 1;
                }
                //Set store client config id
                //ulong storeMachineId = 0;
                //this.storeData.PawnSecData.NextIdSet.GetNextIds(PawnSecVO.PawnSecNextIdVO.SELECTOR.STOCLICFG_ID, ref storeMachineId);
                newMac.StoreMachine.Id = 0;//storeMachineId;

                //Set client id
                //ulong clientRegId = 0;
                //this.storeData.PawnSecData.NextIdSet.GetNextIds(PawnSecVO.PawnSecNextIdVO.SELECTOR.CLIREG_ID, ref clientRegId);
                newMac.Machine.ClientId = 0;

                //Set mapping id
                //ulong newMappingId = 1;
                //this.storeData.PawnSecData.NextIdSet.GetNextIds(PawnSecVO.PawnSecNextIdVO.SELECTOR.CLISTOMAP_ID, ref newMappingId);
                newMapping.Id = 0;
                newMapping.ClientRegistryId = newMac.Machine.ClientId;

                //Set store config id
                newMapping.StoreClientConfigId = newMac.StoreMachine.Id;

                var curSto = this.getStoreInformation();
                if (curSto == null)
                {
                    MessageBox.Show("Cannot find store to add this client to for mapping purposes",
                                    PawnStoreSetupForm.SETUPALERT_TXT);
                    return;
                }
                newMapping.StoreSiteId   = curSto.StoreSiteId;
                newMapping.StoreConfigId = curSto.StoreConfiguration.Id;
                newMapping.StoreNumber   = this.storeNumber;
                this.storeData.PawnSecData.ClientMachines.Add(newMac);
                this.storeData.PawnSecData.ClientStoreMapList.Add(newMapping);
                this.storeData.PawnSecData.GenerateMaps();
            }
            else
            {
                MessageBox.Show(
                    "Please enter a valid machine name. It must contain the full domain name: " + CASHAM_DOMAIN,
                    PawnStoreSetupForm.SETUPALERT_TXT);
            }
        }
        private void DSTRViewerWindowForm_Loaded(object sender, RoutedEventArgs e)
        {
            TupleType <long, long, string> timeData;

            if (IsRestrictedEnvironment())
            {
                var timeLimitValue = DSTRViewer.Properties.Settings.Default.timeLimiter;
                if (string.IsNullOrEmpty(timeLimitValue))
                {
                    timeLimitValue = "300000";
                }
                var timeLimitAct = Utilities.GetLongValue(timeLimitValue, 300000L);
                //Convert from milliseconds to minutes
                timeLimitAct = timeLimitAct / 1000 / 60;

                var res = MessageBox.Show(
                    "*************** WARNING ***************" + Environment.NewLine +
                    "  You are accessing a live production" + Environment.NewLine +
                    "  system. Your activity is being     " + Environment.NewLine +
                    "  logged and your access will be     " + Environment.NewLine +
                    "  limited to one document retrieval  " + Environment.NewLine +
                    "  every " + timeLimitAct + " minutes. If you do not  " + Environment.NewLine +
                    "  agree with this policy, click      " + Environment.NewLine +
                    "  Cancel. By clicking OK you are     " + Environment.NewLine +
                    "  bound to this time limit policy.   ",
                    "Time Limit Policy For Cashlinx Production Systems",
                    MessageBoxButton.OKCancel, MessageBoxImage.Stop);
                if (res == MessageBoxResult.Cancel)
                {
                    if (FileLogger.Instance.IsLogFatal)
                    {
                        FileLogger.Instance.logMessage(LogLevel.FATAL, this, "User {0} clicked cancel when presented with the production time limit policy.", this.curUserName);
                    }

                    MessageBox.Show("*** Application Exiting ***");
                    Application.Current.Shutdown();
                    this.Close();
                    return;
                }
                else if (res == MessageBoxResult.OK)
                {
                    try
                    {
                        //Determine if the file exists
                        //                        var filesExisting = Directory.GetFiles(".", TIME_FILE, SearchOption.TopDirectoryOnly);
                        //                        var fileExists = filesExisting.Length > 0;
                        if (TimeFileExists() && WithinTimeLimit(out timeData))
                        {
                            //Warn about time limit, then exit
                            MessageBox.Show(
                                "You are still in the waiting period to fetch a document from production." + Environment.NewLine +
                                "Exiting the application.",
                                "*** TIME LIMIT WARNING ***",
                                MessageBoxButton.OK, MessageBoxImage.Warning);
                            //Exit the app
                            Application.Current.Shutdown();
                            this.Close();
                            return;
                        }
                    }
                    catch (Exception eX)
                    {
                        if (FileLogger.Instance.IsLogError)
                        {
                            FileLogger.Instance.logMessage(LogLevel.ERROR, this, "Could not read time limit file data: {0}", eX.Message);
                        }
                    }
                }
            }
            checkInitialized();
            if (!initialized)
            {
                MessageBox.Show("DSTR Viewer is not initialized");
                this.Close();
            }


            //Check file time - we do not want to hit production if the time limit is still in effect
            if (TimeFileExists() && WithinTimeLimit(out timeData))
            {
                var diffTime = timeData.Right;
                MessageBox.Show("You are still within the time restriction limit.  The application will now close.", "*** TIME LIMIT WARNING ***");
                Application.Current.Shutdown();
                this.Close();
                return;
            }

            //Populate store drop down
            DataReturnSet dSet;
            string        errTxt;
            var           dTools = this.CshLnxDataTools;

            if (!DataAccessService.ExecuteQuery(
                    false,
                    "select storenumber from ccsowner.store where alias_id is not null and pawn_conversion is not null",
                    "ccsowner.store",
                    PawnStoreProcedures.CCSOWNER,
                    out dSet,
                    ref dTools))
            {
                errTxt = string.Format(
                    "Could not find any stores! Store query failed.");
                showError(errTxt);
                this.Close();
                return;
            }

            if (dSet == null || dSet.NumberRows <= 0)
            {
                errTxt = string.Format(
                    "Invalid result sets from store query!");
                showError(errTxt);
                this.Close();
                return;
            }
            //Extract the stores from the data set
            for (var j = 0; j < dSet.NumberRows; ++j)
            {
                DataReturnSetRow dRow;
                if (!dSet.GetRow(j, out dRow))
                {
                    continue;
                }
                if (dRow == null)
                {
                    continue;
                }
                var storeNum = Utilities.GetStringValue(dRow.GetData(0), string.Empty);
                if (!string.IsNullOrEmpty(storeNum))
                {
                    this.storeList.Add(storeNum);
                }
            }

            //Order them to enhance search speed
            this.storeList.Sort();

            /* No need to do this anymore with text box submit
             * //Order the stores
             * orderedShopList.Sort();
             *
             * //Put the stores into the combo box
             * foreach(var s in orderedShopList)
             * {
             *  var storeNum = s;
             *  if (storeNum != null)
             *  {
             *      var newComboItem = new ComboBoxItem
             *                         {
             *                             Content = storeNum
             *                         };
             *      this.storeComboBox.Items.Add(newComboItem);
             *  }
             * }*/
        }