Skip to content

Commit

Permalink
[WIP] Fix 809 (#823)
Browse files Browse the repository at this point in the history
* Добавить недостающие параметры авторизации

#809

* Добавить JsonConverter атрибут над свойствами типа SafetyEnum

* Сделать метод CreateAuthorizeUrl без параметров

#809

* Рефакторинг: переместить асинхронные методы в соответствующий класс

* Добавить свойство Code в параметры авторизации

* Изменить данные для теста

Тест не проходил. В одном из предыдущих коммитов зачем-то заменили данные ¯\_(ツ)_/¯
  • Loading branch information
itsokto authored and inyutin-maxim committed Apr 16, 2019
1 parent 0d6fc74 commit ddee536
Show file tree
Hide file tree
Showing 9 changed files with 305 additions and 519 deletions.
28 changes: 19 additions & 9 deletions VkNet.Tests/Infrastructure/ImplicitFlowTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using VkNet.Enums.Filters;
using VkNet.Enums.SafetyEnums;
using VkNet.Exception;
using VkNet.Infrastructure;
using VkNet.Infrastructure.Authorization;
using VkNet.Infrastructure.Authorization.ImplicitFlow;
using VkNet.Model;
Expand All @@ -28,26 +29,34 @@ public void CreateAuthorizeUrl()
var scope = Settings.All|Settings.Offline;
const string state = "123";
var display = Display.Mobile;
var builder = new StringBuilder("https://oauth.vk.com/authorize?");

var builder = new StringBuilder("https://oauth.vk.com/authorize?");
builder.Append($"client_id={clientId}&");
builder.Append("redirect_uri=https://oauth.vk.com/blank.html&");

builder.Append($"redirect_uri={Constants.DefaultRedirectUri}&");
builder.Append($"display={display}&");
builder.Append($"scope={scope.ToUInt64()}&");
builder.Append("response_type=token&");
builder.Append($"scope={scope}&");
builder.Append($"response_type={ResponseType.Token}&");
builder.Append("v=5.92&");

builder.Append($"state={state}&");
builder.Append("revoke=1");

var expected = builder.ToString();

var mocker = new AutoMocker();
mocker.Setup<IVkApiVersionManager, string>(x => x.Version).Returns("5.92");

var implicitFlow = mocker.CreateInstance<ImplicitFlow>();

var authorizeUrl = implicitFlow.CreateAuthorizeUrl(clientId, scope.ToUInt64(), display, state);
implicitFlow.SetAuthorizationParams(new ApiAuthParams
{
ApplicationId = clientId,
Settings = scope,
Display = display,
State = state,
RedirectUri = new Uri(Constants.DefaultRedirectUri),
Revoke = true
});

var authorizeUrl = implicitFlow.CreateAuthorizeUrl();

Assert.AreEqual(new Url(expected), authorizeUrl);
}
Expand Down Expand Up @@ -94,7 +103,8 @@ public async Task Authorize()
Login = "login",
Password = "pass",
ApplicationId = 4268118,
Settings = Settings.All
Settings = Settings.All,
RedirectUri = new Uri(Constants.DefaultRedirectUri)
});

var result = await implicitFlow.AuthorizeAsync().ConfigureAwait(false);
Expand Down
19 changes: 10 additions & 9 deletions VkNet.Tests/TestData/Models/money_transfer.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
{
"type": "money_request",
"money_request": {
"id": 139,
"from_id": 123,
"to_id": 62103461,
"processed": 0,
"type": "money_transfer",
"money_transfer": {
"id": 10263042,
"from_id": 62103461,
"to_id": 1,
"status": 1,
"date": 1526637398,
"amount": {
"amount": "10000",
"amount": "30000",
"currency": {
"id": 643,
"name": "RUB"
},
"text": "100 руб."
"text": "300 руб."
},
"init_url": "https://m.vk.com/payments?act=init_money_transfer&to_id=123&request_id=139&amount=100&currency=RUB&hash=HASH&hash_2=HASH2&user_id=62103461&from=api"
"comment": "bug"
}
}
10 changes: 9 additions & 1 deletion VkNet/Abstractions/Authorization/IImplicitFlow.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Flurl;
using System;
using Flurl;
using JetBrains.Annotations;
using VkNet.Enums.SafetyEnums;

Expand Down Expand Up @@ -35,6 +36,13 @@ public interface IImplicitFlow : IAuthorizationFlow
/// результатом авторизации.
/// </param>
/// <returns> Возвращает Uri для авторизации </returns>
[Obsolete("Используйте перегрузку Url CreateAuthorizeUrl();\nПараметры авторизации должны быть уставленны вызовом void SetAuthorizationParams(IApiAuthParams authorizationParams);")]
Url CreateAuthorizeUrl(ulong clientId, ulong scope, Display display, string state);

/// <summary>
/// Построить URL для авторизации.
/// </summary>
/// <returns> Возвращает Uri для авторизации </returns>
Url CreateAuthorizeUrl();
}
}
5 changes: 5 additions & 0 deletions VkNet/Infrastructure/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,10 @@ public static class Constants
/// Токен
/// </summary>
public const string AccessToken = "access_token";

