//****************read credential using service account from directory 21/03/19 //public static async Task<ProjectProposalDetail> StartProposalByDirectory(string projectProposalfilename, string googleCredentialpathFile, string folderName, ViewModels.Models.Project.GoogleCredentialModel googleCredential, long Projectid, string userid) //{ // FileStream fileStream = null; // ProjectProposalDetail model = new ProjectProposalDetail(); // try // { // ProjectProposalModel res = new ProjectProposalModel(); // //var scopes = new[] { @"https://www.googleapis.com/auth/cloud-platform" }; // //var cts = new CancellationTokenSource(); // //StorageService service = new StorageService(); // //UserCredential credential; // //using (var stream = new FileStream(googleCredentialpathFile, FileMode.Open, FileAccess.Read)) // //{ // // credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( // // GoogleClientSecrets.Load(stream).Secrets, // // scopes, // // googleCredential.EmailId, CancellationToken.None); // //} // //// Create the service. // //service = new StorageService(new BaseClientService.Initializer() // //{ // // HttpClientInitializer = credential, // // ApplicationName = googleCredential.ApplicationName, // //}); // var clientSecrets = new ClientSecrets(); // clientSecrets.ClientId = "160690498129-pg9hh4gr2ucta6neiik97tv1sla1qkec.apps.googleusercontent.com"; // clientSecrets.ClientSecret = "W0Zn9o2KmJFRXDnCbmq9z5m6"; // //there are different scopes, which you can find here https://cloud.google.com/storage/docs/authentication // var scopes = new[] { @"https://www.googleapis.com/auth/devstorage.full_control" }; // var cts = new CancellationTokenSource(); // var userCredential = await GoogleWebAuthorizationBroker.AuthorizeAsync(clientSecrets, scopes, "*****@*****.**", cts.Token); // await userCredential.RefreshTokenAsync(cts.Token); // var service = new Google.Apis.Storage.v1.StorageService(); // Console.WriteLine($"---- credential service----: {service}"); // var bucketsQuery = service.Buckets.List(StaticResource.ProjectId); // bucketsQuery.OauthToken = userCredential.Token.AccessToken; // var buckets = bucketsQuery.Execute(); // var dir = Directory.GetCurrentDirectory(); // // var pathCombine = Path.Combine(dir, @"/Documents/Proposal/Proposal.docx"); // var pathCombine = Directory.GetCurrentDirectory() + @"/Documents/Proposal/Proposal.docx"; // pathCombine = pathCombine.Replace(@"\", "/"); // Console.WriteLine($"--------File local folder Path ----------: {pathCombine}"); // fileStream = new FileStream(pathCombine, FileMode.Open); // ApiResponse response = new ApiResponse(); // Console.WriteLine($"--------convert to linux window File local folder Path ----------: {fileStream}"); // var newObject = new Google.Apis.Storage.v1.Data.Object() // { // Bucket = googleCredential.BucketName, // Name = googleCredential.Projects + "/" + folderName + "/" + projectProposalfilename + "xyz" + ".docx", // }; // if (fileStream != null) // { // var uploadRequest = new ObjectsResource.InsertMediaUpload(service, newObject, googleCredential.BucketName, fileStream, "application/vnd.google-apps.document"); // uploadRequest.OauthToken = userCredential.Token.AccessToken; // var fileResponse = uploadRequest.Upload(); // Console.WriteLine($"File upload on bucket status: {fileResponse.Status}"); // var bucketFolderWithFilePath = newObject.Bucket + "/" + newObject.Name; // if (fileResponse.Status.ToString() == "Completed" && fileResponse.Exception == null) // { // model.FolderName = folderName; // model.ProposalFileName = projectProposalfilename; // model.ProposalWebLink = bucketFolderWithFilePath; // model.ProjectId = Projectid; // model.IsDeleted = false; // model.CreatedById = userid; // model.CreatedDate = DateTime.Now; // model.ProposalExtType = ".docx"; // } // } // else // { // throw new Exception(StaticResource.UnableToUploadFile); // } // } // catch (Exception ex) // { // Console.WriteLine(ex.Message); // } // finally // { // if (fileStream != null) // { // fileStream.Dispose(); // } // } // return model; //} //************************************read credential from directory using auth credentail and using env as well as directory 20/03/2019 public static async Task <ProjectProposalDetail> StartProposalByDirectory(string projectProposalfilename, string googleCredentialpathFile, string folderName, GoogleCredentialModel googleCredential, long Projectid, string userid) { FileStream fileStream = null; ProjectProposalDetail model = new ProjectProposalDetail(); try { ProjectProposalModel res = new ProjectProposalModel(); var scopes = new[] { @"https://www.googleapis.com/auth/cloud-platform" }; var cts = new CancellationTokenSource(); StorageService service = new StorageService(); UserCredential credential; using (var stream = new FileStream(googleCredentialpathFile, FileMode.Open, FileAccess.Read)) { credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, scopes, googleCredential.EmailId, CancellationToken.None); } // Create the service. service = new StorageService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = googleCredential.ApplicationName, }); Console.WriteLine($"---- credential service----: {service}"); var bucketsQuery = service.Buckets.List(StaticResource.ProjectId); bucketsQuery.OauthToken = credential.Token.AccessToken; var buckets = bucketsQuery.Execute(); //enter bucket name to which you want to upload file ApiResponse response = new ApiResponse(); var path = Directory.GetCurrentDirectory() + @"/Documents/Proposal/Proposal.docx"; Console.WriteLine($"--------File local folder Path ----------: {path}"); path = path.Replace(@"\", "/"); Console.WriteLine($"--------convert to linux window File local folder Path ----------: {path}"); var newObject = new Google.Apis.Storage.v1.Data.Object() { Bucket = googleCredential.BucketName, Name = googleCredential.Projects + "/" + folderName + "/" + projectProposalfilename + "xyz" + ".docx", }; fileStream = new FileStream(path, FileMode.Open); if (fileStream != null) { var uploadRequest = new ObjectsResource.InsertMediaUpload(service, newObject, googleCredential.BucketName, fileStream, "application/vnd.google-apps.document"); uploadRequest.OauthToken = credential.Token.AccessToken; var fileResponse = uploadRequest.Upload(); Console.WriteLine($"File upload on bucket status: {fileResponse.Status}"); var bucketFolderWithFilePath = newObject.Bucket + "/" + newObject.Name; if (fileResponse.Status.ToString() == "Completed" && fileResponse.Exception == null) { model.FolderName = folderName; model.ProposalFileName = projectProposalfilename; model.ProposalWebLink = bucketFolderWithFilePath; model.ProjectId = Projectid; model.IsDeleted = false; model.CreatedById = userid; model.CreatedDate = DateTime.Now; model.ProposalExtType = ".docx"; } } else { throw new Exception(StaticResource.UnableToUploadFile); } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (fileStream != null) { fileStream.Dispose(); } } return(model); }
public static async Task <ProjectProposalDetail> AuthExplicit(string filefullPath, string projectProposalfilename, JObject googleCredentialpathFile, string folderName, GoogleCredentialModel googleCredential, long Projectid, string userid) { ProjectProposalModel res = new ProjectProposalModel(); ProjectProposalDetail model = new ProjectProposalDetail(); //there are different scopes, which you can find here https://cloud.google.com/storage/docs/authentication //var scopes = new[] { @"https://www.googleapis.com/auth/cloud-platform" }; var scopes = new[] { @"https://www.googleapis.com/auth/devstorage.full_control" }; var cts = new CancellationTokenSource(); StorageService service = new StorageService(); ClientSecrets secrets = new ClientSecrets(); secrets.ClientId = googleCredentialpathFile["installed"]["client_id"].ToString(); secrets.ClientSecret = googleCredentialpathFile["installed"]["client_secret"].ToString(); UserCredential credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( secrets, scopes, StaticResource.EmailId, CancellationToken.None); service = new StorageService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = StaticResource.ApplicationName, }); var bucketsQuery = service.Buckets.List(StaticResource.ProjectId); bucketsQuery.OauthToken = credential.Token.AccessToken; var buckets = bucketsQuery.Execute(); // create bucket first time //var newBucket = new Google.Apis.Storage.v1.Data.Bucket() //{ // Name = "clear-fusion" //}; //var newBucketQuery = service.Buckets.Insert(newBucket, projectId); // newBucketQuery.OauthToken = userCredential.Result.Token.AccessToken; //you probably want to wrap this into try..catch block // newBucketQuery.Execute(); //enter bucket name to which you want to upload file FileStream fileStream = null; try { ApiResponse response = new ApiResponse(); Console.WriteLine("reading file path"); var path = Directory.GetCurrentDirectory() + "/Documents/Proposal/Proposal.docx"; Console.WriteLine($"File local Path with environment variables : {path}"); path = path.Replace(@"\", "/"); Console.WriteLine($"convert File local Path in linux : {path}"); var newObject = new Google.Apis.Storage.v1.Data.Object() { Bucket = googleCredential.BucketName, Name = googleCredential.Projects + "/" + folderName + "/" + projectProposalfilename + ".docx", }; fileStream = new FileStream(path, FileMode.Open); var uploadRequest = new ObjectsResource.InsertMediaUpload(service, newObject, googleCredential.BucketName, fileStream, "application/vnd.google-apps.document"); uploadRequest.OauthToken = credential.Token.AccessToken; var fileResponse = uploadRequest.Upload(); Console.WriteLine($"File upload status: {fileResponse.Status}"); var bucketFolderWithFilePath = newObject.Bucket + "/" + newObject.Name; if (fileResponse.Status.ToString() == "Completed" && fileResponse.Exception == null) { model.FolderName = folderName; model.ProposalFileName = projectProposalfilename; model.ProposalWebLink = bucketFolderWithFilePath; model.ProjectId = Projectid; model.IsDeleted = false; model.CreatedById = userid; model.CreatedDate = DateTime.Now; model.ProposalExtType = ".docx"; } else { Console.WriteLine("not completed"); throw new Exception(StaticResource.UnableToUploadFile); } } catch (Exception ex) { Console.WriteLine("Exception occured"); Console.WriteLine(ex.Message); } finally { if (fileStream != null) { fileStream.Dispose(); } } return(model); }
public async Task <ApiResponse> Handle(UploadEDIProposalFileCommand request, CancellationToken cancellationToken) { ApiResponse response = new ApiResponse(); try { long projectId = request.ProjectId; var folderDetail = await _dbContext.ProjectProposalDetail.FirstOrDefaultAsync(x => x.ProjectId == projectId && x.IsDeleted == false); //Console.WriteLine("------Before other file Credential path Upload----------"); string googleApplicationCredentail = Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS"); //Console.WriteLine($"*******************googleApplicationCredentail are:{googleApplicationCredentail}"); if (googleApplicationCredentail == null) { string GoogleServiceAccountDirectory = Path.Combine(Directory.GetCurrentDirectory(), "GoogleCredentials/" + "credentials.json"); //Console.WriteLine($"*********GoogleServiceAccountDirectory :{GoogleServiceAccountDirectory}"); GoogleServiceAccountDirectory = GoogleServiceAccountDirectory.Replace(@"\", "/"); Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", GoogleServiceAccountDirectory); } GoogleCredentialModel result = new GoogleCredentialModel { ApplicationName = StaticResource.ApplicationName, BucketName = StaticResource.BucketName, EmailId = StaticResource.EmailId, ProjectId = StaticResource.ProjectId, Projects = StaticResource.ProjectsFolderName, HR = StaticResource.HRFolderName, Accounting = StaticResource.AccountingFolderName, Store = StaticResource.StoreFolderName }; using (Stream objStream = new FileStream(Environment.GetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS"), FileMode.Open, FileAccess.Read)) { var proposaldata = await _dbContext.ProjectProposalDetail.FirstOrDefaultAsync(x => x.ProjectId == projectId && x.IsDeleted == false); string BucketName = Environment.GetEnvironmentVariable("GOOGLE_BUCKET_NAME"); string folderWithProposalFile = StaticResource.ProjectsFolderName + "/" + folderDetail.FolderName + "/" + request.fileName; //Console.WriteLine($"BucketName:{BucketName}"); string uploadedFileResponse = await GCBucket.UploadOtherProposalDocuments(BucketName, folderWithProposalFile, request.file, request.fileName, request.ext); if (uploadedFileResponse != null) { ProjectProposalDetail proposaldetails = await _dbContext.ProjectProposalDetail.FirstOrDefaultAsync(x => x.ProjectId == projectId && x.IsDeleted == false); if (proposaldetails == null) { proposaldetails = new ProjectProposalDetail(); } if (request.ProposalType == "Proposal") { proposaldetails.FolderName = folderDetail.FolderName; proposaldetails.ProposalFileName = request.fileName; proposaldetails.ProposalWebLink = uploadedFileResponse; proposaldetails.ProjectId = request.ProjectId; proposaldetails.CreatedDate = request.CreatedDate; proposaldetails.IsDeleted = false; proposaldetails.CreatedById = request.CreatedById; response.data.ProposalWebLink = uploadedFileResponse; response.data.ProposalWebLinkExtType = request.ext; } else { if (request.ProposalType == "EOI") { proposaldetails.FolderName = folderDetail.FolderName; proposaldetails.EDIFileName = request.fileName; proposaldetails.EDIFileWebLink = uploadedFileResponse; proposaldetails.EDIFileExtType = request.ext; // response folder path response.data.EDIWebLink = uploadedFileResponse; response.data.EDIWebLinkExtType = request.ext; } else if (request.ProposalType == "BUDGET") { proposaldetails.FolderName = folderDetail.FolderName; proposaldetails.BudgetFileName = request.fileName; proposaldetails.BudgetFileWebLink = uploadedFileResponse; proposaldetails.BudgetFileExtType = request.ext; // response folder path response.data.BudgetWebLink = uploadedFileResponse; response.data.BudgetWebLinkExtType = request.ext; } else if (request.ProposalType == "CONCEPT") { proposaldetails.FolderName = folderDetail.FolderName; proposaldetails.ConceptFileName = request.fileName; proposaldetails.ConceptFileWebLink = uploadedFileResponse; proposaldetails.ConceptFileExtType = request.ext; response.data.ConceptWebLink = uploadedFileResponse; response.data.ConceptWebLinkExtType = request.ext; } else if (request.ProposalType == "PRESENTATION") { proposaldetails.FolderName = folderDetail.FolderName; proposaldetails.PresentationFileName = request.fileName; proposaldetails.PresentationFileWebLink = uploadedFileResponse; proposaldetails.PresentationExtType = request.ext; // response folder path response.data.PresentationWebLink = uploadedFileResponse; response.data.PresentationWebLinkExtType = request.ext; } proposaldata.ProjectId = request.ProjectId; proposaldata.ModifiedDate = request.ModifiedDate; } if (proposaldetails.ProjectProposaldetailId == 0) { await _dbContext.ProjectProposalDetail.AddAsync(proposaldetails); await _dbContext.SaveChangesAsync(); } else { await _dbContext.SaveChangesAsync(); } response.StatusCode = StaticResource.successStatusCode; response.Message = "Success"; } else { throw new Exception("Failed to upload. Try again!"); } } } catch (Exception ex) { response.StatusCode = StaticResource.failStatusCode; response.Message = StaticResource.SomethingWrong + ex.Message; } return(response); }