Пример #1
0
        public void TestMoveBetweenFileSystems_WhereSourceIsShare()
        {
            var tempFileName = $"temp-{DateTime.Now.ToFileTimeUtc()}.txt";
            var credentials  = _fixture.ShareCredentials;
            var directory    = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());
            var tempFilePath = _fileSystem.Path.Combine(_fixture.RootPath, tempFileName);

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            if (!_fileSystem.File.Exists(tempFilePath))
            {
                using (var streamWriter = new StreamWriter(_fileSystem.File.Create(tempFilePath)))
                {
                    streamWriter.WriteLine("Test");
                }
            }

            var moveToFilePath = _fileSystem.Path.Combine(directory, tempFileName);

            _fileSystem.File.Move(tempFilePath, moveToFilePath);

            Assert.True(_fileSystem.File.Exists(moveToFilePath));
            Assert.False(_fileSystem.File.Exists(tempFilePath));

            _fileSystem.File.Delete(moveToFilePath);
        }
Пример #2
0
        static void Main(string[] args)
        {
            var domain   = "domain";
            var username = "******";
            var password = "******";

            var sharePath = "valid_unc/smb_share_path"; //ie. \\host\sharename or smb://host/sharename

            ISMBCredentialProvider credentialProvider = new SMBCredentialProvider();
            ISMBClientFactory      clientFactory      = new SMB2ClientFactory();
            IFileSystem            fileSystem         = new SMBFileSystem(clientFactory, credentialProvider, 65536u);

            //var path = _fileSystem.Path.Combine(sharePath, "test.txt");

            using (var credential = new SMBCredential(domain, username, password, sharePath, credentialProvider)) // NOTE: You can interchange path with sharePath here.
            {                                                                                                     // SMBCredential will parse the share path from path
                //FileInfo
                //_fileSystem.FileInfo.FromFileName(path)

                //DirectoryInfo
                //_fileSystem.DirectoryInfo.FromDirectoryName(path)

                //Stream
                //using (var stream = _fileSystem.File.Open(path, System.IO.FileMode.Open))
                //{

                //}
            }
        }
Пример #3
0
        public void CheckStreamLength()
        {
            var tempFileName = $"temp-CheckStreamLength-{DateTime.Now.ToFileTimeUtc()}.txt";
            var credentials  = _fixture.ShareCredentials;
            var directory    = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());
            var tempFilePath = _fileSystem.Path.Combine(_fixture.LocalTempDirectory, tempFileName);

            var byteArray = new byte[100];

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            if (!_fileSystem.File.Exists(tempFilePath))
            {
                using (var stream = _fileSystem.File.Create(tempFilePath))
                {
                    stream.Write(byteArray, 0, 100);
                }
            }

            var fileInfo = _fileSystem.FileInfo.FromFileName(tempFilePath);
            var fileSize = fileInfo.Length;

            var destinationFilePath = _fileSystem.Path.Combine(directory, tempFileName);

            fileInfo = fileInfo.CopyTo(destinationFilePath);

            Assert.True(fileInfo.Exists);

            using (var stream = fileInfo.OpenRead())
            {
                Assert.Equal(stream.Length, fileSize);
            }

            _fileSystem.File.Delete(fileInfo.FullName);
        }
Пример #4
0
        public void CheckDeleteCompletes()
        {
            var tempFileName = $"temp-{DateTime.Now.ToFileTimeUtc()}.txt";
            var credentials  = _fixture.ShareCredentials;
            var directory    = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());
            var tempFilePath = _fileSystem.Path.Combine(_fixture.LocalTempDirectory, tempFileName);

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            if (!_fileSystem.File.Exists(tempFilePath))
            {
                using (var streamWriter = new StreamWriter(_fileSystem.File.Create(tempFilePath)))
                {
                    streamWriter.WriteLine("Test");
                }
            }

            var fileInfo = _fileSystem.FileInfo.FromFileName(tempFilePath);

            fileInfo = fileInfo.CopyTo(_fileSystem.Path.Combine(directory, tempFileName));

            fileInfo.Delete();

            _fileSystem.File.Delete(tempFilePath);
        }
