Gate bot logic on full account authentication
This commit is contained in:
1 parent
4db6de8bf5
commit
2fd92bf82c
22 files changed
+635
-65
No files matched your search
@@ -5,6 +5,11 @@ export function createControlRouter(ctx: WebContext): Router {
|
||||
const router = Router();
|
||||
|
||||
router.post('/start', (_req, res) => {
|
||||
if (!ctx.services.accountAuth?.isFullyAuthenticated()) {
|
||||
ctx.logger.warn('Bot start blocked until full account authentication');
|
||||
res.status(409).json({ success: false, running: false, authenticated: false });
|
||||
return;
|
||||
}
|
||||
ctx.setBotRunning(true);
|
||||
ctx.activity.push('sent', 'Bot started by user');
|
||||
ctx.logger.info('Bot started via web UI');
|
||||
|
||||
+14
-3
@@ -18,13 +18,23 @@ export function createLoginRouter(ctx: WebContext): Router {
|
||||
|
||||
router.get('/login/status', async (_req, res) => {
|
||||
const browser = ctx.services.browser;
|
||||
if (!browser) {
|
||||
const accountAuth = ctx.services.accountAuth;
|
||||
if (!browser || !accountAuth) {
|
||||
res.status(503).json({ ready: false, error: 'browser not initialised' });
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const loggedIn = await browser.isSessionValid();
|
||||
res.json({ ready: true, loggedIn, status: browser.getSessionState() });
|
||||
const loggedIn = await accountAuth.ensureFullyAuthenticated();
|
||||
const browserState = browser.getSessionState();
|
||||
res.json({
|
||||
ready: true,
|
||||
loggedIn,
|
||||
status: loggedIn
|
||||
? 'authenticated'
|
||||
: browserState === 'unreachable'
|
||||
? 'unreachable'
|
||||
: 'login-required',
|
||||
});
|
||||
} catch (error) {
|
||||
ctx.logger.error('Failed to check login status:', error);
|
||||
res.status(500).json({ ready: true, loggedIn: false, error: 'check failed' });
|
||||
@@ -40,6 +50,7 @@ export function createLoginRouter(ctx: WebContext): Router {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
ctx.services.accountAuth?.invalidate('Interactive Reddit login requested');
|
||||
const page = await browser.getPage();
|
||||
await page.bringToFront().catch(() => undefined);
|
||||
await page.goto('https://www.reddit.com/login', { waitUntil: 'domcontentloaded' });
|
||||
|
||||
Reference in new issue
Block a user