Пример #1
0
        public static List <ValidationError> AsValidationError(this PKIResult data)
        {
            var errors = new List <ValidationError>();

            try
            {
                if (data.ErrorType == PKIErrorType.DataFile)
                {
                    foreach (var item in data.FileData)
                    {
                        if (item.Value.GetType() == typeof(FileUpload))
                        {
                            var file = (FileUpload)data.FileData[item.Key];
                            if (!file.Success)
                            {
                                errors.Add(new ValidationError(item.Key, file.ErrorMSG));
                            }
                        }
                        else
                        {
                            foreach (var file in (List <FileUpload>)data.FileData[item.Key])
                            {
                                if (!file.Success)
                                {
                                    errors.Add(new ValidationError(item.Key, file.ErrorMSG));
                                }
                            }
                        }
                    }
                }
                else if (data.ErrorType == PKIErrorType.Certificate)
                {
                    errors.Add(new ValidationError("ใบรับรอง", data.ErrorMessage));
                }
            }
            catch (Exception ex)
            {
            }
            return(errors);
        }
Пример #2
0
        public static List <ExtractSignFileModel> GetFileDecrypt(string Type, System.Web.HttpPostedFileBase DataUpload, byte[] certBytes, string AttFileType, List <FILE_ATTACH_CONFIG> configModel)//A=Attract,R=Reportfile
        {
            List <ExtractSignFileModel> ListRII = new List <ExtractSignFileModel>();

            var    dicEntry = new Dictionary <string, MemoryStream>();
            Stream unzippedEntryStream;


            ZipArchive archive = new ZipArchive(DataUpload.InputStream);

            foreach (ZipArchiveEntry entry in archive.Entries)
            {
                dicEntry = null;

                #region :::::::::Extract File:::::::

                if (entry.FullName.EndsWith(".signed", StringComparison.Ordinal))
                {
                    unzippedEntryStream = entry.Open();

                    string sFileName    = "";
                    string sSignature   = "";
                    byte[] ByteSignFile = CompressHelper.StreamtoByteArray(unzippedEntryStream);

                    using (var stream = new MemoryStream(ByteSignFile))
                    {
                        dicEntry = CompressHelper.ToVerifySined(stream);

                        byte[] dataBuffer = new byte[] { };
                        byte[] signBuffer = new byte[] { };
                        //Step 2: Verify Data
                        if (dicEntry != null)
                        {
                            //var certBytes = File.ReadAllBytes(pubkey);  // มาจาก ที่เค้า Register ไว้ในระบบ

                            foreach (var dic in dicEntry)
                            {
                                if (dic.Key == "Signed.txt")
                                {
                                    signBuffer = dic.Value.ToArray();
                                    sSignature = Encoding.UTF8.GetString(signBuffer.ToArray());
                                    // signBuffer = CompressHelper.StreamtoByteArray(dic.Value);
                                }
                                else if (Type == "R" && dic.Key.EndsWith(".xlsx"))//report
                                {
                                    dataBuffer = dic.Value.ToArray();
                                    //dataBuffer = CompressHelper.StreamtoByteArray(dic.Value);

                                    sFileName = dic.Key;
                                }
                                else if (Type == "A")/// attach
                                {
                                    string strExtension = Path.GetExtension(dic.Key);

                                    //if (AttFileType.Contains(strExtension))
                                    //{
                                    decimal dm_result = configModel.Where(s => s.FILE_TYPE == strExtension)
                                                        .Select(s => Convert.ToDecimal(s.FILE_SIZE)).Sum();

                                    if (!dm_result.IsNullOrEmpty() && dm_result > 0) //เช็ค size by file Extension
                                    {
                                        if (decimal.Divide(dataBuffer.Length, 1048576) <= dm_result)
                                        {
                                            dataBuffer = dic.Value.ToArray();
                                            sFileName  = dic.Key;
                                        }
                                    }

                                    //}
                                }
                            }
                            if (dataBuffer.Length > 0)
                            {
                                var pki = new PKIHelper(CertType.PublicKey, certBytes);
                                //Output For Debug
                                PKIResult verPkiResult = pki.Verify(dataBuffer, signBuffer);

                                if (verPkiResult.Success)
                                {
                                    ExtractSignFileModel LIST_CONTRACT = new ExtractSignFileModel();

                                    LIST_CONTRACT.DOCUMENT_UPLOAD = DataUpload;
                                    LIST_CONTRACT.BLOB_FILE       = dataBuffer;
                                    LIST_CONTRACT.FILE_SIZE       = decimal.Divide(dataBuffer.Length, 1048576).ToString("N4");
                                    LIST_CONTRACT.FILE_NAME       = sFileName;
                                    LIST_CONTRACT.DATA_TYPE       = Type;
                                    LIST_CONTRACT.CERTIFICATE_NO  = verPkiResult.CerNumber;
                                    LIST_CONTRACT.SIGNATURE_SIGN  = sSignature;
                                    LIST_CONTRACT.BLOB_FILE_HASH  = dataBuffer.GetHashCode().ToString();

                                    ListRII.Add(LIST_CONTRACT);
                                }
                            }
                        }
                    }
                }

                #endregion :::::::::Extract File:::::::
            }

            return(ListRII);
        }