tangled
alpha
login
or
join now
cosmik.network
/
semble
43
fork
atom
A social knowledge tool for researchers built on ATProto
43
fork
atom
overview
issues
13
pulls
pipelines
formatting
Wesley Finck
7 months ago
a2590615
4778a15d
+15
-20
3 changed files
expand all
collapse all
unified
split
src
webapp
app
login
page.tsx
components
extension
SignInPage.tsx
popup.tsx
+1
-1
src/webapp/app/login/page.tsx
···
69
69
} catch (err: any) {
70
70
// Clear the flag even on failure
71
71
ExtensionService.clearExtensionTokensRequested();
72
72
-
72
72
+
73
73
// Redirect to extension error page
74
74
router.push('/extension/auth/error');
75
75
} finally {
+13
-12
src/webapp/components/extension/SignInPage.tsx
···
10
10
const [loginError, setLoginError] = useState('');
11
11
12
12
const handleSignIn = () => {
13
13
-
const appUrl =
14
14
-
process.env.PLASMO_PUBLIC_APP_URL || 'http://localhost:3000';
13
13
+
const appUrl = process.env.PLASMO_PUBLIC_APP_URL || 'http://localhost:3000';
15
14
const loginUrl = `${appUrl}/login?extension-login=true`;
16
15
chrome.tabs.create({ url: loginUrl });
17
16
window.close();
···
28
27
await loginWithAppPassword(handle.trim(), appPassword.trim());
29
28
// Success - the auth context will handle the state update
30
29
} catch (error: any) {
31
31
-
setLoginError(error.message || 'Login failed. Please check your credentials.');
30
30
+
setLoginError(
31
31
+
error.message || 'Login failed. Please check your credentials.',
32
32
+
);
32
33
}
33
34
};
34
35
···
38
39
<Text size="sm" ta="center">
39
40
Sign in with App Password
40
41
</Text>
41
41
-
42
42
+
42
43
<TextInput
43
44
label="Handle"
44
45
placeholder="your-handle.bsky.social"
···
46
47
onChange={(e) => setHandle(e.target.value)}
47
48
disabled={isLoading}
48
49
/>
49
49
-
50
50
+
50
51
<TextInput
51
52
label="App Password"
52
53
type="password"
···
63
64
)}
64
65
65
66
<Stack gap="xs">
66
66
-
<Button
67
67
-
onClick={handleAppPasswordLogin}
67
67
+
<Button
68
68
+
onClick={handleAppPasswordLogin}
68
69
loading={isLoading}
69
70
disabled={!handle.trim() || !appPassword.trim()}
70
71
fullWidth
71
72
>
72
73
Sign In
73
74
</Button>
74
74
-
75
75
-
<Button
76
76
-
variant="subtle"
75
75
+
76
76
+
<Button
77
77
+
variant="subtle"
77
78
onClick={() => setShowAppPasswordForm(false)}
78
79
disabled={isLoading}
79
80
fullWidth
···
93
94
<Button onClick={handleSignIn} fullWidth>
94
95
Sign In
95
96
</Button>
96
96
-
<Anchor
97
97
-
size="sm"
97
97
+
<Anchor
98
98
+
size="sm"
98
99
onClick={() => setShowAppPasswordForm(true)}
99
100
style={{ cursor: 'pointer' }}
100
101
>
+1
-7
src/webapp/popup.tsx
···
4
4
} from './hooks/useExtensionAuth';
5
5
import { SaveCardPage } from './components/extension/SaveCardPage';
6
6
import { SignInPage } from './components/extension/SignInPage';
7
7
-
import {
8
8
-
Card,
9
9
-
MantineProvider,
10
10
-
ScrollArea,
11
11
-
Text,
12
12
-
Stack,
13
13
-
} from '@mantine/core';
7
7
+
import { Card, MantineProvider, ScrollArea, Text, Stack } from '@mantine/core';
14
8
import '@mantine/core/styles.css';
15
9
import { theme } from '@/styles/theme';
16
10