Как создать клиентское и серверное приложение, которое аутентифицирует клиентский запрос с помощью ключа ssh на клиентском локальном компьютере - PullRequest
0 голосов
/ 09 ноября 2019

Я хочу создать три приложения: 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...