yar229 / WebDavMailRuCloud

WebDAV cloud.mail.ru ...& Yandex.Disk | WebDAV Облако Mail.Ru Сетевой Диск
MIT License
490 stars 58 forks source link

Ошибка при авторизации #243

Closed Vatovv closed 11 months ago

Vatovv commented 11 months ago

Добрый день. Я использую Linux ROSA Fresh Desktop 2021.1 с KDE Plasma 5.27.8 У меня получилось запустить программу на dotNet48. Если кому интересно, то вот что я сделал sudo yum install mono sudo yum install mono-extras mono wdmrc.exe -p 3332

Версия mono: Mono JIT compiler version 6.12.0.182 (tarball Thu Mar 9 13:21:07 UTC 2023) Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com TLS: __thread SIGSEGV: altstack Notifications: epoll Architecture: amd64 Disabled: none Misc: softdebug Interpreter: yes LLVM: supported, not enabled. Suspend: hybrid GC: sgen (concurrent by default)

Все пакеты есть в официальном репозитории

Программа запускается. Я пытаюсь настроить подключение через стандартный проводник (Dolphin) Screenshot_20231130_000428 Далее запрашивается логин и пароль, но после того как я его ввожу, в консоли выводится это

1]: WebDAV server running at http://127.0.0.1:3332/
[Thread Pool Worker]: PROPFIND:http://127.0.0.1:3332/:127.0.0.1:3332 - Start processing
[Thread Pool Worker]: Cloud instance created for my_secret@mail.ru
[Thread Pool Worker]: OAuth: authorizing.
[Thread Pool Worker]: HTTP:POST:https://o2.mail.ru/token (226 ms)
[Thread Pool Worker]: Unexpected exception while handling request (method=PROPFIND, url=http://127.0.0.1:3332/, source=127.0.0.1:3332
System.AggregateException: One or more errors occurred. (Could not load file or assembly 'System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies.) ---> System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies.
  at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract (System.Type objectType) [0x00007] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract (System.Type objectType) [0x0010f] in <dd21e08747d94bcebed8b56112226337>:0 
  at System.Collections.Concurrent.ConcurrentDictionary`2[TKey,TValue].GetOrAdd (TKey key, System.Func`2[T,TResult] valueFactory) [0x0003d] in <3b2440cf1dce4a7fb10dc5c4f7a3bd72>:0 
  at Newtonsoft.Json.Utilities.ThreadSafeStore`2[TKey,TValue].Get (TKey key) [0x00000] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract (System.Type type) [0x0000b] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.GetContract (System.Type type) [0x00000] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.GetContractSafe (System.Type type) [0x0000b] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, System.Boolean checkAdditionalContent) [0x0000e] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00054] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.JsonSerializer.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.JsonSerializer.Deserialize[T] (Newtonsoft.Json.JsonReader reader) [0x00000] in <dd21e08747d94bcebed8b56112226337>:0 
  at YaR.Clouds.Base.Requests.BaseRequestJson`1[T].DeserializeMessage (System.Collections.Specialized.NameValueCollection responseHeaders, System.IO.Stream stream) [0x00024] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Base.Requests.BaseRequest`2[TConvert,T].MakeRequestAsync () [0x00216] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Base.Repos.MailRuCloud.OAuth.Auth () [0x00093] in <0d950eb44acc43c686428ec322c2242d>:0 
   --- End of inner exception stack trace ---
  at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00014] in <3b2440cf1dce4a7fb10dc5c4f7a3bd72>:0 
  at System.Threading.Tasks.Task`1[TResult].GetResultCore (System.Boolean waitCompletionNotification) [0x00034] in <3b2440cf1dce4a7fb10dc5c4f7a3bd72>:0 
  at System.Threading.Tasks.Task`1[TResult].get_Result () [0x0000b] in <3b2440cf1dce4a7fb10dc5c4f7a3bd72>:0 
  at YaR.Clouds.Base.Repos.MailRuCloud.OAuth.<.ctor>b__4_0 (YaR.Clouds.Base.Requests.Types.AuthTokenResult old) [0x00041] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Common.Cached`1+<>c__DisplayClass8_0[T].<RefreshValueIfNeeded>b__0 () [0x00000] in <0d950eb44acc43c686428ec322c2242d>:0 
  at System.Lazy`1[T].ViaFactory (System.Threading.LazyThreadSafetyMode mode) [0x00049] in <3b2440cf1dce4a7fb10dc5c4f7a3bd72>:0 
  at System.Lazy`1[T].ExecutionAndPublication (System.LazyHelper executionAndPublication, System.Boolean useDefaultConstructor) [0x00030] in <3b2440cf1dce4a7fb10dc5c4f7a3bd72>:0 
  at System.Lazy`1[T].CreateValue () [0x0008c] in <3b2440cf1dce4a7fb10dc5c4f7a3bd72>:0 
  at System.Lazy`1[T].get_Value () [0x00018] in <3b2440cf1dce4a7fb10dc5c4f7a3bd72>:0 
  at YaR.Clouds.Common.Cached`1[T].RefreshValueIfNeeded () [0x00091] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Common.Cached`1[T]..ctor (System.Func`2[T,TResult] valueFactory, System.Func`2[T,TResult] duration) [0x0001f] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Base.Repos.MailRuCloud.OAuth..ctor (YaR.Clouds.Base.Requests.HttpCommonSettings settings, YaR.Clouds.Base.IBasicCredentials creds, YaR.Clouds.Base.AuthCodeRequiredDelegate onAuthCodeRequired) [0x00026] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Base.Repos.MailRuCloud.WebBin.WebBinRequestRepo..ctor (YaR.Clouds.CloudSettings settings, YaR.Clouds.Base.IBasicCredentials creds, YaR.Clouds.Base.AuthCodeRequiredDelegate onAuthCodeRequired) [0x00068] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Base.Repos.RepoFabric.Create () [0x00062] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Base.Account..ctor (YaR.Clouds.CloudSettings settings, YaR.Clouds.Base.Credentials credentials) [0x00024] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Cloud..ctor (YaR.Clouds.CloudSettings settings, YaR.Clouds.Base.Credentials credentials) [0x0001f] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.WebDavStore.CloudManager.CreateCloud (System.Net.HttpListenerBasicIdentity identity) [0x00031] in <26847e0c30fb44b8a461a758a3b67051>:0 
  at YaR.Clouds.WebDavStore.CloudManager.Instance (System.Security.Principal.IIdentity identityi) [0x0004f] in <26847e0c30fb44b8a461a758a3b67051>:0 
  at YaR.Clouds.WebDavStore.StoreBase.LocalStore.GetItemAsync (NWebDav.Server.WebDavUri uri, NWebDav.Server.Http.IHttpContext httpContext) [0x000ef] in <26847e0c30fb44b8a461a758a3b67051>:0 
  at NWebDav.Server.Handlers.PropFindHandler.HandleRequestAsync (NWebDav.Server.Http.IHttpContext httpContext, NWebDav.Server.Stores.IStore store) [0x00183] in <3d5abdb9d35747b5aab48add8e3a803c>:0 
  at NWebDav.Server.WebDavDispatcher.DispatchRequestAsync (NWebDav.Server.Http.IHttpContext httpContext) [0x00324] in <3d5abdb9d35747b5aab48add8e3a803c>:0 
---> (Inner Exception #0) System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies.
File name: 'System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
  at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateObjectContract (System.Type objectType) [0x00007] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract (System.Type objectType) [0x0010f] in <dd21e08747d94bcebed8b56112226337>:0 
  at System.Collections.Concurrent.ConcurrentDictionary`2[TKey,TValue].GetOrAdd (TKey key, System.Func`2[T,TResult] valueFactory) [0x0003d] in <3b2440cf1dce4a7fb10dc5c4f7a3bd72>:0 
  at Newtonsoft.Json.Utilities.ThreadSafeStore`2[TKey,TValue].Get (TKey key) [0x00000] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract (System.Type type) [0x0000b] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.GetContract (System.Type type) [0x00000] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.GetContractSafe (System.Type type) [0x0000b] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, System.Boolean checkAdditionalContent) [0x0000e] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00054] in <dd21e08747d94bcebed8b56112226337>:0 
  at Newtonsoft.Json.JsonSerializer.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in <dd21e08747d94bcebed8b56112226337>:0
  at Newtonsoft.Json.JsonSerializer.Deserialize[T] (Newtonsoft.Json.JsonReader reader) [0x00000] in <dd21e08747d94bcebed8b56112226337>:0 
  at YaR.Clouds.Base.Requests.BaseRequestJson`1[T].DeserializeMessage (System.Collections.Specialized.NameValueCollection responseHeaders, System.IO.Stream stream) [0x00024] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Base.Requests.BaseRequest`2[TConvert,T].MakeRequestAsync () [0x00216] in <0d950eb44acc43c686428ec322c2242d>:0 
  at YaR.Clouds.Base.Repos.MailRuCloud.OAuth.Auth () [0x00093] in <0d950eb44acc43c686428ec322c2242d>:0 <---

Помогите, пожалуйста, что именно ему не нравится?

P. S. Если я подключаюсь к облаку mail.ru напрямую, проблем нет.

ZZZConsulting commented 11 months ago

Я не спец в линуксе, но насколько я знаю, там до .NETCore был только Mono. А судя по сообщению Could not load file or assembly 'System.Runtime.Serialization, Version=4.0.0.0... or one of its dependencies программа пытается найти сборку от .NET Framework, который есть только для Windows. Вы не архив ли для версии .NET 4.8 взяли? Он только для Windows подходит. Для иксов нужен .Net 5 и выше, на кройняк Core 3.1 или Mono. Хотя я могу и ошибаться.

Vatovv commented 11 months ago

Вы не архив ли для версии .NET 4.8 взяли? Он только для Windows подходит. Для иксов нужен .Net 5 и выше, на кройняк Core 3.1 или Mono. Хотя я могу и ошибаться. Именно этот архив я и взял, потому что только из него программа запустилась на моем линуксе. Если взять архив .Net5, то

mono ./wdmrc.exe -p 3332
Cannot open assembly './wdmrc.exe': File does not contain a valid CIL image.
ZZZConsulting commented 11 months ago

Насколько я в курсе, проект Mono развивался даже не сколько отдельно, сколько вопреки MS, и только когда ушел Балмер с поста CEO, MS, наконец, перестала считать .net только для Windows и стала делать под linux. То есть mono, это как раз для версий типа той же .NET Framework 4.8. Для более поздних уже не mono нужно, а полноценный .NET, вот например тут https://dotnet.microsoft.com/en-us/download/dotnet/6.0 6-я версия. Чуть ниже заголовка .NET Runtime 6.0.25 есть Linux Package manager instructions Arm32 | Arm32 Alpine | Arm64 | Arm64 Alpine | x64 | x64 Alpine Я не в курсе, просто предполагаю, может ларчик просто открывается, взять и поставить нужную сборку .NET для Linux, а потом запустится нормально версия эмулятора? Или это не вариант?

Теоретически, можно собрать нужный комплект сборок типа System.Runtime.Serialization, Version=4.0.0.0 чтобы версия для .NET 4.8 запустилась, но подобной экзотикой мало кто занимается. Могу предположить, что проще всего взять машину с Windows, где этот самый 4.8 уже стоит и забрать оттуда все сборки из GAC и не только. Но вариант с каким-нибудь .NET Runtime 6.0.25 для Linux выглядит и лучше, и проще.

Vatovv commented 11 months ago

@ZZZConsulting Спасибо. Поставил на тест dotnet6 Таким образом программа запустилась, но чего-то пароль не хочет принимать. Выдаёт сообщение, что логин или пароль неверный, даже если он верный

ZZZConsulting commented 11 months ago

Маленькая ремарка

Пароль для Disk.Yandex.Ru

При обращении к Disk.Yandex.Ru через эмулятор WEBDAV, всегда следует указывать основной пароль учетной записи. Не работает, если использовать пароль, созданный в Пароли приложений.

Пароль для Cloud.Mail.Ru

При обращении к Cloud.Mail.Ru через эмулятор WEBDAV работают пароли, созданные в Пароли для внешних приложений. Рекомендуется использовать такой пароль.

Как я понял, нужен именно mail.ru. В таком случае стоит попробовать создать пароль в Пароли для внешних приложений и попробовать с ним. Сейчас какая-то повальная щепетильность по части используемых паролей пошла.

Vatovv commented 11 months ago

И то и другое пробовал - результат один

ZZZConsulting commented 11 months ago

А сообщение об ошибке можно? Может намекнет что.

ZZZConsulting commented 11 months ago

И еще один вопрос - сборка эмулятора из какого проекта - от YaR229 или от ZZZConsulting? Если сборка от YaR229, то с mail.ru действительно может быть засада, там надо кое-что поменять чтобы заработало. В таком случае могу только рекомендовать попробовать эту сборку https://github.com/ZZZConsulting/WebDavMailRuCloud/releases

Vatovv commented 11 months ago

@ZZZConsulting Да, спасибо ещё раз. Используя Вашу сборку всё ОК, но Вы же сами писали, что она в меньшей степени покрыта тестами, чем сборка от YaR229

ZZZConsulting commented 11 months ago

Так я ж её под себя и проверяю в первую очередь, а дальше - как руки дойдут. Кто ж мешает под себя ее проверить? Больше половины функционала эмулятора мной вообще не востребована. Но из той, что востребована, у меня работает стабильно и без ошибок.

ZZZConsulting commented 11 months ago

И раз уж про это зашла речь. Проверять скачиванием и сравнением то, что было залито на сервер - штука нужная и обязательная. В пример тому - Disk от Мегафона, который через несколько месяцев хранения просто взял и безвозвратно испортил файлы. Впечатление было такое, что он их хранил в зашифрованном виде все, а от части файлов ключи потерял. Бывает и другое. Чтобы не сто-тысяч-миллионов файлов на сервер заливать, что долго, лучше одним архивом, да с дополнительной информацией для восстановления. Вот так вот работало все без сбоев, а на 6-м году жизни ПК с переходом с формата RAR4 на RAR5 выяснилось, что память дает сбои с отдельных битах - просто 1 заменяется на 0 или наоборот. Тестированием архивов WinRar такое выявил. Проявлялось исключительно при паковке в RAR5 и редко-редко при копировании файлов. Так вот, чтобы порчу при копировании через память выявить нужны контрольные суммы. Периодически пересчитывать у хранимых своих архивов и сравнивать. Так что программы программами, а меры предосторожности по правильному хранению никто еще не отменял, как и правило 3-2-1 для бэкапов.

Vatovv commented 11 months ago

Так я ж её под себя и проверяю в первую очередь, а дальше - как руки дойдут. Кто ж мешает под себя ее проверить? Больше половины функционала эмулятора мной вообще не востребована. Но из той, что востребована, у меня работает стабильно и без ошибок.

Ну в целом я-то использую вообще только основной функционал: скачивание/закачка файлов.

И раз уж про это зашла речь. Disk от Мегафона, который через несколько месяцев хранения просто взял и безвозвратно испортил файлы.

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

Лучше одним архивом, да с дополнительной информацией для восстановления.

Знаете, чем это не удобно? В конечном итоге-то нужны именно оригинальные файлы из архива и начинается: распаковка архива, поиск нужных файлов, копирование в другое место, удаление распакованного архива. Гораздо проще всё хранить в распакованном виде и не тратить время на скачивание 90% бесполезной инфы. Я так и делаю. Конечно в этом есть свои минусы. Вы их и описали.

Вот так вот работало все без сбоев, а на 6-м году жизни ПК с переходом с формата RAR4 на RAR5 выяснилось, что память дает сбои с отдельных битах - просто 1 заменяется на 0 или наоборот. Тестированием архивов WinRar такое выявил. Проявлялось исключительно при паковке в RAR5 и редко-редко при копировании файлов. Это ещё больший оффтоп, но такое вылавливается memtest. У меня было такое, что только при определённых проерках выявлялись ошибки памяти и это не простое заполнение памяти нулями или единицами.

Так вот, чтобы порчу при копировании через память выявить нужны контрольные суммы. Периодически пересчитывать у хранимых своих архивов и сравнивать. Так что программы программами, а меры предосторожности по правильному хранению никто еще не отменял, как и правило 3-2-1 для бэкапов. Полностью согласен.

Vatovv commented 11 months ago

Так я ж её под себя и проверяю в первую очередь, а дальше - как руки дойдут. Кто ж мешает под себя ее проверить? Больше половины функционала эмулятора мной вообще не востребована. Но из той, что востребована, у меня работает стабильно и без ошибок.

Ну в целом я-то использую вообще только основной функционал: скачивание/закачка файлов.

И раз уж про это зашла речь. Disk от Мегафона, который через несколько месяцев хранения просто взял и безвозвратно испортил файлы.

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

Лучше одним архивом, да с дополнительной информацией для восстановления.

Знаете, чем это не удобно? В конечном итоге-то нужны именно оригинальные файлы из архива и начинается: распаковка архива, поиск нужных файлов, копирование в другое место, удаление распакованного архива. Гораздо проще всё хранить в распакованном виде и не тратить время на скачивание 90% бесполезной инфы. Я так и делаю. Конечно в этом есть свои минусы. Вы их и описали.

Вот так вот работало все без сбоев, а на 6-м году жизни ПК с переходом с формата RAR4 на RAR5 выяснилось, что память дает сбои с отдельных битах - просто 1 заменяется на 0 или наоборот. Тестированием архивов WinRar такое выявил. Проявлялось исключительно при паковке в RAR5 и редко-редко при копировании файлов.

Это ещё больший оффтоп, но такое вылавливается memtest. У меня было такое, что только при определённых проерках выявлялись ошибки памяти и это не простое заполнение памяти нулями или единицами.

Так вот, чтобы порчу при копировании через память выявить нужны контрольные суммы. Периодически пересчитывать у хранимых своих архивов и сравнивать. Так что программы программами, а меры предосторожности по правильному хранению никто еще не отменял, как и правило 3-2-1 для бэкапов.

Полностью согласен.