Compare commits
3 commits
bf957ba115
...
0ac28515df
Author | SHA1 | Date | |
---|---|---|---|
0ac28515df | |||
09ea8cd563 | |||
644480182d |
5 changed files with 81 additions and 20 deletions
|
@ -3,6 +3,9 @@
|
|||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.CALL_PHONE"/>
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/>
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION"/>
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||
|
@ -44,6 +47,8 @@
|
|||
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH" android:value="ERROR_RECOVERY_ONLY"/>
|
||||
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="0"/>
|
||||
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://expo-updates.alertesecours.fr/api/manifest?project=alerte-secours&channel=release"/>
|
||||
<service android:name="com.transistorsoft.locationmanager.service.LocationRequestService" android:foregroundServiceType="location|dataSync" android:enabled="true" android:exported="false" tools:replace="android:foregroundServiceType"/>
|
||||
<service android:name="com.transistorsoft.backgroundfetch.BackgroundFetchService" android:foregroundServiceType="dataSync" android:enabled="true" android:exported="false"/>
|
||||
<activity android:name=".MainActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|uiMode|locale|layoutDirection" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.App.SplashScreen" android:exported="true" android:screenOrientation="portrait">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
|
|
@ -1,40 +1,76 @@
|
|||
import * as Device from "expo-device";
|
||||
|
||||
import network from "~/network";
|
||||
import env from "~/env";
|
||||
|
||||
import {
|
||||
REGISTER_USER_MUTATION,
|
||||
LOGIN_USER_TOKEN_MUTATION,
|
||||
STORE_FCM_TOKEN_MUTATION,
|
||||
REGISTER_USER_MUTATION_STRING,
|
||||
LOGIN_USER_TOKEN_MUTATION_STRING,
|
||||
} from "~/auth/gql";
|
||||
|
||||
import { getDeviceUuid } from "./deviceUuid";
|
||||
|
||||
// to support refresh auth in headless mode we'll use fetch instead of apollo/axios
|
||||
// read more https://github.com/transistorsoft/react-native-background-fetch/issues/562
|
||||
|
||||
export async function registerUser() {
|
||||
const { data } = await network.apolloClient.mutate({
|
||||
mutation: REGISTER_USER_MUTATION,
|
||||
context: {
|
||||
skipAuth: true, // Skip adding Authorization header
|
||||
const response = await fetch(env.GRAPHQL_URL, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
// No Authorization header for this request
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query: REGISTER_USER_MUTATION_STRING,
|
||||
}),
|
||||
});
|
||||
const authToken = data.addOneAuthInitToken.authTokenJwt;
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP Error: ${response.status} ${response.statusText}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.errors && data.errors.length > 0) {
|
||||
const message = data.errors.map((err) => err.message).join("; ");
|
||||
throw new Error(`GraphQL Error: ${message}`);
|
||||
}
|
||||
|
||||
const authToken = data.data.addOneAuthInitToken.authTokenJwt;
|
||||
return { authToken };
|
||||
}
|
||||
|
||||
export async function loginUserToken({ authToken }) {
|
||||
const deviceUuid = await getDeviceUuid();
|
||||
const { data } = await network.apolloClient.mutate({
|
||||
mutation: LOGIN_USER_TOKEN_MUTATION,
|
||||
variables: {
|
||||
authTokenJwt: authToken,
|
||||
phoneModel: Device.modelName,
|
||||
deviceUuid,
|
||||
},
|
||||
context: {
|
||||
skipAuth: true, // Skip adding Authorization header
|
||||
const response = await fetch(env.GRAPHQL_URL, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
// No Authorization header for this request
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query: LOGIN_USER_TOKEN_MUTATION_STRING,
|
||||
variables: {
|
||||
authTokenJwt: authToken,
|
||||
phoneModel: Device.modelName,
|
||||
deviceUuid,
|
||||
},
|
||||
}),
|
||||
});
|
||||
const userToken = data.doAuthLoginToken.userBearerJwt;
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP Error: ${response.status} ${response.statusText}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (data.errors && data.errors.length > 0) {
|
||||
const message = data.errors.map((err) => err.message).join("; ");
|
||||
throw new Error(`GraphQL Error: ${message}`);
|
||||
}
|
||||
|
||||
const userToken = data.data.doAuthLoginToken.userBearerJwt;
|
||||
return { userToken };
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { gql } from "@apollo/client";
|
||||
import { print } from "graphql";
|
||||
|
||||
export const REGISTER_USER_MUTATION = gql`
|
||||
mutation registerUser {
|
||||
|
@ -36,3 +37,9 @@ export const STORE_FCM_TOKEN_MUTATION = gql`
|
|||
}
|
||||
}
|
||||
`;
|
||||
|
||||
// Convert GraphQL documents to strings for Axios requests
|
||||
export const REGISTER_USER_MUTATION_STRING = print(REGISTER_USER_MUTATION);
|
||||
export const LOGIN_USER_TOKEN_MUTATION_STRING = print(
|
||||
LOGIN_USER_TOKEN_MUTATION,
|
||||
);
|
||||
|
|
|
@ -5,7 +5,7 @@ import { ApolloProvider } from "@apollo/client";
|
|||
|
||||
import createApolloClient from "~/network/apollo";
|
||||
|
||||
// import createAxios from "~/network/axios";
|
||||
import createAxios from "~/network/axios";
|
||||
import createKy from "~/network/ky";
|
||||
|
||||
import network from "~/network";
|
||||
|
@ -41,6 +41,8 @@ initializeNewApolloClient();
|
|||
const oaFilesKy = createKy({ prefixUrl: env.OA_FILES_URL + "/" }, { store });
|
||||
network.oaFilesKy = oaFilesKy;
|
||||
|
||||
network.axios = createAxios();
|
||||
|
||||
export default function NetworkProviders({ children }) {
|
||||
const [key, setKey] = useState(0);
|
||||
|
||||
|
|
|
@ -24,8 +24,19 @@ export default function createAxios(baseOptions = {}) {
|
|||
"Content-Type": "application/json",
|
||||
},
|
||||
};
|
||||
setBearerHeader(defaultConfig.headers, getAuthState().userToken);
|
||||
|
||||
// Only add bearer token if Authorization header is not explicitly set to undefined
|
||||
if (config.headers.Authorization !== undefined) {
|
||||
setBearerHeader(defaultConfig.headers, getAuthState().userToken);
|
||||
}
|
||||
|
||||
defaultsDeep(config, defaultConfig);
|
||||
|
||||
// Clean up undefined Authorization header
|
||||
if (config.headers.Authorization === undefined) {
|
||||
delete config.headers.Authorization;
|
||||
}
|
||||
|
||||
return config;
|
||||
},
|
||||
function (error) {
|
||||
|
|
Loading…
Add table
Reference in a new issue