Пример #5
0
        public void TestExistsForDirectory()
        {
            var credentials = _fixture.ShareCredentials;
            var filePath    = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            Assert.False(_fileSystem.File.Exists(filePath));
        }
Пример #6
0
        public void CheckDirectoryExists()
        {
            var credentials = _fixture.ShareCredentials;
            var directory   = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            Assert.True(_fileSystem.Directory.Exists(directory));
        }
Пример #7
0
        public void TestFileOpenOnExistingFile()
        {
            var credentials = _fixture.ShareCredentials;
            var filePath    = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Files.First());

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            using var fileStream = _fileSystem.File.Open(filePath, FileMode.Open);
            fileStream.Close();
        }
Пример #8
0
        public void TestExistsForNonExistingFile()
        {
            var tempFileName = $"temp-{DateTime.Now.ToFileTimeUtc()}.txt";
            var credentials  = _fixture.ShareCredentials;
            var tempFilePath = _fileSystem.Path.Combine(_fixture.RootPath, tempFileName);

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            Assert.False(_fileSystem.File.Exists(tempFilePath));
        }
Пример #9
0
        public void DoNotSetDomainNameFromUserNameIfNotNull()
        {
            var domain = "domain";
            var userName = "******";
            var combinedUserName = $"{domain}\\{userName}";

            var credential = new SMBCredential(domain, combinedUserName, "password", path, A.Fake<ISMBCredentialProvider>()); 
            Assert.Equal(domain, credential.Domain);
            Assert.Equal(combinedUserName, credential.UserName);
        }
Пример #10
0
        public void CanEnumerateFilesRootDirectory()
        {
            var credentials = _fixture.ShareCredentials;

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            var files = _fileSystem.Directory.EnumerateFiles(_fixture.RootPath, "*").ToList();

            Assert.True(files.Count >= 0); //Include 0 in case directory is empty. If an exception is thrown, the test will fail.
        }
Пример #11
0
        public void CanEnumerateFileSystemEntries()
        {
            var credentials = _fixture.ShareCredentials;

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            var fileSystemEntries = _fileSystem.Directory.EnumerateFileSystemEntries(_fixture.RootPath).ToList();

            Assert.True(fileSystemEntries.Count >= 0);
        }
Пример #12
0
        public void CanCreateNewDirectoryInfo()
        {
            var credentials = _fixture.ShareCredentials;
            var directory   = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            var directoryInfo = _fileSystem.DirectoryInfo.FromDirectoryName(directory);

            Assert.NotNull(directoryInfo);
        }
Пример #13
0
        public void CanEnumerateFilesRootDirectory_WithTrailingSeparator()
        {
            var credentials = _fixture.ShareCredentials;

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            var trailingSeparator = (_fixture.PathType == PathType.SmbUri || !RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? '/' : '\\';
            var files             = _fileSystem.Directory.EnumerateFiles($"{_fixture.RootPath}{trailingSeparator}", "*").ToList();

            Assert.True(files.Count >= 0); //Include 0 in case directory is empty. If an exception is thrown, the test will fail.
        }
Пример #14
0
        public void CanEnumerateFileSystemEntries_WithTrailingSeparator()
        {
            var credentials = _fixture.ShareCredentials;

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            var trailingSeparator = (_fixture.PathType == PathType.SmbUri || !RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? '/' : '\\';
            var fileSystemEntries = _fileSystem.Directory.EnumerateFileSystemEntries($"{_fixture.RootPath}{trailingSeparator}").ToList();

            Assert.True(fileSystemEntries.Count >= 0);
        }
Пример #15
0
        public void CheckDirectoryExists_WithTrailingSeparator()
        {
            var credentials = _fixture.ShareCredentials;
            var directory   = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            var trailingSeparator = (_fixture.PathType == PathType.SmbUri || !RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? '/' : '\\';

            Assert.True(_fileSystem.Directory.Exists($"{directory}{trailingSeparator}"));
        }
Пример #16
0
        public void CheckFullNameMatches()
        {
            var credentials = _fixture.ShareCredentials;
            var directory   = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());
            var filePath    = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Files.First());

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            var fullName = _fileSystem.FileInfo.FromFileName(filePath).FullName;

            Assert.Equal(filePath, fullName);
        }
Пример #17
0
        public void CheckFileExists()
        {
            var credentials = _fixture.ShareCredentials;
            var directory   = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());
            var filePath    = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Files.First());

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            var exists = _fileSystem.FileInfo.FromFileName(filePath).Exists;

            Assert.True(exists);
        }
