@@ -2,7 +2,9 @@ import { Resource } from "sst"
22import { z } from "zod"
33import { issuer } from "@openauthjs/openauth"
44import { createSubjects } from "@openauthjs/openauth/subject"
5+ import { CodeProvider } from "@openauthjs/openauth/provider/code"
56import { GithubProvider } from "@openauthjs/openauth/provider/github"
7+ import { GoogleOidcProvider } from "@openauthjs/openauth/provider/google"
68import { CloudflareStorage } from "@openauthjs/openauth/storage/cloudflare"
79import { Account } from "@opencode/cloud-core/account.js"
810
@@ -30,6 +32,53 @@ export default {
3032 clientSecret : Resource . GITHUB_CLIENT_SECRET_CONSOLE . value ,
3133 scopes : [ "read:user" , "user:email" ] ,
3234 } ) ,
35+ google : GoogleOidcProvider ( {
36+ clientID : Resource . GOOGLE_CLIENT_ID . value ,
37+ scopes : [ "openid" , "email" ] ,
38+ } ) ,
39+ // email: CodeProvider({
40+ // async request(req, state, form, error) {
41+ // console.log(state)
42+ // const params = new URLSearchParams()
43+ // if (error) {
44+ // params.set("error", error.type)
45+ // }
46+ // if (state.type === "start") {
47+ // return Response.redirect(process.env.AUTH_FRONTEND_URL + "/auth/email?" + params.toString(), 302)
48+ // }
49+ //
50+ // if (state.type === "code") {
51+ // return Response.redirect(process.env.AUTH_FRONTEND_URL + "/auth/code?" + params.toString(), 302)
52+ // }
53+ //
54+ // return new Response("ok")
55+ // },
56+ // async sendCode(claims, code) {
57+ // const email = z.string().email().parse(claims.email)
58+ // const cmd = new SendEmailCommand({
59+ // Destination: {
60+ // ToAddresses: [email],
61+ // },
62+ // FromEmailAddress: `SST <auth@${Resource.Email.sender}>`,
63+ // Content: {
64+ // Simple: {
65+ // Body: {
66+ // Html: {
67+ // Data: `Your pin code is <strong>${code}</strong>`,
68+ // },
69+ // Text: {
70+ // Data: `Your pin code is ${code}`,
71+ // },
72+ // },
73+ // Subject: {
74+ // Data: "SST Console Pin Code: " + code,
75+ // },
76+ // },
77+ // },
78+ // })
79+ // await ses.send(cmd)
80+ // },
81+ // }),
3382 } ,
3483 storage : CloudflareStorage ( {
3584 namespace : env . AuthStorage ,
@@ -50,7 +99,14 @@ export default {
5099 } )
51100 const user = ( await userResponse . json ( ) ) as { email : string }
52101 email = user . email
53- } else throw new Error ( "Unsupported provider" )
102+ } else if ( response . provider === "google" ) {
103+ if ( ! response . id . email_verified ) throw new Error ( "Google email not verified" )
104+ email = response . id . email as string
105+ }
106+ //if (response.provider === "email") {
107+ // email = response.claims.email
108+ //}
109+ else throw new Error ( "Unsupported provider" )
54110
55111 if ( ! email ) throw new Error ( "No email found" )
56112
0 commit comments