mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 20:06:08 +01:00 
			
		
		
		
	token auth to /login
This commit is contained in:
		@@ -11,6 +11,8 @@ const eventService = require('../../services/events');
 | 
				
			|||||||
const cls = require('../../services/cls');
 | 
					const cls = require('../../services/cls');
 | 
				
			||||||
const sqlInit = require('../../services/sql_init');
 | 
					const sqlInit = require('../../services/sql_init');
 | 
				
			||||||
const sql = require('../../services/sql');
 | 
					const sql = require('../../services/sql');
 | 
				
			||||||
 | 
					const optionService = require('../../services/options');
 | 
				
			||||||
 | 
					const ApiToken = require('../../entities/api_token');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function loginSync(req) {
 | 
					async function loginSync(req) {
 | 
				
			||||||
    if (!await sqlInit.schemaExists()) {
 | 
					    if (!await sqlInit.schemaExists()) {
 | 
				
			||||||
@@ -76,7 +78,28 @@ async function loginToProtectedSession(req) {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function token(req) {
 | 
				
			||||||
 | 
					    const username = req.body.username;
 | 
				
			||||||
 | 
					    const password = req.body.password;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const isUsernameValid = username === await optionService.getOption('username');
 | 
				
			||||||
 | 
					    const isPasswordValid = await passwordEncryptionService.verifyPassword(password);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!isUsernameValid || !isPasswordValid) {
 | 
				
			||||||
 | 
					        return [401, "Incorrect username/password"];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const apiToken = await new ApiToken({
 | 
				
			||||||
 | 
					        token: utils.randomSecureToken()
 | 
				
			||||||
 | 
					    }).save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					        token: apiToken.token
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
    loginSync,
 | 
					    loginSync,
 | 
				
			||||||
    loginToProtectedSession
 | 
					    loginToProtectedSession,
 | 
				
			||||||
 | 
					    token
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -1,33 +1,8 @@
 | 
				
			|||||||
"use strict";
 | 
					"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const imageService = require('../../services/image');
 | 
					const imageService = require('../../services/image');
 | 
				
			||||||
const utils = require('../../services/utils');
 | 
					 | 
				
			||||||
const dateNoteService = require('../../services/date_notes');
 | 
					const dateNoteService = require('../../services/date_notes');
 | 
				
			||||||
const sql = require('../../services/sql');
 | 
					 | 
				
			||||||
const noteService = require('../../services/notes');
 | 
					const noteService = require('../../services/notes');
 | 
				
			||||||
const passwordEncryptionService = require('../../services/password_encryption');
 | 
					 | 
				
			||||||
const optionService = require('../../services/options');
 | 
					 | 
				
			||||||
const ApiToken = require('../../entities/api_token');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async function login(req) {
 | 
					 | 
				
			||||||
    const username = req.body.username;
 | 
					 | 
				
			||||||
    const password = req.body.password;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const isUsernameValid = username === await optionService.getOption('username');
 | 
					 | 
				
			||||||
    const isPasswordValid = await passwordEncryptionService.verifyPassword(password);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!isUsernameValid || !isPasswordValid) {
 | 
					 | 
				
			||||||
        return [401, "Incorrect username/password"];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const apiToken = await new ApiToken({
 | 
					 | 
				
			||||||
        token: utils.randomSecureToken()
 | 
					 | 
				
			||||||
    }).save();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return {
 | 
					 | 
				
			||||||
        token: apiToken.token
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function uploadImage(req) {
 | 
					async function uploadImage(req) {
 | 
				
			||||||
    const file = req.file;
 | 
					    const file = req.file;
 | 
				
			||||||
@@ -64,7 +39,6 @@ async function saveNote(req) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
    login,
 | 
					 | 
				
			||||||
    uploadImage,
 | 
					    uploadImage,
 | 
				
			||||||
    saveNote
 | 
					    saveNote
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -213,7 +213,7 @@ function register(app) {
 | 
				
			|||||||
    apiRoute(GET, '/api/script/relation/:noteId/:relationName', scriptRoute.getRelationBundles);
 | 
					    apiRoute(GET, '/api/script/relation/:noteId/:relationName', scriptRoute.getRelationBundles);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // no CSRF since this is called from android app
 | 
					    // no CSRF since this is called from android app
 | 
				
			||||||
    route(POST, '/api/sender/login', [], senderRoute.login, apiResultHandler);
 | 
					    route(POST, '/api/sender/login', [], loginApiRoute.token, apiResultHandler);
 | 
				
			||||||
    route(POST, '/api/sender/image', [auth.checkSenderToken, uploadMiddleware], senderRoute.uploadImage, apiResultHandler);
 | 
					    route(POST, '/api/sender/image', [auth.checkSenderToken, uploadMiddleware], senderRoute.uploadImage, apiResultHandler);
 | 
				
			||||||
    route(POST, '/api/sender/note', [auth.checkSenderToken], senderRoute.saveNote, apiResultHandler);
 | 
					    route(POST, '/api/sender/note', [auth.checkSenderToken], senderRoute.saveNote, apiResultHandler);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -223,6 +223,7 @@ function register(app) {
 | 
				
			|||||||
    route(POST, '/api/login/sync', [], loginApiRoute.loginSync, apiResultHandler);
 | 
					    route(POST, '/api/login/sync', [], loginApiRoute.loginSync, apiResultHandler);
 | 
				
			||||||
    // this is for entering protected mode so user has to be already logged-in (that's the reason we don't require username)
 | 
					    // this is for entering protected mode so user has to be already logged-in (that's the reason we don't require username)
 | 
				
			||||||
    apiRoute(POST, '/api/login/protected', loginApiRoute.loginToProtectedSession);
 | 
					    apiRoute(POST, '/api/login/protected', loginApiRoute.loginToProtectedSession);
 | 
				
			||||||
 | 
					    route(POST, '/api/login/token', [], loginApiRoute.token, apiResultHandler);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    route(POST, '/api/clipper/notes', [], clipperRoute.createNote, apiResultHandler);
 | 
					    route(POST, '/api/clipper/notes', [], clipperRoute.createNote, apiResultHandler);
 | 
				
			||||||
    route(POST, '/api/clipper/image', [], clipperRoute.createImage, apiResultHandler);
 | 
					    route(POST, '/api/clipper/image', [], clipperRoute.createImage, apiResultHandler);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ const {TRILIUM_DATA_DIR} = require('./data_dir');
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const APP_DB_VERSION = 136;
 | 
					const APP_DB_VERSION = 136;
 | 
				
			||||||
const SYNC_VERSION = 9;
 | 
					const SYNC_VERSION = 9;
 | 
				
			||||||
 | 
					const CLIPPER_VERSION = 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
    appVersion: packageJson.version,
 | 
					    appVersion: packageJson.version,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user