Пример #18
0
        public void CanCreateDirectoryInRootDirectory()
        {
            var credentials = _fixture.ShareCredentials;

            createdTestDirectoryPath = _fileSystem.Path.Combine(_fixture.RootPath, $"test_directory-{DateTime.Now.ToFileTimeUtc()}");

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, createdTestDirectoryPath, _fixture.SMBCredentialProvider);

            var directoryInfo = _fileSystem.Directory.CreateDirectory(createdTestDirectoryPath);

            Assert.True(_fileSystem.Directory.Exists(createdTestDirectoryPath));
        }
Пример #19
0
        public void CanCreateNewDirectoryInfo_WithTrailingSeparator()
        {
            var credentials = _fixture.ShareCredentials;

            var trailingSeparator = (_fixture.PathType == PathType.SmbUri || !RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? '/' : '\\';
            var directory         = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First()) + trailingSeparator;

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            var directoryInfo = _fileSystem.DirectoryInfo.FromDirectoryName(directory);

            Assert.NotNull(directoryInfo);
        }
Пример #20
0
        public void CanCreateDirectoryInRootDirectory_WithTrailingSeparator()
        {
            var credentials = _fixture.ShareCredentials;

            var trailingSeparator = (_fixture.PathType == PathType.SmbUri || !RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? '/' : '\\';

            createdTestDirectoryPath = _fileSystem.Path.Combine(_fixture.RootPath, $"test_directory-{DateTime.Now.ToFileTimeUtc()}") + trailingSeparator;

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, createdTestDirectoryPath, _fixture.SMBCredentialProvider);

            var directoryInfo = _fileSystem.Directory.CreateDirectory(createdTestDirectoryPath);

            Assert.True(_fileSystem.Directory.Exists(createdTestDirectoryPath));
        }
Пример #21
0
        public void CheckCreateDirectoryForExistingDirectory()
        {
            var credentials = _fixture.ShareCredentials;

            var existingDirectory = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, existingDirectory, _fixture.SMBCredentialProvider);

            var existingDirectoryInfo = _fileSystem.DirectoryInfo.FromDirectoryName(existingDirectory);

            var directoryInfo = _fileSystem.Directory.CreateDirectory(existingDirectory);

            Assert.Equal(existingDirectoryInfo.FullName, directoryInfo.FullName);
        }
Пример #22
0
        public void TestFileOpen_FileModeOpenOrCreate()
        {
            var tempFileName = $"temp-{DateTime.Now.ToFileTimeUtc()}.txt";
            var credentials  = _fixture.ShareCredentials;
            var directory    = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());
            var tempFilePath = _fileSystem.Path.Combine(_fixture.RootPath, tempFileName);

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            using var fileStream = _fileSystem.File.Open(tempFilePath, FileMode.OpenOrCreate);
            fileStream.Close();

            _fileSystem.File.Delete(tempFilePath);
        }
