notify and debug apple-signin api
This commit is contained in:
@ -151,7 +151,7 @@ function PwaManager() {
|
||||
return;
|
||||
}
|
||||
|
||||
await fetch('/api/notification', {
|
||||
await fetch('/api/notify', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
@ -219,6 +219,7 @@ function PwaManager() {
|
||||
<span className="align-middle">Телеграм</span>
|
||||
</a>
|
||||
</div>
|
||||
<
|
||||
</>
|
||||
);
|
||||
|
||||
|
@ -163,7 +163,7 @@ function UserSection({ session }) {
|
||||
|
||||
function SignInButton() {
|
||||
return (
|
||||
<div className="items-center py-2" onClick={() => signIn()}>
|
||||
<div className="items-center py-2 font-bold" onClick={() => signIn()}>
|
||||
<button>Впишете се</button>
|
||||
</div>
|
||||
);
|
||||
|
40
pages/api/auth/apple-signin.ts
Normal file
40
pages/api/auth/apple-signin.ts
Normal file
@ -0,0 +1,40 @@
|
||||
// pages/api/auth/apple.js
|
||||
import jwt from 'jsonwebtoken';
|
||||
import axios from 'axios';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
export default async function handler(req, res) {
|
||||
if (req.method === 'GET') {
|
||||
// Generate the client secret
|
||||
const clientSecret = generateClientSecret();
|
||||
const redirectUri = `${req.headers.origin}/api/auth/apple/callback`;
|
||||
|
||||
// Redirect to Apple's authorization page
|
||||
res.redirect(`https://appleid.apple.com/auth/authorize?response_type=code&client_id=${process.env.APPLE_CLIENT_ID}&redirect_uri=${encodeURIComponent(redirectUri)}&scope=name+email&response_mode=form_post&state=STATE&client_secret=${encodeURIComponent(clientSecret)}`);
|
||||
} else {
|
||||
res.status(405).json({ error: 'Method not allowed' });
|
||||
}
|
||||
}
|
||||
|
||||
function generateClientSecret() {
|
||||
const appleKey = fs.readFileSync(path.resolve('./_deploy/appleKey.p8'), 'utf8');
|
||||
const teamID = process.env.APPLE_TEAM_ID || "XC57P9SXDK";
|
||||
const keyID = process.env.APPLE_KEY_ID || "TB3V355G5Y";
|
||||
const appleAppID = process.env.APPLE_APP_ID || "com.mwitnessing.mwitnessing";
|
||||
|
||||
// Token expiration
|
||||
const now = Math.floor(Date.now() / 1000);
|
||||
const exp = now + 86400 * 180; // 6 months
|
||||
|
||||
const claims = {
|
||||
iss: teamID,
|
||||
iat: now,
|
||||
exp: exp,
|
||||
aud: 'https://appleid.apple.com',
|
||||
sub: appleAppID,
|
||||
};
|
||||
|
||||
const token = jwt.sign(claims, privateKey, { algorithm: 'ES256', header: { alg: 'ES256', kid: keyId } });
|
||||
return token;
|
||||
}
|
37
pages/api/notify.ts
Normal file
37
pages/api/notify.ts
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
const webPush = require('web-push')
|
||||
|
||||
webPush.setVapidDetails(
|
||||
`mailto:${process.env.WEB_PUSH_EMAIL}`,
|
||||
process.env.NEXT_PUBLIC_WEB_PUSH_PUBLIC_KEY,
|
||||
process.env.WEB_PUSH_PRIVATE_KEY
|
||||
)
|
||||
|
||||
const Notification = (req, res) => {
|
||||
if (req.method == 'POST') {
|
||||
const { subscription } = req.body
|
||||
|
||||
webPush
|
||||
.sendNotification(
|
||||
subscription,
|
||||
JSON.stringify({ title: 'Hello Web Push', message: 'Your web push notification is here!' })
|
||||
)
|
||||
.then(response => {
|
||||
res.writeHead(response.statusCode, response.headers).end(response.body)
|
||||
})
|
||||
.catch(err => {
|
||||
if ('statusCode' in err) {
|
||||
res.writeHead(err.statusCode, err.headers).end(err.body)
|
||||
} else {
|
||||
console.error(err)
|
||||
res.statusCode = 500
|
||||
res.end()
|
||||
}
|
||||
})
|
||||
} else {
|
||||
res.statusCode = 405
|
||||
res.end()
|
||||
}
|
||||
}
|
||||
|
||||
export default Notification
|
Reference in New Issue
Block a user