/// <summary>
/// redirect_uri по умолчанию.
/// </summary>
public const string DefaultRedirectUri = "https://oauth.vk.com/blank.html";
}
}
13 changes: 8 additions & 5 deletions VkNet/Model/ApiAuthParams.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,17 @@ public class ApiAuthParams : IApiAuthParams
/// <inheritdoc />
public bool? Revoke { get; set; }

/// <inheritdoc />
public string Code { get; set; }

/// <summary>
/// Формирует параметры авторизации по минимальному набору необходимых полей
/// </summary>
/// <param name="appId"></param>
/// <param name="login"></param>
/// <param name="password"></param>
/// <param name="settings"></param>
/// <returns></returns>
/// <param name="appId"> </param>
/// <param name="login"> </param>
/// <param name="password"> </param>
/// <param name="settings"> </param>
/// <returns> </returns>
public static ApiAuthParams Format(ulong appId, string login, string password, Settings settings)
{
return new ApiAuthParams
Expand Down
25 changes: 18 additions & 7 deletions VkNet/Model/IApiAuthParams.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ public interface IApiAuthParams
/// См. описание <see href="https://vk.com/dev/permissions" />
/// </summary>
/// <remarks>
/// ВНИМАНИЕ!!! Settings.All по умолчанию не содержит Settings.Offline и Settings.Messages
/// ВНИМАНИЕ!!! Settings.All по умолчанию не содержит Settings.Offline и
/// Settings.Messages
/// </remarks>
Settings Settings { get; set; }

Expand Down Expand Up @@ -99,8 +100,10 @@ public interface IApiAuthParams
string ClientSecret { get; set; }

/// <summary>
/// Если возникли проблемы с получением кода из приложения или пользователь не хочет использовать приложение для генерации кодов,
/// Вы можете форсировать получение кода по SMS, повторно передав запрос авторизации с этим параметром равным <c>true</c>
/// Если возникли проблемы с получением кода из приложения или пользователь не
/// хочет использовать приложение для генерации кодов,
/// Вы можете форсировать получение кода по SMS, повторно передав запрос
/// авторизации с этим параметром равным <c> true </c>
/// </summary>
bool? ForceSms { get; set; }

Expand All @@ -111,7 +114,8 @@ public interface IApiAuthParams
Display Display { get; set; }

/// <summary>
/// Адрес, на который будет переадресован пользователь после прохождения авторизации / передан code.
/// Адрес, на который будет переадресован пользователь после прохождения
/// авторизации / передан code.
/// </summary>
Uri RedirectUri { get; set; }

Expand All @@ -121,7 +125,7 @@ public interface IApiAuthParams
string State { get; set; }

/// <summary>
/// Передайте <c>true</c>, чтобы включить поддержку двухфакторной аутентификации.
/// Передайте <c> true </c>, чтобы включить поддержку двухфакторной аутентификации.
/// </summary>
bool? TwoFactorSupported { get; set; }

Expand All @@ -138,9 +142,16 @@ public interface IApiAuthParams
ResponseType ResponseType { get; set; }

/// <summary>
/// Параметр, указывающий, что необходимо не пропускать этап подтверждения прав, даже если пользователь уже авторизован.
/// (При <c>true</c>)
/// Параметр, указывающий, что необходимо не пропускать этап подтверждения прав,
/// даже если пользователь уже авторизован.
/// (При <c> true </c>)
/// </summary>
bool? Revoke { get; set; }

/// <summary>
/// Код подтверждения двухфакторной авторизации / временный код, полученный после
/// прохождения авторизации.
/// </summary>
string Code { get; set; }
}
}
Loading

0 comments on commit ddee536

Please sign in to comment.