Skip to content

Commit cf6438e

Browse files
authored
Merge pull request MaikuB#59 from MaikuB/0.5.0
0.5.0 release
2 parents 3ba02b0 + bc6d6df commit cf6438e

23 files changed

+506
-112
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# 0.5.0
2+
* [Android] **BREAKING CHANGE** Bump compile and target SDK versions to 29
3+
* [Android] **BREAKING CHANGE** Bump Gradle plugin to version 3.5.2
4+
* Bump example app to use Gradle distribution version 5.4.1
5+
16
# 0.4.2
27
* [iOS] Update AppAuth SDK dependency to 1.2 so it works on iOS 13. Thanks to the PR from [Aynur Dinmukhametov](https://github.com/ARDcode)
38

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ FlutterAppAuth appAuth = FlutterAppAuth();
2424
Afterwards, you'll reach a point where end-users need to be authorized and authenticated. A convenience method is provided that will perform an authorization request and automatically exchange the authorization code. This can be done in a few different ways, one of which is to use the OpenID Connect Discovery
2525

2626
```dart
27-
var result = await appAuth.authorizeAndExchangeCode(
27+
final AuthorizationTokenResponse result = await appAuth.authorizeAndExchangeCode(
2828
AuthorizationTokenRequest(
2929
'<client_id>',
3030
'<redirect_url>',
@@ -39,7 +39,7 @@ Here the `<client_id>` and `<redirect_url>` should be replaced by the values reg
3939
Rather than using the full discovery URL, the issuer could be used instead so that the process retrieving the discovery document is skipped
4040

4141
```dart
42-
var result = await appAuth.authorizeAndExchangeCode(
42+
final AuthorizationTokenResponse result = await appAuth.authorizeAndExchangeCode(
4343
AuthorizationTokenRequest(
4444
'<client_id>',
4545
'<redirect_url>',
@@ -52,7 +52,7 @@ var result = await appAuth.authorizeAndExchangeCode(
5252
If you already know the authorization and token endpoints, which may be because discovery isn't supported, then these could be explicitly specified
5353

5454
```dart
55-
var result = await appAuth.authorizeAndExchangeCode(
55+
final AuthorizationTokenResponse result = await appAuth.authorizeAndExchangeCode(
5656
AuthorizationTokenRequest(
5757
'<client_id>',
5858
'<redirect_url>',
@@ -67,7 +67,7 @@ Upon completing the request successfully, the method should return an object (th
6767
If you would prefer to not have the automatic code exchange to happen then can call the `authorize` method instead of the `authorizeAndExchangeCode` method. This will return an instance of the `AuthorizationResponse` class that will contain the code verifier that AppAuth generated (as part of implementing PKCE) when issuing the authorization request, the authorization code and additional parameters should they exist. Both of the code verifier and authorization code would need to be stored so they can then be reused to exchange the code later on e.g.
6868

6969
```dart
70-
var result = await appAuth.token(TokenRequest('<client_id>', '<redirect_url>',
70+
final AuthorizationTokenResponse result = await appAuth.token(TokenRequest('<client_id>', '<redirect_url>',
7171
authorizationCode: '<authorization_code>',
7272
discoveryUrl: '<discovery_url>',
7373
codeVerifier: '<code_verifier>',
@@ -79,7 +79,7 @@ var result = await appAuth.token(TokenRequest('<client_id>', '<redirect_url>',
7979
Some providers may return a refresh token that could be used to refresh short-lived access tokens. A request to get a new access token before it expires could be made that would like similar to the following code
8080

8181
```dart
82-
var result = await appAuth.token(TokenRequest('<client_id>', '<redirect_url>',
82+
final AuthorizationTokenResponse result = await appAuth.token(TokenRequest('<client_id>', '<redirect_url>',
8383
discoveryUrl: '<discovery_url>',
8484
refreshToken: '<refresh_token>',
8585
scopes: ['openid','profile', 'email', 'offline_access', 'api']));

analysis_options.yaml

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
# Specify analysis options.
2+
#
3+
# Until there are meta linter rules, each desired lint must be explicitly enabled.
4+
# See: https://github.com/dart-lang/linter/issues/288
5+
#
6+
# For a list of lints, see: http://dart-lang.github.io/linter/lints/
7+
# See the configuration guide for more
8+
# https://github.com/dart-lang/sdk/tree/master/pkg/analyzer#configuring-the-analyzer
9+
#
10+
# There are other similar analysis options files in the flutter repos,
11+
# which should be kept in sync with this file:
12+
#
13+
# - analysis_options.yaml (this file)
14+
# - packages/flutter/lib/analysis_options_user.yaml
15+
# - https://github.com/flutter/plugins/blob/master/analysis_options.yaml
16+
# - https://github.com/flutter/engine/blob/master/analysis_options.yaml
17+
#
18+
# This file contains the analysis options used by Flutter tools, such as IntelliJ,
19+
# Android Studio, and the `flutter analyze` command.
20+
21+
analyzer:
22+
strong-mode:
23+
implicit-dynamic: false
24+
errors:
25+
# treat missing required parameters as a warning (not a hint)
26+
missing_required_param: warning
27+
# treat missing returns as a warning (not a hint)
28+
missing_return: warning
29+
# allow having TODOs in the code
30+
todo: ignore
31+
# Ignore analyzer hints for updating pubspecs when using Future or
32+
# Stream and not importing dart:async
33+
# Please see https://github.com/flutter/flutter/pull/24528 for details.
34+
sdk_version_async_exported_from_core: ignore
35+
exclude:
36+
- "bin/cache/**"
37+
# the following two are relative to the stocks example and the flutter package respectively
38+
# see https://github.com/dart-lang/sdk/issues/28463
39+
- "lib/i18n/stock_messages_*.dart"
40+
- "lib/src/http/**"
41+
42+
linter:
43+
rules:
44+
# these rules are documented on and in the same order as
45+
# the Dart Lint rules page to make maintenance easier
46+
# https://github.com/dart-lang/linter/blob/master/example/all.yaml
47+
- always_declare_return_types
48+
- always_put_control_body_on_new_line
49+
# - always_put_required_named_parameters_first # we prefer having parameters in the same order as fields https://github.com/flutter/flutter/issues/10219
50+
- always_require_non_null_named_parameters
51+
- always_specify_types
52+
- annotate_overrides
53+
# - avoid_annotating_with_dynamic # conflicts with always_specify_types
54+
- avoid_as
55+
- avoid_bool_literals_in_conditional_expressions
56+
# - avoid_catches_without_on_clauses # we do this commonly
57+
# - avoid_catching_errors # we do this commonly
58+
- avoid_classes_with_only_static_members
59+
# - avoid_double_and_int_checks # only useful when targeting JS runtime
60+
- avoid_empty_else
61+
- avoid_field_initializers_in_const_classes
62+
- avoid_function_literals_in_foreach_calls
63+
# - avoid_implementing_value_types # not yet tested
64+
- avoid_init_to_null
65+
# - avoid_js_rounded_ints # only useful when targeting JS runtime
66+
- avoid_null_checks_in_equality_operators
67+
# - avoid_positional_boolean_parameters # not yet tested
68+
# - avoid_private_typedef_functions # we prefer having typedef (discussion in https://github.com/flutter/flutter/pull/16356)
69+
- avoid_relative_lib_imports
70+
- avoid_renaming_method_parameters
71+
- avoid_return_types_on_setters
72+
# - avoid_returning_null # there are plenty of valid reasons to return null
73+
# - avoid_returning_null_for_future # not yet tested
74+
- avoid_returning_null_for_void
75+
# - avoid_returning_this # there are plenty of valid reasons to return this
76+
# - avoid_setters_without_getters # not yet tested
77+
# - avoid_shadowing_type_parameters # not yet tested
78+
# - avoid_single_cascade_in_expression_statements # not yet tested
79+
- avoid_slow_async_io
80+
- avoid_types_as_parameter_names
81+
# - avoid_types_on_closure_parameters # conflicts with always_specify_types
82+
- avoid_unused_constructor_parameters
83+
- avoid_void_async
84+
- await_only_futures
85+
- camel_case_types
86+
- cancel_subscriptions
87+
# - cascade_invocations # not yet tested
88+
# - close_sinks # not reliable enough
89+
# - comment_references # blocked on https://github.com/flutter/flutter/issues/20765
90+
# - constant_identifier_names # needs an opt-out https://github.com/dart-lang/linter/issues/204
91+
- control_flow_in_finally
92+
# - curly_braces_in_flow_control_structures # not yet tested
93+
# - diagnostic_describe_all_properties # not yet tested
94+
- directives_ordering
95+
- empty_catches
96+
- empty_constructor_bodies
97+
- empty_statements
98+
# - file_names # not yet tested
99+
- flutter_style_todos
100+
- hash_and_equals
101+
- implementation_imports
102+
# - invariant_booleans # too many false positives: https://github.com/dart-lang/linter/issues/811
103+
- iterable_contains_unrelated_type
104+
# - join_return_with_assignment # not yet tested
105+
- library_names
106+
- library_prefixes
107+
# - lines_longer_than_80_chars # not yet tested
108+
- list_remove_unrelated_type
109+
# - literal_only_boolean_expressions # too many false positives: https://github.com/dart-lang/sdk/issues/34181
110+
- no_adjacent_strings_in_list
111+
- no_duplicate_case_values
112+
- non_constant_identifier_names
113+
# - null_closures # not yet tested
114+
# - omit_local_variable_types # opposite of always_specify_types
115+
# - one_member_abstracts # too many false positives
116+
# - only_throw_errors # https://github.com/flutter/flutter/issues/5792
117+
- overridden_fields
118+
- package_api_docs
119+
- package_names
120+
- package_prefixed_library_names
121+
# - parameter_assignments # we do this commonly
122+
- prefer_adjacent_string_concatenation
123+
- prefer_asserts_in_initializer_lists
124+
# - prefer_asserts_with_message # not yet tested
125+
- prefer_collection_literals
126+
- prefer_conditional_assignment
127+
- prefer_const_constructors
128+
- prefer_const_constructors_in_immutables
129+
- prefer_const_declarations
130+
- prefer_const_literals_to_create_immutables
131+
# - prefer_constructors_over_static_methods # not yet tested
132+
- prefer_contains
133+
# - prefer_double_quotes # opposite of prefer_single_quotes
134+
- prefer_equal_for_default_values
135+
# - prefer_expression_function_bodies # conflicts with https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#consider-using--for-short-functions-and-methods
136+
- prefer_final_fields
137+
# - prefer_final_in_for_each # not yet tested
138+
- prefer_final_locals
139+
# - prefer_for_elements_to_map_fromIterable # not yet tested
140+
- prefer_foreach
141+
# - prefer_function_declarations_over_variables # not yet tested
142+
- prefer_generic_function_type_aliases
143+
- prefer_if_elements_to_conditional_expressions
144+
- prefer_if_null_operators
145+
- prefer_initializing_formals
146+
- prefer_inlined_adds
147+
# - prefer_int_literals # not yet tested
148+
# - prefer_interpolation_to_compose_strings # not yet tested
149+
- prefer_is_empty
150+
- prefer_is_not_empty
151+
- prefer_iterable_whereType
152+
# - prefer_mixin # https://github.com/dart-lang/language/issues/32
153+
# - prefer_null_aware_operators # disable until NNBD, see https://github.com/flutter/flutter/pull/32711#issuecomment-492930932
154+
- prefer_single_quotes
155+
- prefer_spread_collections
156+
- prefer_typing_uninitialized_variables
157+
- prefer_void_to_null
158+
# - provide_deprecation_message # not yet tested
159+
# - public_member_api_docs # enabled on a case-by-case basis; see e.g. packages/analysis_options.yaml
160+
- recursive_getters
161+
- slash_for_doc_comments
162+
# - sort_child_properties_last # not yet tested
163+
- sort_constructors_first
164+
- sort_pub_dependencies
165+
- sort_unnamed_constructors_first
166+
- test_types_in_equals
167+
- throw_in_finally
168+
# - type_annotate_public_apis # subset of always_specify_types
169+
- type_init_formals
170+
# - unawaited_futures # too many false positives
171+
# - unnecessary_await_in_return # not yet tested
172+
- unnecessary_brace_in_string_interps
173+
- unnecessary_const
174+
- unnecessary_getters_setters
175+
# - unnecessary_lambdas # has false positives: https://github.com/dart-lang/linter/issues/498
176+
- unnecessary_new
177+
- unnecessary_null_aware_assignments
178+
- unnecessary_null_in_if_null_operators
179+
- unnecessary_overrides
180+
- unnecessary_parenthesis
181+
- unnecessary_statements
182+
- unnecessary_this
183+
- unrelated_type_equality_checks
184+
# - unsafe_html # not yet tested
185+
- use_full_hex_values_for_flutter_colors
186+
# - use_function_type_syntax_for_parameters # not yet tested
187+
- use_rethrow_when_possible
188+
# - use_setters_to_change_properties # not yet tested
189+
# - use_string_buffers # has false positives: https://github.com/dart-lang/sdk/issues/34182
190+
# - use_to_and_as_if_applicable # has false positives, so we prefer to catch this by code-review
191+
- valid_regexps
192+
# - void_checks # not yet tested

android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ buildscript {
88
}
99

1010
dependencies {
11-
classpath 'com.android.tools.build:gradle:3.4.0'
11+
classpath 'com.android.tools.build:gradle:3.5.2'
1212
}
1313
}
1414

@@ -22,7 +22,7 @@ rootProject.allprojects {
2222
apply plugin: 'com.android.library'
2323

2424
android {
25-
compileSdkVersion 28
25+
compileSdkVersion 29
2626

2727
defaultConfig {
2828
minSdkVersion 16

android/src/main/java/io/crossingthestreams/flutterappauth/FlutterAppauthPlugin.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,8 @@ private void performAuthorization(AuthorizationServiceConfiguration serviceConfi
230230
authConfigBuilder.setConnectionBuilder(InsecureConnectionBuilder.INSTANCE);
231231
}
232232

233-
AppAuthConfiguration authConfig = authConfigBuilder.build();
234-
AuthorizationRequest authRequest = authRequestBuilder.build();
235-
AuthorizationService authService = new AuthorizationService(registrar.context(), authConfig);
236-
Intent authIntent = authService.getAuthorizationRequestIntent(authRequest);
233+
AuthorizationService authService = new AuthorizationService(registrar.context(), authConfigBuilder.build());
234+
Intent authIntent = authService.getAuthorizationRequestIntent(authRequestBuilder.build());
237235
registrar.activity().startActivityForResult(authIntent, exchangeCode ? RC_AUTH_EXCHANGE_CODE : RC_AUTH);
238236
}
239237

@@ -260,9 +258,7 @@ private void performTokenRequest(AuthorizationServiceConfiguration serviceConfig
260258
authConfigBuilder.setConnectionBuilder(InsecureConnectionBuilder.INSTANCE);
261259
}
262260

263-
AppAuthConfiguration authConfig = authConfigBuilder.build();
264-
TokenRequest tokenRequest = builder.build();
265-
AuthorizationService authService = new AuthorizationService(registrar.context(), authConfig);
261+
AuthorizationService authService = new AuthorizationService(registrar.context(), authConfigBuilder.build());
266262
AuthorizationService.TokenResponseCallback tokenResponseCallback = new AuthorizationService.TokenResponseCallback() {
267263
@Override
268264
public void onTokenRequestCompleted(
@@ -275,6 +271,8 @@ public void onTokenRequestCompleted(
275271
}
276272
}
277273
};
274+
275+
TokenRequest tokenRequest = builder.build();
278276
if (clientSecret == null) {
279277
authService.performTokenRequest(tokenRequest, tokenResponseCallback);
280278
} else {
@@ -325,8 +323,7 @@ private void processAuthorizationData(final AuthorizationResponse authResponse,
325323
authConfigBuilder.setConnectionBuilder(InsecureConnectionBuilder.INSTANCE);
326324
}
327325

328-
AppAuthConfiguration authConfig = authConfigBuilder.build();
329-
AuthorizationService authService = new AuthorizationService(registrar.context(), authConfig);
326+
AuthorizationService authService = new AuthorizationService(registrar.context(), authConfigBuilder.build());
330327
AuthorizationService.TokenResponseCallback tokenResponseCallback = new AuthorizationService.TokenResponseCallback() {
331328
@Override
332329
public void onTokenRequestCompleted(

0 commit comments

Comments
 (0)