Я хочу создать три приложения: 1.cli-main-server, который выполняет всю работу с бэкендом, 2.cli-client-app, которое является интерфейсным приложением, где пользователь может войти в систему и вручную скопировать и вставить ssh-ключ системы пользователя. 3. Клиентское приложение, из которого пользователь может поделиться сообщением (просто текст). Все, что я хочу знать, - это как проверить запрос (в cli-main-app) от клиента, который уже сохранил свой ssh-ключ внутри себя, икак сделать запрос из приложения Cli на сервер с системным ssh-ключом? Подобный сервер является сервером gitlab (единственный сервер, который я знаю), где пользователь скопирует и вставит свой ssh-ключ, чтобы вытащить и нажать.
Пока я пробовалчтобы создать сервер, который аутентифицирует запрос, используя jwt, внутри моего приложения cli у меня есть следующие команды
$ test login
$ test signup
$ test logout
$ test comment (require authentication)
. Для всех вышеперечисленных команд я проверяю, существует ли файл key.json в корневой папке проекта, если он существует только test comment and test logout
работает для
test login and test signup
, он показывает, что уже вошел в систему. Когда пользователь не вошел в систему для test comment
, чтобы выполнить его, попросите пользователя войти в систему, когда пользователь успешно вошел в систему. Я записываю jwt в keФайл y.json и вошел в систему пользователя для выполнения запросов авторизации. У меня есть проблема с jwt expres, поэтому я хочу реализовать сервер так же, как работа с gitlab.
const axios=require('../config/axios');
const fs=require('fs');
const {prompt}=require('inquirer');
const ora=require('ora')
const chalk=require('chalk')
let userController={};
let commentController={};
let {login,signup,comment}=require('./prompt');
userController.login=()=>{
if(fs.existsSync('./key.json')){
ora().succeed("You're already logged in!!!");
// console.log("You're already loggedin!!!");
}else{
prompt(login).then(answer=>{
axios.post('/user/login',{
username:answer.username,
password:answer.password
}).then(result=>{
fs.writeFileSync('key.json',JSON.stringify({api_key:result.data.token}));
ora().succeed("Login successful!!!");
process.exit(1);
}).catch(err=>{
console.log(err.response.data.msg);
process.exit(1);
});
});
}
}
userController.signup=()=>{
if(fs.existsSync('./key.json')){
ora().succeed("You're already loggedin!!!");
}else{
prompt(signup).then(answer=>{
axios.post('/user',{
username:answer.username,
email:answer.email,
password:answer.password,
}).then(result=>{
fs.writeFileSync('key.json',JSON.stringify({api_key:result.data.token}));
ora().succeed("Login Successful!!!");;
process.exit(1);
}).catch(err=>{
console.log(err.response.data.msg);
process.exit(1);
});
});
}
}
userController.logout=()=>{
if(!fs.existsSync('./key.json')){
ora().warn("You must login to logout");
}else{
if(!fs.unlinkSync('./key.json')){
console.log("Logout successfully!!!")
process.exit(1);
}else{
console.log("Unable to Logout")
process.exit(1);
}
}
}
commentController.postComment=()=>{
if(fs.existsSync('./key.json')){
let key=JSON.parse(fs.readFileSync('./key.json')).api_key;
prompt(comment).then(answer=>{
axios.post('/cmnt',{
title:answer.title,
comment:answer.comment
},{
headers:{
"Authorization":`Bearer ${key}`
}
}).then(result=>{
console.log(result.data.msg);
process.exit(1);
}).catch(err=>{
console.log(err.response.data.msg);
process.exit(1);
});
})
}else{
console.log("Please login to perform this operation.");
console.log(process.exit(1));
}
}
module.exports={
userController,
commentController
}