Skip to content

23 deserialization of the error is missing #28

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: main
Choose a base branch
from
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ class SquareMobilePaymentsSdkPlugin: FlutterPlugin, MethodCallHandler {
when (call.method) {
"getPlatformVersion" ->
result.success("Android Testing ${android.os.Build.VERSION.RELEASE}")
"getSdkVersion" ->
result.success(MobilePaymentsSdk.settingsManager().getSdkSettings().sdkVersion)
"getEnvironment" ->
result.success(MobilePaymentsSdk.settingsManager().getSdkSettings().sdkEnvironment.name)
"getAuthorizationState" ->

"getSdkVersion" ->
SettingsModule.getSdkVersion(result)

"getEnvironment" ->
SettingsModule.getEnvironment(result)

"getAuthorizationState" ->
AuthModule.getAuthorizationState(result)

"getAuthorizedLocation" ->
Expand Down Expand Up @@ -97,9 +97,4 @@ class SquareMobilePaymentsSdkPlugin: FlutterPlugin, MethodCallHandler {
override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
}

companion object {
const val SANDBOX = "sandbox"
const val PRODUCTION = "production"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.squareup.square_mobile_payments_sdk.extensions

import com.squareup.sdk.mobilepayments.authorization.AuthorizationState
import com.squareup.sdk.mobilepayments.authorization.AuthorizedLocation

fun AuthorizedLocation.toAuthorizedLocationMap(): Map<String, Any?> {
return mapOf(
"id" to locationId,
"currencyCode" to currencyCode.name.lowercase(),
"name" to name
)
}

fun AuthorizationState.toAuthorizationStateName(): String {
return when {
isAuthorized -> "authorized"
isAuthorizationInProgress -> "authorizing"
else -> "notAuthorized"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.squareup.square_mobile_payments_sdk.extensions

import com.squareup.sdk.mobilepayments.authorization.AuthorizeErrorCode
import com.squareup.sdk.mobilepayments.core.ErrorDetails

fun ErrorDetails.toErrorDetailsMap(): Map<String, Any?> {
return mapOf("category" to category, "code" to code, "detail" to detail, "field" to field)
}

// Auth

fun AuthorizeErrorCode.toAuthorizeErrorCodeName(): String {
return when (this) {
AuthorizeErrorCode.NO_NETWORK -> "noNetwork"
AuthorizeErrorCode.UNSUPPORTED_COUNTRY -> "unsupportedCountry"
AuthorizeErrorCode.USAGE_ERROR -> "usageError"
else -> "unknown"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import com.squareup.sdk.mobilepayments.payment.CardPaymentDetails
import com.squareup.sdk.mobilepayments.payment.ExternalPaymentDetails
import com.squareup.sdk.mobilepayments.payment.PaymentProcessingFee
import com.squareup.sdk.mobilepayments.payment.SquareAccountDetails
import com.squareup.sdk.mobilepayments.core.ErrorDetails
import com.squareup.sdk.mobilepayments.payment.DigitalWalletDetails
import com.squareup.sdk.mobilepayments.payment.CashPaymentDetails

Expand Down Expand Up @@ -182,16 +181,7 @@ fun Payment.OfflinePayment.toOfflineMap(): Map<String, Any?> {
fun SquareAccountDetails.toAccountMap(): Map<String, Any?> {
return mapOf(
"paymentSourceToken" to paymentSourceToken,
"errors" to errors?.map { it.toErrorMap() }
)
}

fun ErrorDetails.toErrorMap(): Map<String, Any?> {
return mapOf(
"category" to category,
"code" to code,
"detail" to detail,
"field" to field
"errors" to errors?.map { it.toErrorDetailsMap() }
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,60 +1,62 @@
package com.squareup.square_mobile_payments_sdk.modules

import io.flutter.plugin.common.MethodChannel
import android.util.Log
import com.squareup.sdk.mobilepayments.MobilePaymentsSdk
import com.squareup.sdk.mobilepayments.core.Result as SdkResult
import com.squareup.square_mobile_payments_sdk.extensions.toAuthorizationStateName
import com.squareup.square_mobile_payments_sdk.extensions.toAuthorizeErrorCodeName
import com.squareup.square_mobile_payments_sdk.extensions.toAuthorizedLocationMap
import com.squareup.square_mobile_payments_sdk.extensions.toErrorDetailsMap
import io.flutter.plugin.common.MethodChannel

class AuthModule {
companion object {
private val authManager = MobilePaymentsSdk.authorizationManager()
companion object {
private val authManager = MobilePaymentsSdk.authorizationManager()

@JvmStatic
fun getAuthorizationState(result: MethodChannel.Result) {
val authState = when {
authManager.authorizationState.isAuthorized -> "authorized"
authManager.authorizationState.isAuthorizationInProgress -> "authorizing"
else -> "notAuthorized"
}
result.success(authState)
}
@JvmStatic
fun getAuthorizationState(result: MethodChannel.Result) {
result.success(authManager.authorizationState.toAuthorizationStateName())
}

@JvmStatic
fun getAuthorizedLocation(result: MethodChannel.Result) {
val location = authManager.location //Version 2.0.0-beta differs 2.0.1
if (location == null) {
result.success(null)
return
}
val mappedLocation = mapOf(
"id" to location.locationId,
"currencyCode" to location.currencyCode.name.lowercase(),
"name" to location.name
)
result.success(mappedLocation)
}
@JvmStatic
fun getAuthorizedLocation(result: MethodChannel.Result) {
val location = authManager.location
if (location == null) {
result.success(null)
return
}
result.success(location.toAuthorizedLocationMap())
}

@JvmStatic
fun authorize(result: MethodChannel.Result, accessToken: String, locationId: String) {

authManager.authorize(accessToken, locationId) { sdkResult ->
when (sdkResult) {
is SdkResult.Success -> {
result.success(sdkResult.value.toString())
}
is SdkResult.Failure -> {
result.error(sdkResult.errorCode.toString(), sdkResult.errorMessage, sdkResult.debugCode)
}
else -> {
result.error("Unknown", "Unknown", "Unknown")
}
}
}
@JvmStatic
fun authorize(result: MethodChannel.Result, accessToken: String, locationId: String) {
Log.d("Auth", accessToken)
Log.d("Auth", locationId)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove the debug logs here and below.

authManager.authorize(accessToken, locationId) { sdkResult ->
when (sdkResult) {
is SdkResult.Success -> {
Log.d("Auth", "success")
result.success(null)
}
is SdkResult.Failure -> {
Log.d("Auth", "fail")
result.error(
sdkResult.errorCode.toAuthorizeErrorCodeName(),
sdkResult.errorMessage,
sdkResult.details.map { d -> d.toErrorDetailsMap() }
)
}
else -> {
result.error("unknown", "Unknown", "Unknown")
}
}
}
}

@JvmStatic
fun deAuthorize(result: MethodChannel.Result) {
authManager.deauthorize()
result.success("Deauthorized")
}
@JvmStatic
fun deAuthorize(result: MethodChannel.Result) {
authManager.deauthorize()
result.success("Deauthorized")
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,17 @@ class SettingsModule {
companion object {
val settingsManager = MobilePaymentsSdk.settingsManager()


@JvmStatic
fun getSdkVersion(result: MethodChannel.Result) {
result.success(settingsManager.getSdkSettings().sdkVersion)
}

@JvmStatic
fun getEnvironment(result: MethodChannel.Result) {
result.success(settingsManager.getSdkSettings().sdkEnvironment.name)
}

@JvmStatic
fun showSettings(result: MethodChannel.Result) {
settingsManager.showSettings {
Expand Down
33 changes: 22 additions & 11 deletions example/lib/permissions_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -97,20 +97,31 @@ class _PermissionsScreenState extends State<PermissionsScreen> {
await Future.delayed(const Duration(seconds: 1));

try {
response = await _squareMobilePaymentsSdkPlugin.authManager
.authorize(accessToken, locationId) ??
'Unknown response';
} on Exception catch (_) {
response = 'Failed';
await _squareMobilePaymentsSdkPlugin.authManager
.authorize(accessToken, locationId);
if (!mounted) return;
Provider.of<AuthState>(context, listen: false).authorize();
} on AuthorizeError catch (e) {
setState(() {
_signInState = SignInState.error;
});
}

if (!mounted) return;

if (response == 'Authorized' || response.startsWith("AuthorizedLocation")) {
Provider.of<AuthState>(context, listen: false).authorize();
if (!mounted) return;
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
content: Text("${e.code}, ->>> ${e.message}"),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: const Text("OK"),
),
],
);
},
);
}
}

Expand Down
37 changes: 37 additions & 0 deletions ios/Classes/Extensions/AuthorizationExtension.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import SquareMobilePaymentsSDK

extension AuthorizationState {
public func getName() -> String {
switch self {
case .notAuthorized:
return "notAuthorized"
case .authorizing:
return "authorizing"
case .authorized:
return "authorized"
}
}
}

extension AuthorizationError {
func getName() -> String {
return switch self {
case .alreadyAuthorized: "alreadyAuthorized"
case .alreadyInProgress: "alreadyInProgress"
case .authorizationCodeAlreadyRedeemed: "authorizationCodeAlreadyRedeemed"
case .deauthorizationInProgress: "deauthorizationInProgress"
case .deviceTimeDoesNotMatchServerTime: "deviceTimeDoesNotMatchServerTime"
case .emptyAccessToken: "emptyAccessToken"
case .emptyLocationID: "emptyLocationId"
case .expiredAuthorizationCode: "expiredAuthorizationCode"
case .invalidAccessToken: "invalidAccessToken"
case .invalidLocationID: "invalidLocationId"
case .invalidAuthorizationCode : "invalidAuthorizationCode"
case .locationNotActivatedForCardProcessing: "locationNotActivatedForCardProcessing"
case .noNetwork: "noNetwork"
case .unexpected: "unexpected"
case .unsupportedCountry: "unsupportedCountry"
default: "unknown"
}
}
}
24 changes: 10 additions & 14 deletions ios/Classes/Modules/AuthModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,26 @@ public class AuthModule {
private static let authManager = MobilePaymentsSDK.shared.authorizationManager

public static func getAuthorizationState(result: @escaping FlutterResult) {
switch authManager.state {
case .notAuthorized:
result("notAuthorized")
case .authorizing:
result("authorizing")
case .authorized:
result("authorized")
}
return result(authManager.state.getName())
}

public static func authorize(
result: @escaping FlutterResult,
accessToken: String,
result: @escaping FlutterResult,
accessToken: String,
locationId: String) {
authManager.authorize(
withAccessToken: accessToken,
locationID: locationId
) { error in
if let error {
result(FlutterError(code: "UNAUTHORIZED",
message: "Unable to authenticate: \(error.localizedDescription)",
details: nil))
var e = error as NSError
if let authError = AuthorizationError(rawValue: e.code) {
result(FlutterError(code: authError.getName(),
message: e.localizedDescription,
details: e.localizedFailureReason))
}
} else {
result("Authorized")
result(NSNull())
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions ios/Classes/Modules/SettingsModule.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ public class SettingsModule {
}
}
}

public static func getEnvironment(result: @escaping FlutterResult) {
result(MobilePaymentsSDK.shared.settingsManager.sdkSettings.environment.description.uppercased())
result(settingsManager.sdkSettings.environment.description.uppercased())
}

public static func getSdkVersion(result: @escaping FlutterResult) {
result(MobilePaymentsSDK.shared.settingsManager.sdkSettings.version)
result(settingsManager.sdkSettings.version)
}


Expand Down
3 changes: 3 additions & 0 deletions lib/square_mobile_payments_sdk.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ import 'package:square_mobile_payments_sdk/src/managers/reader_manager.dart';
import 'package:square_mobile_payments_sdk/src/managers/settings_manager.dart';
import 'package:square_mobile_payments_sdk/src/managers/tap_to_pay_settings.dart';

export 'package:square_mobile_payments_sdk/src/models/models.dart';
export 'package:square_mobile_payments_sdk/src/errors/errors.dart';

class SquareMobilePaymentsSdk {
final TapToPaySettings tapToPaySettings = TapToPaySettings();
final AuthManager authManager = AuthManager();
Expand Down
Loading