enzostvs HF Staff commited on
Commit
e4d51c2
·
1 Parent(s): 71fcc87

login through iframe

Browse files
Files changed (1) hide show
  1. hooks/useUser.ts +43 -0
hooks/useUser.ts CHANGED
@@ -8,6 +8,7 @@ import { ProjectType, User } from "@/types";
8
  import { api } from "@/lib/api";
9
  import { toast } from "sonner";
10
  import MY_TOKEN_KEY from "@/lib/get-cookie-name";
 
11
 
12
 
13
  export const useUser = (initialData?: {
@@ -63,8 +64,50 @@ export const useUser = (initialData?: {
63
  client.setQueryData(["me.projects"], projects);
64
  };
65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  const openLoginWindow = async () => {
67
  setCurrentRoute(window.location.pathname);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  return router.push("/auth");
69
  };
70
 
 
8
  import { api } from "@/lib/api";
9
  import { toast } from "sonner";
10
  import MY_TOKEN_KEY from "@/lib/get-cookie-name";
11
+ import { useBroadcastChannel } from "@/lib/useBroadcastChannel";
12
 
13
 
14
  export const useUser = (initialData?: {
 
64
  client.setQueryData(["me.projects"], projects);
65
  };
66
 
67
+ // Listen for OAuth callback from popup window
68
+ useBroadcastChannel("auth", (message: any) => {
69
+ if (message.type === "user-oauth" && message.code) {
70
+ loginFromCode(message.code);
71
+ }
72
+ });
73
+
74
+ const isInIframe = () => {
75
+ try {
76
+ return window.self !== window.top;
77
+ } catch {
78
+ return true;
79
+ }
80
+ };
81
+
82
  const openLoginWindow = async () => {
83
  setCurrentRoute(window.location.pathname);
84
+
85
+ // If in iframe, open OAuth in popup window
86
+ if (isInIframe()) {
87
+ try {
88
+ const response = await api.get("/auth/login-url");
89
+ const loginUrl = response.data?.loginUrl;
90
+
91
+ if (loginUrl) {
92
+ const width = 600;
93
+ const height = 700;
94
+ const left = (window.screen.width - width) / 2;
95
+ const top = (window.screen.height - height) / 2;
96
+
97
+ window.open(
98
+ loginUrl,
99
+ "HuggingFace Login",
100
+ `width=${width},height=${height},left=${left},top=${top},popup=yes`
101
+ );
102
+ return;
103
+ }
104
+ } catch (error) {
105
+ console.error("Failed to open login popup:", error);
106
+ toast.error("Failed to open login window");
107
+ }
108
+ }
109
+
110
+ // Default: navigate to auth page (for non-iframe contexts)
111
  return router.push("/auth");
112
  };
113