Compare commits

..

No commits in common. "0ac28515dff752af30e45ff2f88d52da46c591aa" and "bf957ba11571edd647a71ed53e54a99fca6b2445" have entirely different histories.

5 changed files with 20 additions and 81 deletions

View file

@ -3,9 +3,6 @@
<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"/>
@ -47,8 +44,6 @@
<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&amp;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"/>
@ -78,4 +73,4 @@
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false"/>
</application>
</manifest>
</manifest>

View file

@ -1,76 +1,40 @@
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 response = await fetch(env.GRAPHQL_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
// No Authorization header for this request
const { data } = await network.apolloClient.mutate({
mutation: REGISTER_USER_MUTATION,
context: {
skipAuth: true, // Skip adding Authorization header
},
body: JSON.stringify({
query: REGISTER_USER_MUTATION_STRING,
}),
});
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;
const authToken = data.addOneAuthInitToken.authTokenJwt;
return { authToken };
}
export async function loginUserToken({ authToken }) {
const deviceUuid = await getDeviceUuid();
const response = await fetch(env.GRAPHQL_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
// No Authorization header for this request
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
},
body: JSON.stringify({
query: LOGIN_USER_TOKEN_MUTATION_STRING,
variables: {
authTokenJwt: authToken,
phoneModel: Device.modelName,
deviceUuid,
},
}),
});
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;
const userToken = data.doAuthLoginToken.userBearerJwt;
return { userToken };
}

View file

@ -1,5 +1,4 @@
import { gql } from "@apollo/client";
import { print } from "graphql";
export const REGISTER_USER_MUTATION = gql`
mutation registerUser {
@ -37,9 +36,3 @@ 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,
);

View file

@ -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,8 +41,6 @@ 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);

View file

@ -24,19 +24,8 @@ export default function createAxios(baseOptions = {}) {
"Content-Type": "application/json",
},
};
// Only add bearer token if Authorization header is not explicitly set to undefined
if (config.headers.Authorization !== undefined) {
setBearerHeader(defaultConfig.headers, getAuthState().userToken);
}
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) {