55<script setup lang="ts">
66import { useRoute , useRouter } from " vue-router" ;
77import { useHead } from " @vueuse/head" ;
8- import { publishSelfMessage } from " ./window.messages" ;
8+ import { publishMessage } from " ./window.messages" ;
9+ import { useStore } from " ../store/main" ;
910
1011useHead ({
1112 title: " 7TV | Authentication (OAuth2 Callback)" ,
@@ -16,42 +17,59 @@ useHead({
1617
1718const route = useRoute ();
1819const router = useRouter ();
20+ const opener = window .opener as Window ;
1921
2022function handleRoute() {
21- if (! window . opener ) {
23+ if (! opener ) {
2224 router .replace (" /" );
2325 return ;
2426 }
2527
26- // Parse the token as a URLSearchParams
2728 const params = new URLSearchParams (route .hash .slice (1 ));
2829 const token = params .get (" token" );
29- const wasLinked = params .get (" linked" ) === " true" ;
30- const isLogout = params .get (" logout" ) === " true" ;
3130
32- if (isLogout ) {
33- publishSelfMessage ({ event: " LOGOUT_SUCCESS" });
34- window .close ();
35- return ;
31+ let is7TV;
32+ try {
33+ is7TV = opener .location .origin === window .origin ;
34+ } catch (e ) {
35+ is7TV = false ;
3636 }
3737
38- if (wasLinked ) {
39- publishSelfMessage ({ event: " LOGIN_LINKED" });
40- window .close ();
41- return ;
42- }
38+ if (is7TV ) {
39+ const wasLinked = params .get (" linked" ) === " true" ;
40+ const isLogout = params .get (" logout" ) === " true" ;
4341
44- if (! token ) {
45- publishSelfMessage ({ event: " LOGIN_FAILED" });
46- window .close ();
47- return ;
42+ // Parse the token as a URLSearchParams
43+
44+ if (isLogout ) {
45+ publishMessage ({ event: " LOGOUT_SUCCESS" });
46+ window .close ();
47+ return ;
48+ }
49+
50+ if (wasLinked ) {
51+ publishMessage ({ event: " LOGIN_LINKED" });
52+ window .close ();
53+ return ;
54+ }
55+
56+ if (! token ) {
57+ publishMessage ({ event: " LOGIN_FAILED" });
58+ window .close ();
59+ return ;
60+ }
61+
62+ // Send the token back to the parent window
63+ publishMessage ({
64+ event: " LOGIN_TOKEN" ,
65+ token ,
66+ });
67+ } else if (token && window .sessionStorage .getItem (" 7tv-extension-auth" ) === " true" ) {
68+ const store = useStore ();
69+ store .setAuthToken (token );
70+ opener .postMessage ({ type: " 7tv-token" , token }, " https://www.twitch.tv" );
4871 }
4972
50- // Send the token back to the parent window
51- publishSelfMessage ({
52- event: " LOGIN_TOKEN" ,
53- token ,
54- });
5573 window .close ();
5674}
5775
0 commit comments