Пример #23
0
        public void CheckReplaceWithBackup()
        {
            var credentials = _fixture.ShareCredentials;
            var directory   = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            var originalFileTime       = DateTime.Now.ToFileTimeUtc();
            var originalFilePath       = _fileSystem.Path.Combine(directory, $"replace-file-{originalFileTime}.txt");
            var originalFileBackupPath = _fileSystem.Path.Combine(directory, $"replace-file-{originalFileTime}.bak");

            if (!_fileSystem.File.Exists(originalFilePath))
            {
                using (var streamWriter = new StreamWriter(_fileSystem.File.Create(originalFilePath)))
                {
                    streamWriter.WriteLine($"{originalFileTime}");
                }
            }

            var newFileTime = DateTime.Now.ToFileTimeUtc();
            var newFilePath = _fileSystem.Path.Combine(_fixture.RootPath, $"replace-file-{newFileTime}.txt");

            if (!_fileSystem.File.Exists(newFilePath))
            {
                using (var streamWriter = new StreamWriter(_fileSystem.File.Create(newFilePath)))
                {
                    streamWriter.WriteLine($"{newFileTime}");
                }
            }

            var newFileInfo = _fileSystem.FileInfo.FromFileName(newFilePath);

            newFileInfo = newFileInfo.Replace(originalFilePath, originalFileBackupPath);

            Assert.Equal(originalFilePath, newFileInfo.FullName);
            Assert.False(_fileSystem.File.Exists(newFilePath));
            Assert.True(_fileSystem.File.Exists(originalFileBackupPath));

            using (var streamReader = new StreamReader(_fileSystem.File.OpenRead(newFileInfo.FullName)))
            {
                var line = streamReader.ReadLine();

                Assert.Equal(newFileTime.ToString(), line);
            }

            _fileSystem.File.Delete(originalFilePath);
            _fileSystem.File.Delete(originalFileBackupPath);
        }
Пример #24
0
        public void CheckMoveDirectory()
        {
            var credentials  = _fixture.ShareCredentials;
            var directory    = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());
            var newDirectory = _fileSystem.Path.Combine(directory, $"{DateTime.Now.ToFileTimeUtc()}");

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            var createDirectoryPath = _fileSystem.Path.Combine(_fixture.RootPath, $"test-move-local-directory-{DateTime.Now.ToFileTimeUtc()}");
            var directoryInfo       = _fileSystem.Directory.CreateDirectory(createDirectoryPath);

            directoryInfo.MoveTo(newDirectory);

            Assert.True(_fileSystem.Directory.Exists(newDirectory));

            _fileSystem.Directory.Delete(newDirectory);
        }
Пример #25
0
        public void CanSetCreationTime()
        {
            var tempFileName = $"temp-{DateTime.Now.ToFileTimeUtc()}.txt";
            var credentials  = _fixture.ShareCredentials;
            var tempFilePath = _fileSystem.Path.Combine(_fixture.RootPath, tempFileName);

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            if (!_fileSystem.File.Exists(tempFilePath))
            {
                using (var stream = _fileSystem.File.Create(tempFilePath))
                {
                }
            }

            _fileSystem.File.SetCreationTime(tempFilePath, DateTime.Now.AddMinutes(10));

            _fileSystem.File.Delete(tempFilePath);
        }
Пример #26
0
        public void CheckMoveDirectory_WithTrailingSeparator()
        {
            var credentials = _fixture.ShareCredentials;

            var trailingSeparator = (_fixture.PathType == PathType.SmbUri || !RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) ? '/' : '\\';
            var directory         = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First()) + trailingSeparator;
            var newDirectory      = _fileSystem.Path.Combine(directory, $"{DateTime.Now.ToFileTimeUtc()}") + trailingSeparator;

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            var createDirectoryPath = _fileSystem.Path.Combine(_fixture.RootPath, $"test-move-local-directory-{DateTime.Now.ToFileTimeUtc()}");
            var directoryInfo       = _fileSystem.Directory.CreateDirectory(createDirectoryPath);

            directoryInfo.MoveTo(newDirectory);

            Assert.True(_fileSystem.Directory.Exists(newDirectory));

            _fileSystem.Directory.Delete(newDirectory);
        }
        public void FileOpsInContext()
        {
            var path = "valid_unc/smb_path";

            using (var credential = new SMBCredential("domain", "username", "password", path, _credentialProvider))
            {
                //FileInfo
                //_fileSystem.FileInfo.FromFileName(path)

                //DirectoryInfo
                //_fileSystem.DirectoryInfo.FromDirectoryName(path)

                //Stream
                //using (var stream = _fileSystem.File.Open(path, System.IO.FileMode.Open))
                //{

                //}
            }
        }
