react-native-app-auth
Version:
React Native bridge for AppAuth for supporting any OAuth 2 provider
62 lines (51 loc) • 2.07 kB
text/typescript
import { withAppDelegate, ConfigPlugin } from '@expo/config-plugins';
import { isExpo53OrLater } from '../expo-version';
const codeModIOs = require('@expo/config-plugins/build/ios/codeMod');
const withAppDelegateSwift: ConfigPlugin = rootConfig => {
return withAppDelegate(rootConfig, config => {
let { contents } = config.modResults;
if (!contents.includes('RNAppAuthAuthorizationFlowManager')) {
const replaceText = 'class AppDelegate: ExpoAppDelegate';
contents = contents.replace(replaceText, `${replaceText}, RNAppAuthAuthorizationFlowManager`);
const replaceText2 =
'return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)';
contents = contents.replace(
replaceText2,
`if let authorizationFlowManagerDelegate = self.authorizationFlowManagerDelegate {
if authorizationFlowManagerDelegate.resumeExternalUserAgentFlow(with: url) {
return true
}
}
${replaceText2}`
);
const replaceText3 = 'var reactNativeFactory: RCTReactNativeFactory?';
contents = contents.replace(
replaceText3,
`${replaceText3}\n\n public weak var authorizationFlowManagerDelegate: RNAppAuthAuthorizationFlowManagerDelegate?`
);
}
config.modResults.contents = contents;
return config;
});
};
export const withAppAuthAppDelegate: ConfigPlugin = rootConfig => {
if (isExpo53OrLater(rootConfig)) {
return withAppDelegateSwift(rootConfig);
}
return withAppDelegate(rootConfig, config => {
let { contents } = config.modResults;
// insert the code that handles the custom scheme redirections
contents = codeModIOs.insertContentsInsideObjcFunctionBlock(
contents,
'application:openURL:options:',
`// react-native-app-auth
if ([self.authorizationFlowManagerDelegate resumeExternalUserAgentFlowWithURL:url]) {
return YES;
}
`,
{ position: 'head' }
);
config.modResults.contents = contents;
return config;
});
};