1+ using System ;
2+ using System . Collections . Generic ;
3+ using System . IO ;
4+ using System . Threading . Tasks ;
5+ using Bunq . Sdk . Context ;
6+ using Bunq . Sdk . Exception ;
7+ using Bunq . Sdk . Model . Core ;
8+ using Bunq . Sdk . Model . Generated . Endpoint ;
9+ using Mono . Options ;
10+ using Tinker . Utils ;
11+ using TinkerSrc . Lib ;
12+
13+ namespace TinkerSrc
14+ {
15+ public class TestOauth : ITinker
16+ {
17+ /// <summary>
18+ /// Option constants.
19+ /// </summary>
20+ protected const string OPTION_AUTH_CODE = "code=" ;
21+ protected const string OPTION_CLIENT_CONFIGURATION = "configuration=" ;
22+ protected const string OPTION_REDIRECT = "redirect=" ;
23+ protected const string OPTION_CONTEXT = "context=" ;
24+
25+ /// <summary>
26+ /// API constants.
27+ /// </summary>
28+ protected const string API_DEVICE_DESCRIPTION = "##### YOUR DEVICE DESCRIPTION #####" ;
29+
30+ /// <summary>
31+ /// Error constants.
32+ /// </summary>
33+ protected const string ERROR_MISSING_MANDATORY_OPTION = "Missing mandatory option." ;
34+
35+ public void Run ( string [ ] args )
36+ {
37+ Dictionary < string , string > allOption = AssertMandatoryOptions ( args ) ;
38+
39+ ApiContext apiContext = ApiContext . Restore ( allOption [ OPTION_CONTEXT ] ) ;
40+ BunqContext . LoadApiContext ( apiContext ) ;
41+
42+ OauthAccessToken accessToken = OauthAccessToken . Create (
43+ OauthGrantType . AUTHORIZATION_CODE ,
44+ allOption [ OPTION_AUTH_CODE ] ,
45+ allOption [ OPTION_REDIRECT ] ,
46+ CreateOauthClientFromFile ( allOption [ OPTION_CLIENT_CONFIGURATION ] )
47+ ) ;
48+
49+ apiContext = CreateApiContextByOauthToken (
50+ accessToken ,
51+ ShareLib . DetermineEnvironmentType ( args )
52+ ) ;
53+ BunqContext . LoadApiContext ( apiContext ) ;
54+
55+ ( new UserOverview ( ) ) . Run ( new String [ ] { } ) ;
56+ }
57+
58+
59+ private Dictionary < string , string > AssertMandatoryOptions ( string [ ] allArgument )
60+ {
61+ Dictionary < string , string > allOption = new Dictionary < string , string > ( ) ;
62+
63+ new OptionSet
64+ {
65+ { OPTION_AUTH_CODE , value => allOption . Add ( OPTION_AUTH_CODE , value ) } ,
66+ { OPTION_REDIRECT , value => allOption . Add ( OPTION_REDIRECT , value ) } ,
67+ { OPTION_CONTEXT , value => allOption . Add ( OPTION_CONTEXT , value ) } ,
68+ { OPTION_CLIENT_CONFIGURATION , value => allOption . Add ( OPTION_CLIENT_CONFIGURATION , value ) }
69+ } . Parse ( allArgument ) ;
70+
71+ if ( allOption [ OPTION_AUTH_CODE ] != null &&
72+ allOption [ OPTION_REDIRECT ] != null &&
73+ allOption [ OPTION_CONTEXT ] != null &&
74+ allOption [ OPTION_CLIENT_CONFIGURATION ] != null ) {
75+ return allOption ;
76+ }
77+
78+ throw new BunqException ( ERROR_MISSING_MANDATORY_OPTION ) ;
79+ }
80+
81+ private OauthClient CreateOauthClientFromFile ( String path )
82+ {
83+ return OauthClient . CreateFromJsonString (
84+ File . ReadAllText ( path )
85+ ) ;
86+ }
87+
88+ private static ApiContext CreateApiContextByOauthToken ( OauthAccessToken token , ApiEnvironmentType environmentType )
89+ {
90+ return ApiContext . Create (
91+ environmentType ,
92+ token . Token ,
93+ API_DEVICE_DESCRIPTION
94+ ) ;
95+ }
96+ }
97+ }
0 commit comments