Пример #28
0
        public void TestFileOpenOnCreatedFile()
        {
            var tempFileName = $"temp-{DateTime.Now.ToFileTimeUtc()}.txt";
            var credentials  = _fixture.ShareCredentials;
            var directory    = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Directories.First());
            var tempFilePath = _fileSystem.Path.Combine(_fixture.RootPath, tempFileName);

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, directory, _fixture.SMBCredentialProvider);

            if (!_fileSystem.File.Exists(tempFilePath))
            {
                using (var streamWriter = new StreamWriter(_fileSystem.File.Create(tempFilePath)))
                {
                    streamWriter.WriteLine("Test");
                }
            }

            using var fileStream = _fileSystem.File.Open(tempFilePath, FileMode.Open);
            fileStream.Close();

            _fileSystem.File.Delete(tempFilePath);
        }
Пример #29
0
        public void TestCopyWithOverride()
        {
            var tempFileName = $"temp-copyto-override-{DateTime.Now.ToFileTimeUtc()}.txt";
            var credentials  = _fixture.ShareCredentials;
            var testFilePath = _fileSystem.Path.Combine(_fixture.RootPath, _fixture.Files.First());
            var tempFilePath = _fileSystem.Path.Combine(_fixture.RootPath, tempFileName);

            using var credential = new SMBCredential(credentials.Domain, credentials.Username, credentials.Password, _fixture.RootPath, _fixture.SMBCredentialProvider);

            if (!_fileSystem.File.Exists(tempFilePath))
            {
                var stream = _fileSystem.File.Create(tempFilePath);
                stream.Close();
            }

            var testFileInfo = _fileSystem.FileInfo.FromFileName(testFilePath);

            testFileInfo.CopyTo(tempFilePath, overwrite: true);


            Assert.True(_fileSystem.File.Exists(tempFilePath));

            _fileSystem.File.Delete(tempFilePath);
        }
        public async Task <IActionResult> td([FromBody] DocumentModel[] docs)
        {
            if (docs.Length == 0)
            {
                return(new NoContentResult());
            }

            SMB2Client client = new SMB2Client();

            string site     = docs[0].site;
            string url      = _baseurl + "sites/" + site;
            string listname = docs[0].list;
            Guid   listGuid = new Guid(listname);

            using (ClientContext cc = AuthHelper.GetClientContextForUsernameAndPassword(url, _username, _password))
                try
                {
                    SMBCredential SMBCredential = new SMBCredential()
                    {
                        username = Environment.GetEnvironmentVariable("smb_username"),
                        password = Environment.GetEnvironmentVariable("smb_password"),
                        domain   = Environment.GetEnvironmentVariable("domain"),
                        ipaddr   = Environment.GetEnvironmentVariable("ipaddr"),
                        share    = Environment.GetEnvironmentVariable("share"),
                    };

                    var  serverAddress = System.Net.IPAddress.Parse(SMBCredential.ipaddr);
                    bool success       = client.Connect(serverAddress, SMBTransportType.DirectTCPTransport);

                    NTStatus      nts       = client.Login(SMBCredential.domain, SMBCredential.username, SMBCredential.password);
                    ISMBFileStore fileStore = client.TreeConnect(SMBCredential.share, out nts);


                    List            list   = cc.Web.Lists.GetById(listGuid);
                    List <Metadata> fields = SharePointHelper.GetFields(cc, list);
                    //List list = cc.Web.Lists.GetByTitle(listname);

                    for (int i = 0; i < docs.Length; i++)
                    {
                        string filename    = docs[i].filename;
                        string file_url    = docs[i].file_url;
                        var    inputFields = docs[i].fields;
                        var    taxFields   = docs[i].taxFields;

                        FileCreationInformation newFile = SharePointHelper.GetFileCreationInformation(file_url, filename, SMBCredential, client, nts, fileStore);
                        ///FileCreationInformation newFile = SharePointHelper.GetFileCreationInformation(file_url, filename);

                        if (newFile == null)
                        {
                            _logger.LogError("Failed to upload. Skip: " + filename);
                            continue;
                        }

                        File uploadFile;
                        if (docs[i].foldername == null)
                        {
                            uploadFile = list.RootFolder.Files.Add(newFile);
                        }
                        else
                        {
                            string foldername  = docs[i].foldername;
                            string sitecontent = docs[i].sitecontent;

                            //Folder folder = list.RootFolder.Folders.GetByUrl(foldername);

                            Folder folder = SharePointHelper.GetFolder(cc, list, foldername);
                            if (folder == null && taxFields != null)
                            {
                                folder = SharePointHelper.CreateDocumentSetWithTaxonomy(cc, list, sitecontent, foldername, inputFields, fields, taxFields);
                            }
                            else if (folder == null)
                            {
                                folder = SharePointHelper.CreateFolder(cc, list, sitecontent, foldername, inputFields, fields);
                            }

                            //cc.ExecuteQuery();
                            uploadFile = folder.Files.Add(newFile);
                        }

                        _logger.LogInformation("Upload file: " + newFile.Url);

                        ListItem item = uploadFile.ListItemAllFields;


                        if (taxFields != null)
                        {
                            var clientRuntimeContext = item.Context;
                            for (int t = 0; t < taxFields.Count; t++)
                            {
                                var inputField = taxFields.ElementAt(t);
                                var fieldValue = inputField.Value;

                                var field = list.Fields.GetByInternalNameOrTitle(inputField.Key);
                                cc.Load(field);
                                cc.ExecuteQuery();
                                var taxKeywordField = clientRuntimeContext.CastTo <TaxonomyField>(field);

                                Guid   _id     = taxKeywordField.TermSetId;
                                string _termID = TermHelper.GetTermIdByName(cc, fieldValue, _id);

                                TaxonomyFieldValue termValue = new TaxonomyFieldValue()
                                {
                                    Label    = fieldValue.ToString(),
                                    TermGuid = _termID,
                                };


                                taxKeywordField.SetFieldValueByValue(item, termValue);
                                taxKeywordField.Update();
                            }
                        }

                        DateTime dtMin = new DateTime(1900, 1, 1);
                        Regex    regex = new Regex(@"~t.*");
                        if (inputFields != null)
                        {
                            foreach (KeyValuePair <string, string> inputField in inputFields)
                            {
                                if (inputField.Value == null || inputField.Value == "")
                                {
                                    continue;
                                }


                                string fieldValue = inputField.Value;
                                Match  match      = regex.Match(fieldValue);

                                Metadata field = fields.Find(x => x.InternalName.Equals(inputField.Key));
                                if (field.TypeAsString.Equals("User"))
                                {
                                    int uid = SharePointHelper.GetUserId(cc, fieldValue);
                                    item[inputField.Key] = new FieldUserValue {
                                        LookupId = uid
                                    };
                                }
                                //endre hard koding
                                else if (inputField.Key.Equals("Modified_x0020_By") || inputField.Key.Equals("Created_x0020_By") || inputField.Key.Equals("Dokumentansvarlig"))
                                {
                                    StringBuilder sb = new StringBuilder("i:0#.f|membership|");
                                    sb.Append(fieldValue);
                                    item[inputField.Key] = sb;
                                }
                                else if (match.Success)
                                {
                                    fieldValue = fieldValue.Replace("~t", "");
                                    if (DateTime.TryParse(fieldValue, out DateTime dt))
                                    {
                                        if (dtMin <= dt)
                                        {
                                            item[inputField.Key] = dt;
                                            _logger.LogInformation("Set field " + inputField.Key + "to " + dt);
                                        }
                                        else
                                        {
                                            continue;
                                        }
                                    }
                                }
                                else
                                {
                                    item[inputField.Key] = fieldValue;
                                    _logger.LogInformation("Set " + inputField.Key + " to " + fieldValue);
                                }
                            }
                            item.Update();
                        }


                        try
                        {
                            await cc.ExecuteQueryAsync();

                            Console.WriteLine("Successfully uploaded " + newFile.Url + " and updated metadata");
                        }
                        catch (System.Exception e)
                        {
                            _logger.LogError("Failed to update metadata.");
                            Console.WriteLine(e);
                            continue;
                        }
                    }
                }
                catch (System.Exception)
                {
                    throw;
                }
            finally
            {
                client.Logoff();
                client.Disconnect();
            }

            return(new NoContentResult());
        }