+2
-6
packages/appview/src/api/oauth.ts
+2
-6
packages/appview/src/api/oauth.ts
···
88
88
function isValidUrl(url: string): boolean {
89
89
try {
90
90
const urlp = new URL(url)
91
-
// http or https, no query params or path
92
-
return (
93
-
(urlp.protocol === 'http:' || urlp.protocol === 'https:') &&
94
-
!urlp.search &&
95
-
!urlp.pathname
96
-
)
91
+
// http or https
92
+
return urlp.protocol === 'http:' || urlp.protocol === 'https:'
97
93
} catch (error) {
98
94
return false
99
95
}
+6
-2
packages/client/src/pages/LoginPage.tsx
+6
-2
packages/client/src/pages/LoginPage.tsx
···
49
49
<Header />
50
50
51
51
<div className="bg-white dark:bg-gray-800 rounded-lg p-6 shadow-sm max-w-md mx-auto w-full">
52
-
<h2 className="text-xl font-semibold mb-4">Login with your handle</h2>
52
+
<h2 className="text-xl font-semibold mb-4">Login with ATProto</h2>
53
53
54
54
{error && (
55
55
<div className="text-red-500 mb-4 p-2 bg-red-50 dark:bg-red-950 dark:bg-opacity-30 rounded-md">
···
63
63
htmlFor="handle"
64
64
className="block mb-2 text-gray-700 dark:text-gray-300"
65
65
>
66
-
Enter your Bluesky handle or ATProto PDS:
66
+
Enter your Bluesky handle:
67
67
</label>
68
68
<input
69
69
id="handle"
···
74
74
disabled={pending}
75
75
className="w-full p-3 border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-300 dark:focus:ring-blue-500 transition-colors"
76
76
/>
77
+
<p className="text-gray-400 dark:text-gray-500 text-sm mt-2">
78
+
You can also enter an AT Protocol PDS URL, i.e.{' '}
79
+
<span className="whitespace-nowrap">https://bsky.social</span>
80
+
</p>
77
81
</div>
78
82
79
83
<button