Методы:

 

       #region Основные

       /// <summary>

       /// Вход/Авторизация.

       /// </summary>

       /// <param name="userName">Имя.</param>

       /// <param name="password">Пароль.</param>

       /// <returns></returns>

       [AcceptVerbs("POST")]

       public HttpStatus Login(string userName, string password)

       {

          Если на сервисе включена Forms авторизация, то

          для вызова защищенных атрибутом [ApiAccess] методов, необходимо пройти процедуру авторизации.

          При удачной проверке имени пользователя и пароля, возвращается зашифрованная кука, которая должна

          в последующем передаваться на сервер при каждом вызове защищенного метода сервиса.

          Если проверка не прошла, возвращается статус (403) Forbidden.

 

          Так же поддерживается Basic авторизация, при которой параметры авторизации передаются с каждым запросом

          в заголовке Authorization в формате «Basic userName:password», где строка userName:password закодирована в Base64.

          Если проверка не прошла, то возвращается статус (401) Unauthorized.

       }

 

       /// <summary>

       /// Выход.

       /// </summary>

       [AcceptVerbs("GET","POST")]

       public void Logout()

       {

          Удаляется кука авторизации.

       }

 

       /// <summary>

       /// Дата/Время на сервере.

       /// </summary>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("GET", "POST")]

       public DateTime GetServerDateTime()

       {

          Возвращается Дата/Время сервера в ISO формате.

       }

 

       /// <summary>

       /// Версия сервиса.

       /// </summary>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("GET", "POST")]

       public string GetServiceVersion()

       { }

 

       /// <summary>

       /// Максимально допустимый размер загружаемого на сервер файла (байт).

       /// </summary>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("GET", "POST")]

       [ApiAccess]

       public long MaxUploadFileSize()

       { }

       #endregion

 

 

       #region File

       /// <summary>

       /// Проверка существования файла.

       /// </summary>

       /// <param name="fileLink">Ссылка на файл.</param>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("GET", "POST")]

       [ApiAccess]

       public bool FileExist(string fileLink)

       { }

 

       /// <summary>

       /// Получить информацию о файле.

       /// </summary>

       /// <param name="fileLink">Ссылка на файл.</param>

       /// <param name="calcChecksum">Вычислить контрольную сумму.</param>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("GET", "POST")]

       [ApiAccess]

       public TransferFileInfo GetFileInfo(string fileLink, bool? calcChecksum)

       { }

 

       /// <summary>

       /// Загрузить файл на сервер.

       /// </summary>

       /// <param name="fileLink">Ссылка на файл.</param>

       /// <param name="rewrite">Перезаписывать файл.</param>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("GET", "POST")]

       [SecureAccess]

       public string UploadFile(string prefix, bool? rewrite)

       {

          Возвращается ссылка на файл.

          Вызов метода всегда защищен, т.е. всегда необходима авторизация (Forms или Basic) вне зависимости от настроек.

       }

 

       /// <summary>

       /// Скачать файл с сервера.

       /// </summary>

       /// <param name="fileLink">Ссылка на файл.</param>

       /// <returns>Content-Type: application/octet-stream</returns>

       [AcceptVerbs("GET", "POST")]

       [ApiAccess]

       public Stream DownloadFile(string fileLink)

       { }

       #endregion

 

 

       #region Thumbnail

       /// <summary>

       /// Получить миниатюру.

       /// </summary>

       /// <param name="fileLink">Ссылка на файл.</param>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("GET", "POST")]

       [ApiAccess]

       public Thumbnail GetThumbnail(string fileLink)

       { }

 

       /// <summary>

       /// Подробный список версий.

       /// </summary>

       /// <param name="fileLink">Ссылка на файл.</param>

       /// <param name="thumbSize">Размер миниатюры.</param>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("GET", "POST")]

       [ApiAccess]

       public Thumbnail GenerateThumbnail(string fileLink, int? thumbSize)

       {

          Если размер миниатюры не передан (thumbSize == null), то берется размер заданный в файле конфигурации.

       }

 

       /// <summary>

       /// Информация о версии.

       /// </summary>

       /// <param name="fileLink">Ссылка на файл.</param>

        /// <param name="version">Версия.</param>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("GET", "POST")]

       [ApiAccess]

       public bool SaveThumbnail(string fileLink)

       {

          Если файл по ссылке не существует, то сохранение не выполняется.

       }

       #endregion

 

 

       #region WinCrypto

       /// <summary>

       /// Вычислить хэш файла.

       /// </summary>

       /// <param name="fileLink">Ссылка на файл.</param>

       /// <param name="hashAlgOid">Алгоритм: 1.2.643.2.2.9 для ГОСТ R 34.11-94 | 1.3.14.3.2.26 для SHA-1.</param>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("GET", "POST")]

       public string GetFileHash(string fileLink, string hashAlgOid)

       {

          Пример GET запроса:

          http://localhost/UploadService/uploadservice.ashx/GetFileHash?fileLink=UPLOADS\2013\YM\20150921\e836cc3abd22c03d1d10a01725761999_90MByte.pdf&hashAlgOid=1.3.14.3.2.26

 

 

          Пример POST запроса:

          http://localhost/UploadService/uploadservice.ashx/GetFileHash

          Content-Type: application/x-www-form-urlencoded

 

          fileLink=UPLOADS\2013\YM\20150921\e836cc3abd22c03d1d10a01725761999_90MByte.pdf&hashAlgOid=1.3.14.3.2.26

      }

 

       /// <summary>

       /// Проверить подпись файла.

       /// </summary>

       /// <param name="fileLink">Ссылка на файл.</param>

       /// <param name="signLink">Файл сигнатуры.</param>

       /// <param name="checkParams">Параметры проверки.</param>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("POST")]

       public IDictionary<string,string> CheckFileSign(string fileLink, string signLink, IDictionary<string,string> checkParams))

       {

          Параметры fileLink и signLink передаются в строке запроса в виде Url-кодированных строк.

          Параметр checkParams передается в теле запроса в виде Json строки с Content-Type: application/json.

          Если параметр signLink == null, т.е. не передан, то сигнатура в явном виде должна содержаться в checkParams.

       }

 

       /// <;t;summary>

       /// Проверить подпись данных.

       /// </summary>

       /// <param name="checkParams">Параметры проверки.</param>

       /// <returns>Content-Type: application/json</returns>

       [AcceptVerbs("POST")]

       public IDictionary<string,string> CheckDataSign(IDictionary<string,string> checkParams)

       { }

       #endregion

 

 

 

       Структуры данных:

 

       // "Информация о файле"

       class TransferFileInfo

       {

          FileAttributes Attributes; // Атрибуты файла.

          string Checksum;           // Контрольная сумма файла.

          DateTime CreationTime;     // Время создания файла.

          string FileName;           // Имя файла или путь к файлу или ссылка на файл.

          DateTime LastAccessTime;   // Время последнего обращения к файлу.

          DateTime LastWriteTime;    // Время последней модификации файла.

          bool LoadCompleted;        // Файл загружен полностью.

          long Size;                 // Размер файла.

          Version Version;           // Версия файла.

       }

 

       // "Миниатюра"

       class Thumbnail

       {

          int FileSize;               // Размер файла картинки (байт).

          int Height;                 // Высока (пикселей).

          float HorizontalResolution; // Горизонтальное разрешение.

          string Name;                // Имя.

          PixelFormat PixelFormat;    // Формат цвета пикселей.

          ImageRawFormat RawFormat;   // Формат изображения.

          byte[] ThumbImage;          // Содержимое картинки.

          float VerticalResolution;   // Вертикальное разрешение.

          int Width;                  // Ширина (пикселей).

       }

 

       // "Параметры проверки подписи"

       IDictionary<string,string>

       {

          stringing CertUsageOids;

          bool CheckRevocation;

          string NeedServiceVersion;

          int SecretKeyValidity;

          int UrlRetrievalTimeout;

          string ValidationTime;      // Формат: "yyyy-MM-dd HH:mm:ss"

       }

 

       // "Результат проверки подписи"

       IDictionary<string,string>

       {

          stringing CadesMessage;

          byte[] Certificate;

          string ChainMessage;

          uint ErrorCadesCode;

          uint ErrorChainCode;

          uint ErrorMathCode;

          string ExtendedInfo;

          string Fio;

          bool IsCadesValid;

          bool IsChainValid;

          bool IsMathValid;

          string Issuer;

          string IssuerX500;

          string MathMessage;

          string Message;

          string OrganizationName;

          string Serial;

          string Subject;

          string SubjectX500;

          string Version;

       }