Giter VIP home page Giter VIP logo

webdavmailrucloud's Introduction

WebDAV emulator for Cloud.mail.ru / Yandex.Disk


@ZZZConsulting:
Дополнительно сделан вход на Яндекс.Диск с помощью браузера.
Поддерживается всё разнообразие вариантов аутентификации, включая СМС-коды и QR-коды.

Версия .NET обновлена до 7.0, включая поддержку установки сервисом Windows.




Requirements

Usage

  -p, --port            (Default: 801) WebDAV server port or several ports separated by `,`
  -h, --host            (Default: "http://127.0.0.1") WebDAV server host with protocol (http://* for http://0.0.0.0)
  --maxthreads          (Default: 5) Maximum concurrent connections to cloud.mail.ru / disk.yandex.ru
  --use-locks           use locking feature
  --cache-listing       (Default: 30) Cache folders listing, sec
  --cache-listing-depth (Default: 1) Cache folders listing depth.
                        If large folder browsing is extremely slow, set to 2

  --protocol            (Default: WebM1Bin) Cloud protocol
                        * WebM1Bin  - (Cloud.Mail.Ru) mix of mobile and DiskO protocols
                        * WebV2     - (Cloud.Mail.Ru) [deprecated] desktop browser protocol
                        * YadWeb    - (Yandex.Disk) desktop browser protocol, see Yandex.Disk readme section
                        * YadWebV2  - (Yandex.Disk) desktop browser protocol with browser authentication, see Yandex.Disk readme section

  --use-deduplicate     Enable deduplication (upload speedup, put by hash), see Using deduplication readme section

  --install <servicename>          Install as windows service (Windows .Net 4.8/7.0 versions only)
  --install-display <displayname>  Display name for Windows service (Windows .Net 4.8/7.0 versions only)
  --uninstall <servicename>        Uninstall windows service (Windows .Net 4.8/7.0 versions only)

  --proxy-address <socks|https|http>://<address>:<port>   Use proxy
  --proxy-user <username>                                 Proxy user name
  --proxy-password <password>                             Proxy password

  --help                Display this help screen.
  --version             Display version information.

  -user-agent           overrides default 'user-agent' string in request headers while accessing clouds.
  -sec-ch-ua            overrides default 'sec-ch-ua' string in request headers while accessing clouds.

Hasher.exe usage

Calculating hashes for local files

  --files            (Group: sources) Filename(s)/wildcard(s) separated by space

  --lists            (Group: sources) Text files with wildcards/filenames separated by space

  --protocol         (Default: WebM1Bin) Cloud protocol to determine hasher

  -r, --recursive    (Default: false) Perform recursive directories scan

  --help             Display this help screen.

  --version          Display version information.

Using deduplication (upload speedup, put by hash)

Edit <Deduplicate> section in wdmrc.config:

  <Deduplicate>
    <!-- Path for disk file cache -->
    <Disk Path = "d:\Temp\WDMRC_Cache" />

    <!--
      Cache: on disk or in-memory file caching
      Target:  path with filename in cloud, .NET regular expression,
               see https://docs.microsoft.com/ru-ru/dotnet/standard/base-types/regular-expressions
      MinSize: minimum file size
      MaxSize: maximum file size
      -->
    <Rules>
      <!-- cache any path/file contains "EUREKA" in disk cache-->
      <Rule Cache="Disk" Target = "EUREKA" MinSize = "0" MaxSize = "0" />

      <!-- small files less than 15000000 bytes will be cached in memory -->
      <Rule Cache="Memory" Target = "" MinSize = "0" MaxSize = "15000000" />

      <!-- files larger than 15000000 bytes will be cached on disk -->
      <Rule Cache="Disk" Target = "" MinSize = "15000000" MaxSize = "0" />
    </Rules>
  </Deduplicate>

Then run with --use-deduplicate command line key.

Yandex.Disk

(download latest Release, use --protocol YadWebV2 command line key)

Yandex.Disk WebDAV issues

  • It seems Yandex.Disk WebDAV is limited by speed now.
  • After file uploading Yandex servers calculating hash. E.g. for a 10GB file it may take ~1..2 minutes depending on server load. So most of WebDAV clients drops connection on timeout.
  • There's no WebDAV info in official help now. WTF?

This solution allow to bypass that limits using unofficial Yandex.Disk Web API.

Yandex.Disk WebDAV authentication

There are 2 ways to get into Yandex.Disk:

  • Use login & password only. The option to use login & password only must be selected in account settings. In this case login (e.g. John or [email protected]) and main account password should be used in authentication fields. Do not use an Application password or any other special password generated by Yandex, the main original account password must be used. And no codes from SMS!
  • Use standard browser authentication. Use the YandexAuthBrowser application. In this case you can use any available Yandex authentication including SMS and QR codes. For more details read the YandexAuthBrowser section.

YandexAuthBrowser

  1. Download the package with YandexAuthBrowser.

  2. Choose a folder for the program.

  • The access to folder must be unrestricted for the program!
    The program writes into sub-folders, so it must have full unrestricted rights on the folder and sub-folders.
    C:\, C:\Program Files and so on is not a good choice, the program will not work properly. The better choice is "%userprofile%\AppData\Local\YandexAuthBrowser" folder.
  • The folder must be secured from anyone else!
    The sub-folders contain cookies and other sensitive information for easy access any of your data inside on your Yandex.Disk!
    Please keep program sub-folders from other's dirty hands!
  1. Unpack YandexAuthBrowser into selected secured folder. Run the YandexAuthBrowser.
    Choose a port number to listen to incoming authentication request on.
    Set a password or use link to generate GUID as a new password.
    Also you can test the authentication process using Test button.

  2. Open wdmrc.config and edit <BrowserAuthenticator> tag (add the tag if it's missing).
    Attributes:
    Url="http://localhost:`/" - address of the PC running YandexAuthBrowser application, portmeans port number you selected on previous step in YandexAuthBrowser application.<br> Password="E86A63FC-9BF0-4351-AD51-A5F806BA38EF" - password or GUID you selected on previous step in YandexAuthBrowser application.<br> The E86A63FC-9BF0-4351-AD51-A5F806BA38EFis an example of password, use your own please. The privacy of your password prevents intruders from accessing your private data on Yandex.Disk!<br> CacheDir="full path to a secured folder" - full path to a folder with cache files containing browser cookies after authenticated access to your Yandex.Disk. This folder must be placed in restricted location. Only you and your BrowserAuthenticator must have access to the folder! __If anyone gets files from the folder he or she may easily take your data on Yandex.Disk!__ So keep the folder secured! If you do not trust or if you do not want to keep cache, keep CacheDir` attribute empty. Also you may delete any sub-folder but 'runtimes' in the BrowserAuthenticator application's folder. If you trust you PC enough, you can use a folder like "%userprofile%\AppData\Local\YandexAuthBrowser" for the cache. Replace the %userprofile% with actual path.

  3. When you connect to a webdav:

  • Fill the login field with short (John) or full ([email protected]) name of the account.
  • Leave the password field empty (or put one or more spaces in case your program disallows empty passwords).
    If password is empty or space(s) only the Password from <BrowserAuthenticator> tag is used to authenticate the request to the BrowserAuthenticator program. If passwords are not matched the BrowserAuthenticator rejects the request.
  • Fill the password field with Password taken from BrowserAuthenticator application.
    In this case the Password from <BrowserAuthenticator> tag is not used. Also you may remove Password attribute in <BrowserAuthenticator> tag.
  1. Press Win+R and run shell:startup. Put shortcut of the BrowserAuthenticator program in startup folder, so the BrowserAuthenticator program will be started everytime you login the Windows. The program stays in system tray until you reboot or manually exit it using menu on tray icon.

How to use encryption

Using XTS AES-256 on-the-fly encryption/decryption

  • Set (en/de)cryption password

    • with >>crypt passwd special command
      or
    • Add # and separator string to your login: [email protected]#_SEP_
    • After your mail.ru password add separator string and password for encrypting: MyLoginPassword_SEP_MyCryptingPassword
  • Mark folder as encrypted using >>crypt init command

  • After that files uploaded to this folder will be encrypted

Commands
Commands executed by making directory with special name.
Parameters with spaces must be screened by quotes.

  • >>join SHARED_FOLDER_LINK Clone shared cloud.mail.ru file/folder to your account
  • >>join #filehash filesize [/][path]filename Clone cloud.mail.ru file to your account by known hash and size
  • >>link SHARED_FOLDER_LINK [linkname] Link shared folder without wasting your space (or manually edit file /item.links.wdmrc)
  • >>link check Remove all dead links (may take time if there's a lot of links)
  • >>move /full/path/from /full/path/to Fast move (if your client moves inner items recursively)
  • >>copy /full/path/from /full/path/to Fast copy (if your client copies inner items recursively)
  • >>lcopy x:/local/path/from /full/server/path/to If file already in cloud, add it by hash without uploading
  • >>rlist [[/]path] [list_filename] list [path] to [list_filename]
  • >>del [[/]path] Fast delete (if your client makes recursive deletions of inner items)
  • >>share [[/]path] Make file/folder public
    • and create .share.wdmrc file with links
  • >>sharev [[/]path] [resolution] Make media file public
    • resolution = 0p (all), 240p, 360p, 480p, 720p, 1080p
    • and create .share.wdmrc file with public and direct play links
  • >>pl [[/]path] [resolution] Make media file public
    • resolution = 0p (all), 240p, 360p, 480p, 720p, 1080p
    • and create .share.wdmrc file with public and direct play links
    • and create .m3u8 playlist file
  • >>crypt init Mark current folder as encrypted
  • >>crypt passwd password_for_encryption_decryption Set password for encryption/decryption

Settings in wdmrc.exe.config

  • Logging
    <config><log4net>
    It's standard Apache log4net configurations, take a look for examples Additionally you can use protocol and port properties taken from command-line parameters.

  • Default video resolution for generated m3u playlists <config><DefaultSharedVideoResolution>
    Values: 0p auto, m3u contains links to all available resolutions 240p ~ 352 x 240 360p ~ 480 x 360 480p ~ 858 x 480 720p ~ 1280 x 720 1080p ~ 1920 x 1080

  • Default User-Agent
    <config><DefaultUserAgent>
    Default user-agent for web requests to cloud.

  • Special command prefix
    <config><AdditionalSpecialCommandPrefix>
    custom special command prefix instead of >>. Make possible to use special commands if client doesn't allow >>.

  • Enable/disable WebDAV properties
    <config><WebDAVProps>
    set false on properties you don't need to speedup listing on large catalogs / slow connections.

  • 2 Factor Authentication
    At this time you can use

    • <TwoFactorAuthHandler Name = "AuthCodeConsole"/> - asks for authcode in application console
    • <TwoFactorAuthHandler Name = "AuthCodeWindow"/> - asks for authcode in GUI window (only for .NET Framework releases)
    •  <TwoFactorAuthHandler Name = "AuthCodeFile">
       	<Param Name = "Directory" Value = "d:"/>
       	<Param Name = "FilenamePrefix" Value = "wdmrc_2FA_"/>
       </TwoFactorAuthHandler>
      
      user must write authcode to file. For example, user [email protected] writes code to d:\[email protected].

    Be careful, this methods does not usable when application started as a service/daemon.
    You can make your own 2FA handlers inherited from ITwoFaHandler and put it in separate dll which name starts with MailRuCloudApi.TwoFA

Connect with (almost any) file manager that supports WebDAV using Basic authentication with no encryption and

  • your cloud.mail.ru email and password
  • or anonymous login if only public links list/download required (WinSCP script example)

Automatically split/join when uploading/downloading files larger than cloud allows.

Russian FAQ
geektimes.ru - Снова про WebDAV и Облако Mail.Ru
glashkoff.com - Как бесплатно подключить Облако Mail.Ru через WebDAV
manjaro.ru - Облако Mail.Ru подключаем через эмулятор WebDav как сетевой диск

Windows

Using as windows service

  • Run cmd with Administrator rights
  • Then, for example, wdmrc.exe --install wdmrc -p 801 --maxthreads 15
  • net start wdmrc

Using from explorer requires enabled Basic Auth for WebDAV * Press Win+R, type `regedit`, click OK * HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters * Right click on the BasicAuthLevel and click Modify * In the Value data box, type 2, and then click OK. * Reset computer (or run `cmd` with admin rights and then `net stop webclient`, `net start webclient`)
Use as Windows disk ``` net use ^disk^: http://^address^:^port^ ^your_mailru_password^ /USER:^your_mailru_email^ ```
Faster WebDAV Performance in Windows 7 Windows 7 client might perform very bad when connecting to any WebDAV server. This is caused, because it tries to auto-detect any proxy server before any request. Refer to KB2445570 for more information.
  • In Internet Explorer, open the Tools menu, then click Internet Options.
  • Select the Connections tab.
  • Click the LAN Settings button.
  • Uncheck the “Automatically detect settings” box.
  • Click OK until you’re out of dialog.
By default, Windows limits file size to 5000000 bytes, you can increase it up to 4Gb * Press Win+R, type `regedit`, click OK * HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters * Right click on the FileSizeLimitInBytes and click Modify * Click on Decimal * In the Value data box, type 4294967295, and then click OK. * Reset computer (or run `cmd` with admin rights and then `net stop webclient`, `net start webclient`)
Wrong disk size when mapped as Windows drive [Microsoft says - "It's not a bug, it's by design"](https://support.microsoft.com/en-us/kb/2386902)

Linux

(tested under Elementary OS and Lubuntu)

See also

Mount with davfs2

  • mkdir /mnt/<folder>
  • edit /etc/davfs2/davfs2.conf set use_locks 0
  • sudo mount --rw -t davfs http://<address>:<port> /mnt/<folder>/ -o uid=<current_linux_user>

As a service (daemon)

CERTIFICATE_VERIFY_FAILED exception Issue 56 default installation of Mono doesn’t trust anyone

In short:

# cat /etc/ssl/certs/* >ca-bundle.crt
# cert-sync ca-bundle.crt
# rm ca-bundle.crt

Mac OS X

Use any client supports webdav.

Remarks

  • RaiDrive
  • NetDrive
  • rclone mount
  • Total Commander:
    • requires to update WebDAV plugin to v.2.9
    • turn on (connection properties) -> Send\Receive accents in URLs as UTF-8 Unicode
  • WebDrive:
    • disable (disk properties) -> HTTP Settings -> Do chunked upload for large files.
  • CarotDAV:
    • check (connection properties) -> Advanced -> Don't update property.
  • avoid using Unicode non-printing characters such as right-to-left mark in file/folder names

Big thanks

See also

Buy me a beer

webdavmailrucloud's People

Contributors

dima74 avatar yar229 avatar yt-ka avatar zodo avatar zzzconsulting avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

webdavmailrucloud's Issues

Не собирается под mono

Я только что попытался собрать 1.5.65 под тремя разными версиями mono (4.8.0.425, 4.8.0.524, 4.6.1.5-r1) и все упали с одной и той же ошибкой. Раньше 1.5.59 собиралась без проблем под 4.8.0.425.

Я запускаю:

nuget restore WebDAVMailRuCloud.sln
xbuild /property:Configuration=Release

и получаю:

>>> Preparing source in /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65 ...
Installing 'log4net 2.0.7'.
Installing 'CommandLineParser 2.1.1-beta'.
Successfully installed 'CommandLineParser 2.1.1-beta'.
Successfully installed 'log4net 2.0.7'.
>>> Source prepared.
>>> Configuring source in /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65 ...
>>> Source configured.
>>> Compiling source in /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65 ...
XBuild Engine Version 14.0
Mono, Version 4.8.0.0
Copyright (C) 2005-2013 Various Mono authors

Build started 05/05/2017 16:41:31.
__________________________________________________
/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/WebDAVMailRuCloud.sln:  warning : /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server/NWebDav.Server.csproj: The default XML namespace of the project must be the MSBuild XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, please convert it to MSBuild 2003 format.  
/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/WebDAVMailRuCloud.sln:  warning : /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server.HttpListener/NWebDav.Server.HttpListener.csproj: The default XML namespace of the project must be the MSBuild XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, please convert it to MSBuild 2003 format.  
Project "/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/WebDAVMailRuCloud.sln" (default target(s)):
	Target ValidateSolutionConfiguration:
		Building solution configuration "Release|Any CPU".
	Target Build:
		Project "/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/MailRuNetCloudClient/MailRuCloudApi/MailRuCloudApi.csproj" (default target(s)):
			Target PrepareForBuild:
				Configuration: Release Platform: AnyCPU
				Created directory "bin/Release/"
				Created directory "obj/Release/"
			Target CopyFilesMarkedCopyLocal:
				Copying file from '/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/MailRuNetCloudClient/MailRuCloudApi/Packages/Json.NET/Newtonsoft.Json.dll' to '/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/MailRuNetCloudClient/MailRuCloudApi/bin/Release/Newtonsoft.Json.dll'
			Target GenerateSatelliteAssemblies:
			No input files were specified for target GenerateSatelliteAssemblies, skipping.
			Target CoreCompile:
				Tool /usr/lib64/mono/4.5/mcs.exe execution started with arguments: /noconfig /debug:pdbonly /optimize+ /out:obj/Release/MailRuCloudApi.dll AccountInfo.cs Api/Account.cs Api/ConstSettings.cs Api/DownloadStream.cs Api/Requests/LoginRequest.cs Api/SplittedUploadStream.cs Api/UploadStream.cs CarotCryptStream.cs DiskUsage.cs Entry.cs Extensions/DtoImport.cs Extensions/Extensions.cs File.cs FileSize.cs Folder.cs MailRuCloudApi.cs Api/CloudApi.cs Api/Requests/AccountInfoRequest.cs Api/Requests/AuthTokenRequest.cs Api/Requests/CloneItemRequest.cs Api/Requests/CreateFileRequest.cs Api/Requests/CreateFolderRequest.cs Api/Requests/EnsureSdcCookieRequest.cs Api/Requests/FolderInfoRequest.cs Api/Requests/BaseRequest.cs Api/Requests/MoveOrCopyRequest.cs Api/Requests/RemoveRequest.cs Api/Requests/RenameRequest.cs Api/Requests/ShardInfoRequest.cs Api/Requests/Types/AccountInfoResult.cs Api/Requests/Types/AuthTokenResult.cs Api/Requests/Types/CloneItemResult.cs Api/Requests/Types/FolderInfoResult.cs Api/Requests/RequestException.cs Api/Requests/RequestResponse.cs Api/Requests/Types/MoveOrCopyResult.cs Api/Requests/Types/ShardInfoResult.cs Api/Requests/Types/UnknownResult.cs Api/RingBufferedStream.cs ShardType.cs SpecialCommand.cs Properties/AssemblyInfo.cs ShardInfo.cs SplittedCloud.cs SplittedFile.cs WebDavPath.cs obj/Release/.NETFramework,Version=v4.5.AssemblyAttribute.cs /target:library /define:TRACE /nostdlib /reference:Packages/Json.NET/Newtonsoft.Json.dll /reference:/usr/lib64/mono/4.5-api/System.dll /reference:/usr/lib64/mono/4.5-api/System.Core.dll /reference:/usr/lib64/mono/4.5-api//mscorlib.dll /warn:4
Api/DownloadStream.cs(50,36): warning CS1998: Async block lacks `await' operator and will run synchronously
Api/DownloadStream.cs(45,17): warning CS0219: The variable `t' is assigned but its value is never used
Api/UploadStream.cs(133,50): warning CS0168: The variable `ex' is declared but never used
			Target DeployOutputFiles:
				Copying file from '/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/MailRuNetCloudClient/MailRuCloudApi/obj/Release/MailRuCloudApi.dll.mdb' to '/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/MailRuNetCloudClient/MailRuCloudApi/bin/Release/MailRuCloudApi.dll.mdb'
				Copying file from '/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/MailRuNetCloudClient/MailRuCloudApi/obj/Release/MailRuCloudApi.dll' to '/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/MailRuNetCloudClient/MailRuCloudApi/bin/Release/MailRuCloudApi.dll'
		Done building project "/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/MailRuNetCloudClient/MailRuCloudApi/MailRuCloudApi.csproj".
/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server/NWebDav.Server.csproj: error : /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server/NWebDav.Server.csproj: The default XML namespace of the project must be the MSBuild XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, please convert it to MSBuild 2003 format.  
/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server.HttpListener/NWebDav.Server.HttpListener.csproj: error : /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server.HttpListener/NWebDav.Server.HttpListener.csproj: The default XML namespace of the project must be the MSBuild XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, please convert it to MSBuild 2003 format.  
	Task "MSBuild" execution -- FAILED
	Done building target "Build" in project "/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/WebDAVMailRuCloud.sln".-- FAILED
Done building project "/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/WebDAVMailRuCloud.sln".-- FAILED

Build FAILED.

Warnings:

/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/WebDAVMailRuCloud.sln:  warning : /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server/NWebDav.Server.csproj: The default XML namespace of the project must be the MSBuild XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, please convert it to MSBuild 2003 format.  
/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/WebDAVMailRuCloud.sln:  warning : /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server.HttpListener/NWebDav.Server.HttpListener.csproj: The default XML namespace of the project must be the MSBuild XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, please convert it to MSBuild 2003 format.  

/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/WebDAVMailRuCloud.sln (default targets) ->
(Build target) ->
/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/MailRuNetCloudClient/MailRuCloudApi/MailRuCloudApi.csproj (default targets) ->
/usr/lib64/mono/xbuild/14.0/bin/Microsoft.CSharp.targets (CoreCompile target) ->

	Api/DownloadStream.cs(50,36): warning CS1998: Async block lacks `await' operator and will run synchronously
	Api/DownloadStream.cs(45,17): warning CS0219: The variable `t' is assigned but its value is never used
	Api/UploadStream.cs(133,50): warning CS0168: The variable `ex' is declared but never used

Errors:

/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/WebDAVMailRuCloud.sln (default targets) ->
(Build target) ->

	/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server/NWebDav.Server.csproj: error : /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server/NWebDav.Server.csproj: The default XML namespace of the project must be the MSBuild XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, please convert it to MSBuild 2003 format.  
	/var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server.HttpListener/NWebDav.Server.HttpListener.csproj: error : /var/tmp/portage/net-fs/wdmrc-1.5.65/work/wdmrc-1.5.65/NWebDAV/NWebDav.Server.HttpListener/NWebDav.Server.HttpListener.csproj: The default XML namespace of the project must be the MSBuild XML namespace. If the project is authored in the MSBuild 2003 format, please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. If the project has been authored in the old 1.0 or 1.2 format, please convert it to MSBuild 2003 format.  

	 5 Warning(s)
	 2 Error(s)

Time Elapsed 00:00:01.2376850

2FA: "Не спрашивать для этого устройства"

@Denages
При авторизации в браузере есть возможность установить галку "Не спрашивать для этого устройства". Возможно ли это реализовать? Иначе постоянно нужно будет вводить смс. А в случае частого переподключения смс могут перестать приходить вследствие таймера повторной отправки.

PotPlayer not working

[11]: Unexpected exception while handling request (method=GET, url=http://127.0.0.1:3332/Vse_dengi_mira.avi, source=127.0.0.1:52161
System.Net.HttpListenerException (0x80004005): The specified network name is no longer available
at System.Net.HttpResponseStream.EndWrite(IAsyncResult asyncResult)
at System.IO.Stream.<>c.b__53_1(Stream stream, IAsyncResult asyncResult)
at System.Threading.Tasks.TaskFactory1.FromAsyncTrimPromise1.Complete(TInstance thisRef, Func`3 endMethod, IAsyncResult asyncResult, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at NWebDav.Server.Handlers.GetAndHeadHandler.d__1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at NWebDav.Server.Handlers.GetAndHeadHandler.d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
at NWebDav.Server.WebDavDispatcher.d__6.MoveNext()

WebDav Scan 404 error, when folder name contain symbols

WebDav Scan 404 error when folder name contains "*WAV" "&" "%" " ‎– " "%E2%80%8E (invisible)"
If i delete these symbols, then after restart i'm search the cloud-> WebDav scan this and next folders forward.

I use a AIMP4 scan (aimp_AudioCloud.dll v0.5.2)
http://i.imgur.com/BnTvBvp.png
http://i.imgur.com/aymdOJ1.png
http://i.imgur.com/68kUbSP.png
http://i.imgur.com/tG8anwk.png
http://i.imgur.com/EE56O8a.png

sample:
Various ‎– Networks. 1 (An Intellinet Compilation)
VA - 200% Underground (1995) [FLAC]

My Parameter WebDav:
wdmrc.exe -p 36545 -l логин@mail.ru -s пароль
36545 - номер свободного порта

In AIMP4:
127.0.0.1:36545
ssl off

добавление сертификатов не помогло.

При первом запуске добавил сертификаты как в Issue 56 и все взлетело. гадило в консоль красным только когда в броузере в облако заходил. после ребута системы вот что:

root@MyCloud:/# mono /root/mail.ru/wdmrc.exe -p 22222
WebDAVCloudMailRu: WebDAV emulator for Cloud.Mail.ru
v.1.5.59.0
[email protected]
[1]: WebDAV server running at http://127.0.0.1:22222
[Threadpool worker]: OPTIONS:http://127.0.0.1:22222/:127.0.0.1:22222 - Start processing
[Threadpool worker]: OPTIONS:http://127.0.0.1:22222/:127.0.0.1:22222 - Finished processing (125ms, HTTP result: 200)
[Threadpool worker]: PROPFIND:http://127.0.0.1:22222/:127.0.0.1:22222 - Start processing
[Threadpool worker]: Unexpected exception while handling request (method=PROPFIND, url=http://127.0.0.1:22222/, source=127.0.0.1:22222
System.AggregateException: One or more errors occurred. ---> System.Net.WebException: Error: SecureChannelFailure (The authentication or decryption has failed.) ---> System.IO.IOException: The authentication or decryption has failed. ---> System.IO.IOException: Error while sending TLS Alert (Fatal:InternalError): System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: The server stopped the handshake.
at Mono.Security.Protocol.Tls.SslClientStream.SafeEndReceiveRecord (System.IAsyncResult ar, System.Boolean ignoreEmpty) [0x0002d] in <59bcb3a41e31492f91d9513566444e88>:0
at Mono.Security.Protocol.Tls.SslClientStream.NegotiateAsyncWorker (System.IAsyncResult result) [0x002c6] in <59bcb3a41e31492f91d9513566444e88>:0
--- End of inner exception stack trace ---
at Mono.Security.Protocol.Tls.SslClientStream.EndNegotiateHandshake (System.IAsyncResult result) [0x0003b] in <59bcb3a41e31492f91d9513566444e88>:0
at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (System.IAsyncResult asyncResult) [0x0000c] in <59bcb3a41e31492f91d9513566444e88>:0 ---> System.IO.IOException: Unable to write data to the transport connection: The socket has been shut down. ---> System.Net.Sockets.SocketException: The socket has been shut down
at System.Net.Sockets.Socket.EndSend (System.IAsyncResult result) [0x00033] in <5641e4edad4f4464ba58c620a7b8ea48>:0
at System.Net.Sockets.NetworkStream.EndWrite (System.IAsyncResult asyncResult) [0x0005f] in <5641e4edad4f4464ba58c620a7b8ea48>:0
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.EndWrite (System.IAsyncResult asyncResult) [0x000af] in <5641e4edad4f4464ba58c620a7b8ea48>:0
at Mono.Security.Protocol.Tls.RecordProtocol.EndSendRecord (System.IAsyncResult asyncResult) [0x00040] in <59bcb3a41e31492f91d9513566444e88>:0
at Mono.Security.Protocol.Tls.RecordProtocol.SendRecord (Mono.Security.Protocol.Tls.ContentType contentType, System.Byte[] recordData) [0x0000b] in <59bcb3a41e31492f91d9513566444e88>:0
at Mono.Security.Protocol.Tls.RecordProtocol.SendAlert (Mono.Security.Protocol.Tls.Alert alert) [0x00027] in <59bcb3a41e31492f91d9513566444e88>:0
at Mono.Security.Protocol.Tls.RecordProtocol.SendAlert (System.Exception& ex) [0x00021] in <59bcb3a41e31492f91d9513566444e88>:0
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
at Mono.Security.Protocol.Tls.SslStreamBase.EndRead (System.IAsyncResult asyncResult) [0x00057] in <59bcb3a41e31492f91d9513566444e88>:0
at Mono.Net.Security.Private.LegacySslStream.EndAuthenticateAsClient (System.IAsyncResult asyncResult) [0x00011] in <5641e4edad4f4464ba58c620a7b8ea48>:0
at Mono.Net.Security.Private.LegacySslStream.AuthenticateAsClient (System.String targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, System.Boolean checkCertificateRevocation) [0x0000e] in <5641e4edad4f4464ba58c620a7b8ea48>:0
at Mono.Net.Security.MonoTlsStream.CreateStream (System.Byte[] buffer) [0x0006a] in <5641e4edad4f4464ba58c620a7b8ea48>:0
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.EndGetRequestStream (System.IAsyncResult asyncResult) [0x00043] in <5641e4edad4f4464ba58c620a7b8ea48>:0
at System.Net.HttpWebRequest.GetRequestStream () [0x00057] in <5641e4edad4f4464ba58c620a7b8ea48>:0
at MailRuCloudApi.Api.Requests.BaseRequest1+<MakeRequestAsync>d__8[T].MoveNext () [0x00044] in <143ca82887c443379f8d0c093a95f33c>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <f712f98eb8e445c8918edaf595bbe465>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <f712f98eb8e445c8918edaf595bbe465>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <f712f98eb8e445c8918edaf595bbe465>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <f712f98eb8e445c8918edaf595bbe465>:0 at System.Runtime.CompilerServices.TaskAwaiter1[TResult].GetResult () [0x00000] in :0
at MailRuCloudApi.Api.Account+d__26.MoveNext () [0x000c7] in <143ca82887c443379f8d0c093a95f33c>:0
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in :0
at System.Threading.Tasks.Task1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x00034] in <f712f98eb8e445c8918edaf595bbe465>:0 at System.Threading.Tasks.Task1[TResult].get_Result () [0x0000b] in :0
at MailRuCloudApi.Api.Account.Login () [0x00006] in <143ca82887c443379f8d0c093a95f33c>:0
at MailRuCloudApi.Api.CloudApi..ctor (System.String login, System.String password) [0x00025] in <143ca82887c443379f8d0c093a95f33c>:0
at MailRuCloudApi.MailRuCloud..ctor (System.String login, System.String password) [0x00006] in <143ca82887c443379f8d0c093a95f33c>:0
at MailRuCloudApi.SplittedCloud..ctor (System.String login, System.String password) [0x00000] in <143ca82887c443379f8d0c093a95f33c>:0
at YaR.WebDavMailRu.CloudStore.Cloud.Instance (NWebDav.Server.Http.IHttpContext context) [0x00071] in <9c907c092a1a451c8b4ac11d849948f4>:0
at YaR.WebDavMailRu.CloudStore.Mailru.StoreBase.MailruStore.GetItemAsync (System.Uri uri, NWebDav.Server.Http.IHttpContext httpContext) [0x00013] in <9c907c092a1a451c8b4ac11d849948f4>:0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in :0
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in :0
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in :0
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in :0
at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <f712f98eb8e445c8918edaf595bbe465>:0 at NWebDav.Server.WebDavDispatcher+<DispatchRequestAsync>d__6.MoveNext () [0x00278] in <67e3ef7b34d04051b463f1f7d40f8884>:0 ---> (Inner Exception #0) System.Net.WebException: Error: SecureChannelFailure (The authentication or decryption has failed.) ---> System.IO.IOException: The authentication or decryption has failed. ---> System.IO.IOException: Error while sending TLS Alert (Fatal:InternalError): System.IO.IOException: The authentication or decryption has failed. ---> Mono.Security.Protocol.Tls.TlsException: The server stopped the handshake. at Mono.Security.Protocol.Tls.SslClientStream.SafeEndReceiveRecord (System.IAsyncResult ar, System.Boolean ignoreEmpty) [0x0002d] in <59bcb3a41e31492f91d9513566444e88>:0 at Mono.Security.Protocol.Tls.SslClientStream.NegotiateAsyncWorker (System.IAsyncResult result) [0x002c6] in <59bcb3a41e31492f91d9513566444e88>:0 --- End of inner exception stack trace --- at Mono.Security.Protocol.Tls.SslClientStream.EndNegotiateHandshake (System.IAsyncResult result) [0x0003b] in <59bcb3a41e31492f91d9513566444e88>:0 at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (System.IAsyncResult asyncResult) [0x0000c] in <59bcb3a41e31492f91d9513566444e88>:0 ---> System.IO.IOException: Unable to write data to the transport connection: The socket has been shut down. ---> System.Net.Sockets.SocketException: The socket has been shut down at System.Net.Sockets.Socket.EndSend (System.IAsyncResult result) [0x00033] in <5641e4edad4f4464ba58c620a7b8ea48>:0 at System.Net.Sockets.NetworkStream.EndWrite (System.IAsyncResult asyncResult) [0x0005f] in <5641e4edad4f4464ba58c620a7b8ea48>:0 --- End of inner exception stack trace --- at System.Net.Sockets.NetworkStream.EndWrite (System.IAsyncResult asyncResult) [0x000af] in <5641e4edad4f4464ba58c620a7b8ea48>:0 at Mono.Security.Protocol.Tls.RecordProtocol.EndSendRecord (System.IAsyncResult asyncResult) [0x00040] in <59bcb3a41e31492f91d9513566444e88>:0 at Mono.Security.Protocol.Tls.RecordProtocol.SendRecord (Mono.Security.Protocol.Tls.ContentType contentType, System.Byte[] recordData) [0x0000b] in <59bcb3a41e31492f91d9513566444e88>:0 at Mono.Security.Protocol.Tls.RecordProtocol.SendAlert (Mono.Security.Protocol.Tls.Alert alert) [0x00027] in <59bcb3a41e31492f91d9513566444e88>:0 at Mono.Security.Protocol.Tls.RecordProtocol.SendAlert (System.Exception& ex) [0x00021] in <59bcb3a41e31492f91d9513566444e88>:0 --- End of inner exception stack trace --- --- End of inner exception stack trace --- at Mono.Security.Protocol.Tls.SslStreamBase.EndRead (System.IAsyncResult asyncResult) [0x00057] in <59bcb3a41e31492f91d9513566444e88>:0 at Mono.Net.Security.Private.LegacySslStream.EndAuthenticateAsClient (System.IAsyncResult asyncResult) [0x00011] in <5641e4edad4f4464ba58c620a7b8ea48>:0 at Mono.Net.Security.Private.LegacySslStream.AuthenticateAsClient (System.String targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, System.Boolean checkCertificateRevocation) [0x0000e] in <5641e4edad4f4464ba58c620a7b8ea48>:0 at Mono.Net.Security.MonoTlsStream.CreateStream (System.Byte[] buffer) [0x0006a] in <5641e4edad4f4464ba58c620a7b8ea48>:0 --- End of inner exception stack trace --- at System.Net.HttpWebRequest.EndGetRequestStream (System.IAsyncResult asyncResult) [0x00043] in <5641e4edad4f4464ba58c620a7b8ea48>:0 at System.Net.HttpWebRequest.GetRequestStream () [0x00057] in <5641e4edad4f4464ba58c620a7b8ea48>:0 at MailRuCloudApi.Api.Requests.BaseRequest1+d__8[T].MoveNext () [0x00044] in <143ca82887c443379f8d0c093a95f33c>:0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in :0
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in :0
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in :0
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in :0
at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in :0
at MailRuCloudApi.Api.Account+d__26.MoveNext () [0x000c7] in <143ca82887c443379f8d0c093a95f33c>:0 <---

ну и webdav не монтируется:
MyCloud> mount.davfs 127.0.0.1:22222 /volume1/mail.ru/
mount.davfs: Mounting failed.
500 Internal Server Error

Error deleting some files

[21]: Unable to delete '/Photo/2005 12/СПб - Москва/_orig' directory.
System.AggregateException: One or more errors occurred. ---> System.ArgumentException: Specified value has invalid Control characters.
Parameter name: value
at System.Net.WebHeaderCollection.CheckBadChars(String name, Boolean isHeaderValue)
at System.Net.HttpWebRequest.SetSpecialHeaders(String HeaderName, String value)
at System.Net.HttpWebRequest.set_Referer(String value)
at MailRuCloudApi.MailRuCloud.d__49.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MailRuCloudApi.MailRuCloud.d__27.MoveNext()
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at YaR.WebDavMailRu.CloudStore.MailruStoreCollection.DeleteItemAsync(String name, IHttpContext httpContext)
---> (Inner Exception #0) System.ArgumentException: Specified value has invalid Control characters.
Parameter name: value
at System.Net.WebHeaderCollection.CheckBadChars(String name, Boolean isHeaderValue)
at System.Net.HttpWebRequest.SetSpecialHeaders(String HeaderName, String value)
at System.Net.HttpWebRequest.set_Referer(String value)
at MailRuCloudApi.MailRuCloud.d__49.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MailRuCloudApi.MailRuCloud.d__27.MoveNext()<---

wdmrc + davfs2: 400 Bad request

Пробую использовать wdmrc + davfs2, но при любой попытке маунта и в различных конфигурациях получаю:
/sbin/mount.davfs: Mounting failed.
400 Bad Request

При этом неясно, проблема в моих конфигах, в wdmrc или на стороне облака.
Нельзя ли поподробнее мануал о маунте таким способом?

WDMRC+Far+NetBox каталоги с #

В связке WDMRC+NetBox есть ещё такая проблема:
если в имени каталога есть # то внутри него листинг выдаст некий кошмар
из одноимённых файлов без расширений и каких-то лишних каталогов.
WebDAVCloudMailRu v.1.5.13.0, FAR и нетбокс последние, win7x86.

100% загрузка процессора

Если запустить как сервис
/usr/bin/mono-service /home/ubuntu/wdmrc-mono/wdmrc.exe --maxthreads 10 -h http://10.0.3.98 -p 32000
то грузится на 100% одно ядро процессора, если же
/usr/bin/mono /home/ubuntu/wdmrc-mono/wdmrc.exe --maxthreads 10 -h http://10.0.3.98 -p 32000
то загрузка обычно
Запускается на ubuntu 16.04, в lxc контейнере.

В приложении изменено только блок с логированием в файле wdmrc.exe.config

  <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  <file value="/var/log/wdmrc/" />
  <datePattern value="'wdmrclog-'yyyy-MM-dd'.log'" />
  <staticLogFileName value="false" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="-1" />
  <maximumFileSize value="10MB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>      
</appender>

<root>
  <level value="ALL"/>
  <!-- appender-ref ref="ColoredConsoleAppender"/ -->
  <appender-ref ref="RollingLogFileAppender"/>
</root>

webdav getetag ошибки

При подключении через davfs все работает, но в логе на каждый файл идут две строки с ошибками!
Что это мжет значить? причем ошибками сыплет mono wdmrc.exe -p 80

[Threadpool worker]: Property {DAV:}getetag is not supported on item .
[Threadpool worker]: Property {http://apache.org/dav/props/}executable is not supported on item .

Goodsync

"Но через GoodSync просто космические траблы. Постоянно ошибки летят. Приходится проксик этот перезапускать. И пока папку GS в облаке не удалишь он даже не заходит."

Linux release has wrong extension and too deep path inside

This archive isn't gzip'ed, so it should be either gziped or have .tar extension:

$ file wdmrc-mono-1.5.13.tar.gz 
wdmrc-mono-1.5.13.tar.gz: POSIX tar archive (GNU)

It also contains too many directories inside, probably one level should be enough:

$ tar tf wdmrc-mono-1.5.13.tar.gz 
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/CommandLine.dll
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/log4net.dll
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/MailRuCloudApi.dll
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/MailRuCloudApi.dll.mdb
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/Newtonsoft.Json.dll
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/NWebDav.Server.dll
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/NWebDav.Server.HttpListener.dll
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/wdmrc.exe
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/wdmrc.exe.config
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/wdmrc.exe.mdb
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/WebDavMailRuCloudStore.dll
home/travis/build/yar229/WebDavMailRuCloud/WDMRC.Console/bin/Release/WebDavMailRuCloudStore.dll.mdb

Cannot remove/rename files or folders.

OS: Arch Linux
4.9.6-1-ARCH #1 SMP PREEMPT Thu Jan 26 09:22:26 CET 2017 x86_64 GNU/Linux

Tried with kio and davfs2, same result.

davfs2:
# sudo mono wdmrc.exe -p 804
# sudo mount --rw -t davfs http://127.0.0.1:804 /mnt/mailru/ -o uid=1000
# rm /mnt/mailru/backup/1 -R
rm: cannot remove '/mnt/mailru/backup/1': Input/output error

output:
...
[Threadpool worker]: DELETE:http://127.0.0.1:804/backup/1/:127.0.0.1:804 - Start processing
[Threadpool worker]: Unable to delete '/backup/1' directory.
System.AggregateException: One or more errors occurred. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.
...

Released source is incomplete

It looks like released WebDavMailRuCloud-1.5.40.tar.gz is incomplete - it doesn't contains neither copy of Mail.Ru-.net-cloud-client subrepo nor required commit in that subrepo, so looks like it's impossible to build exactly same binary as released one using that source file.

Системная ошибка 67

Добрый день.
wdmrc.exe стартует вроде бы нормально
Но при выполнении команды net use со всеми параметрами не создается виртуальный диск.
Пишет следующее
"Системная ошибка 67. Не найдено сетевое имя."
ОС Windows 10 x64

не работает в mac os через finder

Запускаю через docker-compose:

version: '2'
services:
  proxy:
    image: mono
    restart: unless-stopped
    volumes:
      - ./WebDavMailRuCloud_1.5.65:/app
    command: [mono, /app/wdmrc.exe, -p, "80", -h, "http://*"]
    ports:
      - "80:80"

Начинает показывать содержимое директорий, но потом помирает и выдает в логах следующее:

Threadpool worker]: PROPFIND:http://127.0.0.1/common/:127.0.0.1 - Finished processing (138ms, HTTP result: 404)
[Threadpool worker]: PROPFIND:http://127.0.0.1/common/:127.0.0.1 - Start processing

Wrong --version

wdmrc-mono-1.5.13 reports version 1.0.0.0:

$ mono wdmrc.exe --version
  WebDAVCloudMailRu: WebDAV emulator for Cloud.Mail.ru
  v.1.0.0.0
  [email protected]
WebDAVCloudMailRu 1.0.0.0

"Оффициальный" docker image

Для полной радости не хватает "оффициального" обновляемого образа в docker hub.
Примерный Dockerfile:

FROM frolvlad/alpine-mono
ARG WDMRC_VERSION=1.5.63
RUN apk add --no-cache unzip ca-certificates wget bash
RUN wget -O wdmrc.zip https://github.com/yar229/WebDavMailRuCloud/releases/download/${WDMRC_VERSION}/WebDavMailRuCloud_${WDMRC_VERSION}.zip && unzip wdmrc.zip
ENTRYPOINT mono wdmrc.exe -h http://*
EXPOSE 801

Добавить мейнтейнера по-желанию, настроить автоматическую сборку и будет прям неплохо

Wrong used size

Only 12GB is used in cloud but Windows disk told me 205GB of 222GB is used.
PC system disk also have only 17GB free.... but this is absolutelly ridiculous :(
scr

Total Commander crush

I suppose that it's TotalCommander (TC) bug, but other webdav servers works ok and... who knows.

Reproduction

Install TC (http://www.ghisler.com/), no matter 8.x or 9.x
Install TC WebDAV plugin (http://ghisler.fileburst.com/fsplugins/webdav.zip)
Run NWebDav.Sample.HttpListener
Connect using TC

... TC crushes

ramondeklein/nwebdav#8 (comment)

Отказано в доступе

Необработанное исключение: System.Net.HttpListenerException: Отказано в доступе
в System.Net.HttpListener.AddAllPrefixes()
в System.Net.HttpListener.Start()
в YaR.WebDavMailRu.Program.<>c.

b__2_0(CommandLineOptions options)
в CommandLine.ParserResultExtensions.MapResult[TSource,TResult](ParserResult 1 result, Func2 parsedFunc, Func`2 notParsedFunc)
в YaR.WebDavMailRu.Program.Main(String[] args)

Пароль пересменил

При просмотре, вместо одной из папок (последней созданной?) подставляет текущую

Возможно, проблема из за того, что логин полностью цифровой (номер телефона). В листинге отсутствуют папки @Soft и @Soft\Games вместо них / и @Soft соответственно:

img-2017-04-24-15-22-36

 Том в устройстве M не имеет метки.
 Серийный номер тома: 0000-0000

 Содержимое папки M:\

23.04.2017  18:28    <DIR>          .
23.04.2017  18:28    <DIR>          ..
24.04.2017  18:16     3 452 862 464 F3_GOTY.iso
23.04.2017  18:28    <DIR>          /
23.04.2017  18:28    <DIR>          @Android
23.04.2017  18:28    <DIR>          AYN-note
23.04.2017  18:28    <DIR>          Screenshots
               1 файлов 30 297 657 990 байт
               6 папок  28 173 103 104 байт свободно

img-2017-04-24-15-29-34

M:\>dir @Soft
 Том в устройстве M не имеет метки.
 Серийный номер тома: 0000-0000

 Содержимое папки M:\@Soft

23.04.2017  18:28    <DIR>          .
23.04.2017  18:28    <DIR>          ..
23.04.2017  18:28    <DIR>          Hardware
23.04.2017  18:28    <DIR>          Office
23.04.2017  18:28    <DIR>          Service
23.04.2017  18:28    <DIR>          System
18.04.2017  14:56           951 416 rufus-2.13.exe
23.04.2017  18:28    <DIR>          @Soft
23.04.2017  18:28    <DIR>          Design
               1 файлов 27 399 701 568 байт
               8 папок  28 173 033 472 байт свободно

Возникает исключение

2017-06-02 13:53:55,451 [7] ERROR NWebDav.Server.WebDavDispatcher [(null)] - Unexpected exception while handling request (method=PROPFIND, url=http://127.0.0.1:3332/, source=127.0.0.1:3332
System.TypeInitializationException: Инициализатор типа "YaR.WebDavMailRu.CloudStore.TwoFaHandlers" выдал исключение. ---> System.NotSupportedException: Предпринята попытка загрузить сборку из сетевого ресурса, что в предыдущих версиях .NET Framework могло привести к помещению сборки в "песочницу". Этот выпуск .NET Framework не включает политику CAS по умолчанию, поэтому данная загрузка может быть опасной. Если эта нагрузка не предназначена для изоляции сборки, включите переключатель loadFromRemoteSources. Дополнительные сведения см. на странице http://go.microsoft.com/fwlink/?LinkId=155569.
   в System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
   в System.Reflection.Assembly.LoadFile(String path)
   в YaR.WebDavMailRu.CloudStore.TwoFaHandlers.<GetHandlers>d__3.MoveNext()
   в System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   в System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   в YaR.WebDavMailRu.CloudStore.TwoFaHandlers..cctor()
   --- Конец трассировки внутреннего стека исключений ---
   в YaR.WebDavMailRu.CloudStore.TwoFaHandlers.Get(String name)
   в YaR.WebDavMailRu.CloudStore.Cloud.Instance(IHttpContext context)
   в YaR.WebDavMailRu.CloudStore.Mailru.StoreBase.MailruStore.GetItemAsync(Uri uri, IHttpContext httpContext)
   в NWebDav.Server.Handlers.PropFindHandler.<HandleRequestAsync>d__3.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
   в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   в System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   в NWebDav.Server.WebDavDispatcher.<DispatchRequestAsync>d__6.MoveNext()

При попытке сделать запрос к работающему демону, возникает исключение.
.NET Framework: 4.6.1
OS: Windows 10.0.10586 Pro

Linux: 100% CPU usage when stdout is redirected to file/pipe/FIFO

mono wdmrc.exe doesn't use CPU when idle, but mono wdmrc.exe | cat and mono wdmrc.exe >wdmrc.log use 100% CPU all of time. Same happens when stdout is redirected to /dev/null and even when I run app with closed FD 1 (stdout).

Not sure is this mono issue or can be fixed in your code. Another mono app I use (KeePass) doesn't have this behaviour, but it also doesn't log anything to stdout. It doesn't call any syscalls while using 100% CPU (strace mono wdmrc.exe outputs nothing after initialization).

This application is a daemon (a service) by nature, so it's important to be able to run it in background, which means we must be able to redirect it logs to pipe, file or even /dev/null. (As temporary workaround you can add option to disable all output to stdout, this may helps a bit.)

Package for Gentoo Linux

I've added package for Gentoo Linux into my overlay "powerman", you can check it here: https://github.com/powerman/powerman-overlay/blob/master/net-fs/wdmrc/wdmrc-1.5.40.ebuild

Only issue I've is wrong case of NWebDav.Server.dll file name (https://github.com/powerman/powerman-overlay/blob/master/net-fs/wdmrc/wdmrc-1.5.40.ebuild#L34), please let me know if you can fix this.

Now installing on Gentoo Linux is as simple as adding my overlay and installing the package (you can add this to README, if you like):

# layman -a powerman
# emerge wdmrc

I've opened this issue just to let you know, feel free to close it at any time.

Big file upload

If I upload file bigger than permitted by mail.ru (via NetBox) - uploading speeds up after some seconds to very high speeds (500-600 Mbit/s on 100 Mbps internet) and no file in cloud after this.
Tests show us real max size of uploaded file:
"2147483456 bytes - file name in UTF-8 size in bytes"
Name only w/o folders names.

Фичареквест: прокси

Очень не хватает параметра "прокси" что бы сам wdmrc для доступа в инет использовал прокси (socks5)

Неверный размер диска в Ubuntu

Объём диска 1Тб, но система видит только занятое место.

df -h /media/cloud.Mail/

Файл.система Размер Использовано Дост Использовано% Cмонтировано в
http://127.0.0.1:801 16G 16G 1008K 100% /media/cloud.Mail

Постоянное зависание WebDav через NetDrive клиент при попытке доступа содержимого файлов на облаке, а также ошибки

Сначала наглухо повесило webdav, пришлось прерывать процесс и отключать соединение (использую NetDrive), при повторной попытке зашло, но выдало кучу ошибок
http://picsee.net/upload/2017-03-10/ea078f82ddd9.png

[11]: PROPFIND:http://127.0.0.1:801/temp:127.0.0.1:801 - Start processing
[11]: PROPFIND:http://127.0.0.1:801/temp:127.0.0.1:801 - Finished processing (70
1ms, HTTP result: 207)
[8]: GET:http://127.0.0.1:801/Cloud/unins000.exe:127.0.0.1:801 - Finished proces
sing (3511ms, HTTP result: 200)
[4]: Exception
System.ObjectDisposedException: Доступ к ликвидированному объекту невозможен.
Имя объекта: "System.Net.HttpListenerRequest".
   в System.Net.HttpListenerRequest.CheckDisposed()
   в System.Net.HttpListenerRequest.GetKnownHeader(HttpRequestHeader header)
   в NWebDav.Server.HttpListener.HttpRequest.get_RemoteEndPoint()
   в NWebDav.Server.WebDavDispatcher.<>c__DisplayClass6_0.<DispatchRequestAsync>
b__5()
   в YaR.WebDavMailRu.Log4NetAdapter.Log4NetLoggerAdapter.Log(LogLevel logLevel,
 Func`1 messageFunc, Exception exception)
   в NWebDav.Server.WebDavDispatcher.<DispatchRequestAsync>d__6.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение
 ---
   в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   в NWebDav.Server.WebDavDispatcher.<DispatchRequestAsync>d__6.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение
 ---
   в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNoti
fication(Task task)
   в YaR.WebDavMailRu.Program.<>c__DisplayClass3_0.<<DispatchHttpRequestsAsync>b
__1>d.MoveNext()
[5]: PROPFIND:http://127.0.0.1:801/temp:127.0.0.1:801 - Start processing
[3]: PROPFIND:http://127.0.0.1:801/temp:127.0.0.1:801 - Finished processing (319
ms, HTTP result: 207)

Очень медленно качает, (100кбс или менее), но потом вообще обрывается и виснет

Linux: CERTIFICATE_VERIFY_FAILED

$ mono wdmrc.exe -p 10801
  WebDAVCloudMailRu: WebDAV emulator for Cloud.Mail.ru
  v.1.0.0.0
  [email protected]
[1]: WebDAV server running at http://127.0.0.1:10801
[Threadpool worker]: OPTIONS:http://127.0.0.1:10801/:127.0.0.1:10801 - Start processing
[Threadpool worker]: OPTIONS:http://127.0.0.1:10801/:127.0.0.1:10801 - Finished processing (5ms, HTTP result: 200)
[Threadpool worker]: PROPFIND:http://127.0.0.1:10801/:127.0.0.1:10801 - Start processing
[Threadpool worker]: Unexpected exception while handling request (method=PROPFIND, url=http://127.0.0.1:10801/, source=127.0.0.1:10801
System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.Net.WebException: Error: TrustFailure (Ssl error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED) ---> Mono.Btls.MonoBtlsException: Ssl error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
  at Mono.Btls.MonoBtlsContext.ProcessHandshake () [0x00054] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.MobileAuthenticatedStream.ProcessHandshake (Mono.Net.Security.AsyncProtocolRequest asyncRequest, Mono.Net.Security.AsyncOperationStatus status) [0x00033] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.AsyncProtocolRequest.ProcessOperation (Mono.Net.Security.AsyncOperationStatus status) [0x00086] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.AsyncProtocolRequest.ProcessOperation () [0x0000d] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.AsyncProtocolRequest.StartOperation () [0x00000] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at Mono.Net.Security.MobileAuthenticatedStream.ProcessAuthentication (System.Net.LazyAsyncResult lazyResult) [0x00083] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.MobileAuthenticatedStream.AuthenticateAsClient (System.String targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, System.Boolean checkCertificateRevocation) [0x0000c] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.Private.MonoSslStreamWrapper.AuthenticateAsClient (System.String targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, System.Boolean checkCertificateRevocation) [0x00006] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.MonoTlsStream.CreateStream (System.Byte[] buffer) [0x0006a] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
   --- End of inner exception stack trace ---
  at System.Net.HttpWebRequest.EndGetRequestStream (System.IAsyncResult asyncResult) [0x00043] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at MailRuCloudApi.Api.Account+<LoginAsync>c__async0+<LoginAsync>c__AnonStorey3.<>m__0 (System.IAsyncResult asyncResult) [0x00000] in <444b1faad6f2414e951b3e73e5f5f738>:0 
  at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, System.Threading.Tasks.Task`1[TResult] promise, System.Boolean requiresSynchronization) [0x00014] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
   --- End of inner exception stack trace ---
  at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x00034] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Threading.Tasks.Task`1[TResult].get_Result () [0x0000b] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at MailRuCloudApi.Api.Account+<LoginAsync>c__async0+<LoginAsync>c__AnonStorey3+<LoginAsync>c__async7.MoveNext () [0x0002b] in <444b1faad6f2414e951b3e73e5f5f738>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at MailRuCloudApi.Api.Account+<LoginAsync>c__async0.MoveNext () [0x00255] in <444b1faad6f2414e951b3e73e5f5f738>:0 
   --- End of inner exception stack trace ---
  at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x00034] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Threading.Tasks.Task`1[TResult].get_Result () [0x0000b] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at MailRuCloudApi.Api.Account.Login () [0x00006] in <444b1faad6f2414e951b3e73e5f5f738>:0 
  at MailRuCloudApi.Api.CloudApi..ctor (System.String login, System.String password) [0x00025] in <444b1faad6f2414e951b3e73e5f5f738>:0 
  at MailRuCloudApi.MailRuCloud..ctor (System.String login, System.String password) [0x00006] in <444b1faad6f2414e951b3e73e5f5f738>:0 
  at MailRuCloudApi.SplittedCloud..ctor (System.String login, System.String password) [0x00000] in <444b1faad6f2414e951b3e73e5f5f738>:0 
  at YaR.WebDavMailRu.CloudStore.Cloud.Instance (NWebDav.Server.Http.IHttpContext context) [0x0007a] in <a7851a6f54294ea7b224efa6a12e7c33>:0 
  at YaR.WebDavMailRu.CloudStore.Mailru.StoreBase.MailruStore.GetItemAsync (System.Uri uri, NWebDav.Server.Http.IHttpContext httpContext) [0x00013] in <a7851a6f54294ea7b224efa6a12e7c33>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at NWebDav.Server.WebDavDispatcher+<DispatchRequestAsync>d__6.MoveNext () [0x00278] in <5ab6ccfea3fe4f38a303c342958d9422>:0 
---> (Inner Exception #0) System.AggregateException: One or more errors occurred. ---> System.Net.WebException: Error: TrustFailure (Ssl error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED) ---> Mono.Btls.MonoBtlsException: Ssl error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
  at Mono.Btls.MonoBtlsContext.ProcessHandshake () [0x00054] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.MobileAuthenticatedStream.ProcessHandshake (Mono.Net.Security.AsyncProtocolRequest asyncRequest, Mono.Net.Security.AsyncOperationStatus status) [0x00033] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.AsyncProtocolRequest.ProcessOperation (Mono.Net.Security.AsyncOperationStatus status) [0x00086] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.AsyncProtocolRequest.ProcessOperation () [0x0000d] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.AsyncProtocolRequest.StartOperation () [0x00000] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at Mono.Net.Security.MobileAuthenticatedStream.ProcessAuthentication (System.Net.LazyAsyncResult lazyResult) [0x00083] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.MobileAuthenticatedStream.AuthenticateAsClient (System.String targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, System.Boolean checkCertificateRevocation) [0x0000c] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.Private.MonoSslStreamWrapper.AuthenticateAsClient (System.String targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, System.Boolean checkCertificateRevocation) [0x00006] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.MonoTlsStream.CreateStream (System.Byte[] buffer) [0x0006a] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
   --- End of inner exception stack trace ---
  at System.Net.HttpWebRequest.EndGetRequestStream (System.IAsyncResult asyncResult) [0x00043] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at MailRuCloudApi.Api.Account+<LoginAsync>c__async0+<LoginAsync>c__AnonStorey3.<>m__0 (System.IAsyncResult asyncResult) [0x00000] in <444b1faad6f2414e951b3e73e5f5f738>:0 
  at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, System.Threading.Tasks.Task`1[TResult] promise, System.Boolean requiresSynchronization) [0x00014] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
   --- End of inner exception stack trace ---
  at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x00034] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Threading.Tasks.Task`1[TResult].get_Result () [0x0000b] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at MailRuCloudApi.Api.Account+<LoginAsync>c__async0+<LoginAsync>c__AnonStorey3+<LoginAsync>c__async7.MoveNext () [0x0002b] in <444b1faad6f2414e951b3e73e5f5f738>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at MailRuCloudApi.Api.Account+<LoginAsync>c__async0.MoveNext () [0x00255] in <444b1faad6f2414e951b3e73e5f5f738>:0 
---> (Inner Exception #0) System.Net.WebException: Error: TrustFailure (Ssl error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED) ---> Mono.Btls.MonoBtlsException: Ssl error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
  at Mono.Btls.MonoBtlsContext.ProcessHandshake () [0x00054] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.MobileAuthenticatedStream.ProcessHandshake (Mono.Net.Security.AsyncProtocolRequest asyncRequest, Mono.Net.Security.AsyncOperationStatus status) [0x00033] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.AsyncProtocolRequest.ProcessOperation (Mono.Net.Security.AsyncOperationStatus status) [0x00086] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.AsyncProtocolRequest.ProcessOperation () [0x0000d] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.AsyncProtocolRequest.StartOperation () [0x00000] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <12e050e5b3d34326a1b4e2e7624e75da>:0 
  at Mono.Net.Security.MobileAuthenticatedStream.ProcessAuthentication (System.Net.LazyAsyncResult lazyResult) [0x00083] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.MobileAuthenticatedStream.AuthenticateAsClient (System.String targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, System.Boolean checkCertificateRevocation) [0x0000c] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.Private.MonoSslStreamWrapper.AuthenticateAsClient (System.String targetHost, System.Security.Cryptography.X509Certificates.X509CertificateCollection clientCertificates, System.Security.Authentication.SslProtocols enabledSslProtocols, System.Boolean checkCertificateRevocation) [0x00006] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at Mono.Net.Security.MonoTlsStream.CreateStream (System.Byte[] buffer) [0x0006a] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
   --- End of inner exception stack trace ---
  at System.Net.HttpWebRequest.EndGetRequestStream (System.IAsyncResult asyncResult) [0x00043] in <112fe6c9f3ff420c883a0e57e81d2368>:0 
  at MailRuCloudApi.Api.Account+<LoginAsync>c__async0+<LoginAsync>c__AnonStorey3.<>m__0 (System.IAsyncResult asyncResult) [0x00000] in <444b1faad6f2414e951b3e73e5f5f738>:0 
  at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, System.Threading.Tasks.Task`1[TResult] promise, System.Boolean requiresSynchronization) [0x00014] in <12e050e5b3d34326a1b4e2e7624e75da>:0 <---
<---

Wrong rename

Hello!

  • Run WDMRC, map wdmrc-disk;
  • Put test.txt there;
  • Try to rename test.txt to test.diz (or another-test.txt for example);
  • Got test (1).txt in any case of new name and extention.

By the way, NetBox plugin (FTP, SFTP, WebDav) for FAR Manager also doesn't work with WDMRC. Instead folders there are files with 0 bytes sizes. But CD FOLDER command work. Files also have 0 bytes sizes. Don't want make new issue, because that's problem of NetBox, but inform you.

Двухфакторная авторизация

Пытаюсь подключиться, используя стандартный пароль от почты - на телефон приходит смс с кодом, который вводить некуда. Либо генерирую пароль для двухфакторной авторизации в настройках аккаунта mail.ru и получаю в консоли:

  WebDAVCloudMailRu: WebDAV emulator for Cloud.Mail.ru
  v.1.5.65.0
  [email protected]
[1]: WebDAV server running at http://127.0.0.1:801
[Threadpool worker]: PROPFIND:http://127.0.0.1:801/:127.0.0.1:801 - Start processing
[Threadpool worker]: Unexpected exception while handling request (method=PROPFIND, url=http://127.0.0.1:801/, source=127.0.0.1:801
System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.
  at System.Net.HttpWebRequest.EndGetResponse (System.IAsyncResult asyncResult) [0x00064] in <f8255d9ef0594d18ae2c0d97286b9a80>:0 
  at MailRuCloudApi.Api.Requests.BaseRequest`1+<>c__DisplayClass8_0[T].<MakeRequestAsync>b__0 (System.IAsyncResult asyncResult) [0x00000] in <1ae48339a137463f9e9bb1dee747c15c>:0 
  at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, System.Threading.Tasks.Task`1[TResult] promise, System.Boolean requiresSynchronization) [0x00014] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at MailRuCloudApi.Api.Requests.BaseRequest`1+<MakeRequestAsync>d__8[T].MoveNext () [0x000d4] in <1ae48339a137463f9e9bb1dee747c15c>:0 
   --- End of inner exception stack trace ---
  at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x00034] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Threading.Tasks.Task`1[TResult].get_Result () [0x0000b] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at MailRuCloudApi.Api.Extensions.ThrowIf[T] (System.Threading.Tasks.Task`1[TResult] data, System.Func`2[T,TResult] func, System.Exception ex) [0x00000] in <1ae48339a137463f9e9bb1dee747c15c>:0 
  at MailRuCloudApi.Api.Account+<LoginAsync>d__26.MoveNext () [0x0016d] in <1ae48339a137463f9e9bb1dee747c15c>:0 
   --- End of inner exception stack trace ---
  at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x00034] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Threading.Tasks.Task`1[TResult].get_Result () [0x0000b] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at MailRuCloudApi.Api.Account.Login () [0x00006] in <1ae48339a137463f9e9bb1dee747c15c>:0 
  at MailRuCloudApi.Api.CloudApi..ctor (System.String login, System.String password) [0x00025] in <1ae48339a137463f9e9bb1dee747c15c>:0 
  at MailRuCloudApi.MailRuCloud..ctor (System.String login, System.String password) [0x00006] in <1ae48339a137463f9e9bb1dee747c15c>:0 
  at MailRuCloudApi.SplittedCloud..ctor (System.String login, System.String password) [0x00000] in <1ae48339a137463f9e9bb1dee747c15c>:0 
  at YaR.WebDavMailRu.CloudStore.Cloud.Instance (NWebDav.Server.Http.IHttpContext context) [0x00071] in <845b8272334f433dbfffd025ce40d5dc>:0 
  at YaR.WebDavMailRu.CloudStore.Mailru.StoreBase.MailruStore.GetItemAsync (System.Uri uri, NWebDav.Server.Http.IHttpContext httpContext) [0x00013] in <845b8272334f433dbfffd025ce40d5dc>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at NWebDav.Server.WebDavDispatcher+<DispatchRequestAsync>d__6.MoveNext () [0x0030d] in <05488793c03a40ab8a95a6e5dc0e2c25>:0 
---> (Inner Exception #0) System.AggregateException: One or more errors occurred. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.
  at System.Net.HttpWebRequest.EndGetResponse (System.IAsyncResult asyncResult) [0x00064] in <f8255d9ef0594d18ae2c0d97286b9a80>:0 
  at MailRuCloudApi.Api.Requests.BaseRequest`1+<>c__DisplayClass8_0[T].<MakeRequestAsync>b__0 (System.IAsyncResult asyncResult) [0x00000] in <1ae48339a137463f9e9bb1dee747c15c>:0 
  at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, System.Threading.Tasks.Task`1[TResult] promise, System.Boolean requiresSynchronization) [0x00014] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at MailRuCloudApi.Api.Requests.BaseRequest`1+<MakeRequestAsync>d__8[T].MoveNext () [0x000d4] in <1ae48339a137463f9e9bb1dee747c15c>:0 
   --- End of inner exception stack trace ---
  at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x00034] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Threading.Tasks.Task`1[TResult].get_Result () [0x0000b] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at MailRuCloudApi.Api.Extensions.ThrowIf[T] (System.Threading.Tasks.Task`1[TResult] data, System.Func`2[T,TResult] func, System.Exception ex) [0x00000] in <1ae48339a137463f9e9bb1dee747c15c>:0 
  at MailRuCloudApi.Api.Account+<LoginAsync>d__26.MoveNext () [0x0016d] in <1ae48339a137463f9e9bb1dee747c15c>:0 
---> (Inner Exception #0) System.Net.WebException: The remote server returned an error: (403) Forbidden.
  at System.Net.HttpWebRequest.EndGetResponse (System.IAsyncResult asyncResult) [0x00064] in <f8255d9ef0594d18ae2c0d97286b9a80>:0 
  at MailRuCloudApi.Api.Requests.BaseRequest`1+<>c__DisplayClass8_0[T].<MakeRequestAsync>b__0 (System.IAsyncResult asyncResult) [0x00000] in <1ae48339a137463f9e9bb1dee747c15c>:0 
  at System.Threading.Tasks.TaskFactory`1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func`2[T,TResult] endFunction, System.Action`1[T] endAction, System.Threading.Tasks.Task`1[TResult] promise, System.Boolean requiresSynchronization) [0x00014] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0004e] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <dbb16e0bacdc4a0f87478e401bc29b6c>:0 
  at MailRuCloudApi.Api.Requests.BaseRequest`1+<MakeRequestAsync>d__8[T].MoveNext () [0x000d4] in <1ae48339a137463f9e9bb1dee747c15c>:0 <---
<---


Build linux

Как можно собрать исходники на debian, имея dotnet?

HTTP Range request

Если выполнять GET запрос с указанием заголовка Range, то WebDavMailRuCloud:

  1. Будет выкачивать целиком весь файл, а не диапазон байт, указанный в Range.
  2. Пока файл целиком не скачает - не будет передавать получаемые данные клиенту, из за чего у последнего истечет время ожидания и он разорвет соединение.
  3. Всё равно будет продолжать качать файл даже если клиент в этот момент разорвал соединение (закрыв сокет).

Если выставить запредельный таймаут у клиента и дождаться всё таки конца закачки, то WebDavMailRuCloud корректно вернёт клиенту указанный размер в Range.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.