public async Task <IActionResult> GetVersion([FromBody] GetVersion.Request req) { var masterDataPath = new MasterDataPath(); await masterDataPath.FetchAsync(); return(Ok(new GetVersion.Response { masterDataVersion = masterDataPath.Model.version, })); }
public static async Task LoadAsync() { var masterDataPath = new MasterDataPath(); if (false == await masterDataPath.FetchAsync()) { Logger.Logging(new LogObj().AddChild(new LogModels.ErrorReport { Msg = "Not found MasterDataPath@Kvs!", })); return; } if ((LatestMasterData != null && LatestMasterData.VersionStr == masterDataPath.Model.version) && masterDataPath.Model.updateDate == LatestMasterDataUpdateDate) { // Already Loaded return; } var path = ""; var rawJson = ""; if (!string.IsNullOrEmpty(masterDataPath.Model.s3KeyPlain)) { try { path = $"{DeliveryDataInfo.S3BucketName}/{masterDataPath.Model.s3KeyPlain}"; Logger.Logging(new LogObj().AddChild(new LogModels.MasterDataStartLoading { Path = path, UpdateDate = masterDataPath.Model.updateDate, Date = DateTime.UtcNow, })); var s3Client = new AmazonS3Client( Amazon.RegionEndpoint.GetBySystemName(DeliveryDataInfo.S3BucketRegion) ); var getReq = new GetObjectRequest { BucketName = DeliveryDataInfo.S3BucketName, Key = masterDataPath.Model.s3KeyPlain, }; using (var getRes = await s3Client.GetObjectAsync(getReq)) { using (var reader = new System.IO.StreamReader(getRes.ResponseStream)) { rawJson = await reader.ReadToEndAsync(); } } } catch (Exception ex) { return; } } else { path = $"{masterDataPath.Model.pathPlain}"; Logger.Logging(new LogObj().AddChild(new LogModels.MasterDataStartLoading { Path = path, UpdateDate = masterDataPath.Model.updateDate, Date = DateTime.UtcNow, })); var requester = new JsonSrcRequester(); var response = await requester.GetAsync(masterDataPath.Model.pathPlain); if (response.StatusCode != System.Net.HttpStatusCode.OK) { Logger.Logging(new LogObj().AddChild(new LogModels.ErrorReport { Msg = $"Not found JsonFile at \"{masterDataPath.Model.pathPlain}\".", })); return; } rawJson = response.Payload; } var masterData = await ParseAsync( rawJson, masterDataPath.Model.pathEncrypt, masterDataPath.Model.pathPlain); LatestMasterData = masterData; LatestMasterDataUpdateDate = masterDataPath.Model.updateDate; Logger.Logging(new LogObj().AddChild(new LogModels.MasterDataEndLoading { Path = path, UpdateDate = masterDataPath.Model.updateDate, Date = DateTime.UtcNow, })); }
public async Task <IActionResult> SetPath([FromBody] SetPath.Request req) { try { var requester = new DummyRequester(); var plainPath = req.path; var resPlain = await requester.GetAsync(plainPath); if (resPlain.StatusCode != System.Net.HttpStatusCode.OK) { return(BadRequest("Not Found: plain masterdata.")); } var encryptPath = req.path.Substring(0, req.path.Length - Path.GetExtension(req.path).Length); var resEncrypt = await requester.GetBinaryAsync(encryptPath); if (resEncrypt.StatusCode != System.Net.HttpStatusCode.OK) { return(BadRequest("Not Found: encryption masterdata.")); } var s3PutClient = new AmazonS3Client( Amazon.RegionEndpoint.GetBySystemName(DeliveryDataInfo.S3BucketRegion) ); var plainKey = evolib.Util.KeyGen.GetUrlSafe(64); { var putReq = new PutObjectRequest() { BucketName = DeliveryDataInfo.S3BucketName, Key = plainKey, InputStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(resPlain.Payload)), }; var putRes = await s3PutClient.PutObjectAsync(putReq); } var encryptkey = evolib.Util.KeyGen.GetUrlSafe(32); { var putReq = new PutObjectRequest() { BucketName = DeliveryDataInfo.S3BucketName, Key = encryptkey, InputStream = new MemoryStream(resEncrypt.Payload), }; var putRes = await s3PutClient.PutObjectAsync(putReq); } var masterData = await MasterDataLoader.ParseAsync(resPlain.Payload, "", ""); var masterDataPath = new MasterDataPath(); masterDataPath.Model.pathSrc = req.path; masterDataPath.Model.s3KeyPlain = plainKey; masterDataPath.Model.pathPlain = $"https://{DeliveryDataInfo.CfDomainName }/{plainKey}"; masterDataPath.Model.pathEncrypt = $"https://{DeliveryDataInfo.CfDomainName }/{encryptkey}"; masterDataPath.Model.updateDate = System.DateTime.UtcNow; masterDataPath.Model.version = masterData.VersionStr; await masterDataPath.SaveAsync(); System.Action <GenericData> pushRecord = (record) => { record.MasterDataPathRecord( req.path, plainKey, $"https://{DeliveryDataInfo.CfDomainName }/{plainKey}", $"https://{DeliveryDataInfo.CfDomainName }/{encryptkey}", masterData.VersionStr ); }; var rec = await Common2DB.GenericDatas.FindAsync(GenericData.Type.MasterDataPath); if (rec == null) { rec = new GenericData(); pushRecord(rec); await Common2DB.GenericDatas.AddAsync(rec); } else { pushRecord(rec); } await Common2DB.SaveChangesAsync(); var res = new SetPath.Response(); return(Ok(res)); } catch (System.Exception e) { return(BadRequest("Failed to update.")); } }
public async Task <IActionResult> SetPath(string path, string pathEncrypt) { try { if (string.IsNullOrEmpty(pathEncrypt)) { pathEncrypt = path.Substring(0, path.Length - Path.GetExtension(path).Length); } var requester = new DummyRequester(); var response = await requester.GetAsync(pathEncrypt); if (response.StatusCode != System.Net.HttpStatusCode.OK) { return(BadRequest("param: pathEncrypt is invalid.")); } response = await requester.GetAsync(path); if (response.StatusCode != System.Net.HttpStatusCode.OK) { return(BadRequest("param: path is invalid.")); } var masterData = await MasterDataLoader.ParseAsync(response.Payload, "", ""); var masterDataPath = new MasterDataPath(); masterDataPath.Model.pathSrc = path; masterDataPath.Model.s3KeyPlain = ""; masterDataPath.Model.pathPlain = path; masterDataPath.Model.pathEncrypt = pathEncrypt; masterDataPath.Model.updateDate = System.DateTime.UtcNow; masterDataPath.Model.version = masterData.VersionStr; await masterDataPath.SaveAsync(); System.Action <GenericData> pushRecord = (record) => { record.MasterDataPathRecord( path, "", path, pathEncrypt, masterData.VersionStr ); }; var rec = await Common2DB.GenericDatas.FindAsync(GenericData.Type.MasterDataPath); if (rec == null) { rec = new GenericData(); pushRecord(rec); await Common2DB.GenericDatas.AddAsync(rec); } else { pushRecord(rec); } await Common2DB.SaveChangesAsync(); } catch (System.Exception ex) { return(BadRequest(ex.Message)); } var res = new SetPath.Response(); return(Ok(res)); }