Enable logging out by revoking the access token

This commit is contained in:
Nat 2021-05-04 18:50:41 -03:00
parent 856f215e36
commit 6d0bfa8fd7
1 changed files with 221 additions and 169 deletions

View File

@ -13,6 +13,7 @@ import {
import AsyncStorage from "@react-native-async-storage/async-storage";
import { withoutHTML } from "src/interface/rendering";
import * as requests from "src/requests";
import { ScreenWithBackBarJsx } from "src/components/navigation/navigators";
@ -46,12 +47,68 @@ const SettingsJsx = (props) => {
// Use Context to get this stuff eventually
profile: TEST_PROFILE,
newProfile: TEST_PROFILE,
loaded: false,
});
const fields = state.newProfile.fields;
const _handleLogout = async () => {
await requests.postForm(
`https://${state.instance}/oauth/revoke`,
{
client_id: state.appObject.client_id,
client_secret: state.appObject.client_secret,
token: state.token.access_token,
}
);
await AsyncStorage.multiRemove([
"@user_profile",
"@user_notifications",
"@user_instance",
"@user_token",
]);
props.navigation.navigate("Authenticate");
};
useEffect(() => {
AsyncStorage
.multiGet([
"@user_profile",
"@user_instance",
"@user_token",
"@app_object",
])
.then(([profilePair, instancePair, tokenPair, appPair]) =>
[
JSON.parse(profilePair[1]),
instancePair[1],
JSON.parse(tokenPair[1]),
JSON.parse(appPair[1]),
]
)
.then(([profile, instance, token, appObject]) => {
let newProfile = profile;
newProfile.fields = newProfile.fields == null
? []
: newProfile.fields;
setState({...state,
profile: profile,
newProfile: newProfile,
instance: instance,
appObject: appObject,
token: token,
loaded: true,
})
});
}, []);
return (
<ScreenWithBackBarJsx navigation = { props.navigation }>
<>
{ state.loaded
? <ScreenWithBackBarJsx navigation = { props.navigation }>
<View style = { styles.avatar.container }>
<Image
source = { { uri: state.profile.avatar } }
@ -207,15 +264,7 @@ const SettingsJsx = (props) => {
</TouchableOpacity>
<TouchableOpacity
style = { styles.button.container }
onPress = {
() => {
AsyncStorage.multiRemove(
["@user_profile", "@user_notifications"]
).then(() => {
props.navigation.navigate("Authenticate");
});
}
}>
onPress = { _handleLogout }>
<Text style = {
[ styles.button.text, styles.button.warning ]
}>
@ -224,6 +273,9 @@ const SettingsJsx = (props) => {
</TouchableOpacity>
</View>
</ScreenWithBackBarJsx>
: <></>
}
</>
);
};