v0.0.10
+ Добавлена авторизация как отдельная страница + Небольшие исправления в JS при ответе от сервера
This commit is contained in:
		
							parent
							
								
									639118f781
								
							
						
					
					
						commit
						e74c0a1af0
					
				
					 11 changed files with 283 additions and 40 deletions
				
			
		| 
						 | 
				
			
			@ -15,13 +15,16 @@ import std.array;
 | 
			
		|||
import verinfo;
 | 
			
		||||
import pgdb;
 | 
			
		||||
import structures;
 | 
			
		||||
import response;
 | 
			
		||||
 | 
			
		||||
import requests.numbers;
 | 
			
		||||
import requests.sms;
 | 
			
		||||
import requests.ussd;
 | 
			
		||||
import requests.server;
 | 
			
		||||
import requests.authorization;
 | 
			
		||||
 | 
			
		||||
static ServerInfo serverInfo;
 | 
			
		||||
static AuthData serverAuthData;
 | 
			
		||||
 | 
			
		||||
private void showVersion() {
 | 
			
		||||
    writefln("daster версия %s, собрано %s", getDasterVersion(), __DATE__);
 | 
			
		||||
| 
						 | 
				
			
			@ -32,8 +35,9 @@ void page404(HTTPServerRequest req, HTTPServerResponse res, HTTPServerErrorInfo
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
int main(string[] args) {
 | 
			
		||||
    log.level(log.INFORMATION);
 | 
			
		||||
    log.output(log.SYSLOG);
 | 
			
		||||
    log.level(log.INFORMATION)
 | 
			
		||||
        .output(log.SYSLOG)
 | 
			
		||||
        .color(true);
 | 
			
		||||
 | 
			
		||||
    bool flagVersion;
 | 
			
		||||
    string flagSettings;
 | 
			
		||||
| 
						 | 
				
			
			@ -88,6 +92,7 @@ int main(string[] args) {
 | 
			
		|||
    if (webHost.logfile.length) log.file(webHost.logfile);
 | 
			
		||||
 | 
			
		||||
    rcAsteriskDB();
 | 
			
		||||
    rcAuth();
 | 
			
		||||
 | 
			
		||||
    auto router = new URLRouter;
 | 
			
		||||
    router.post("/", &postReq);
 | 
			
		||||
| 
						 | 
				
			
			@ -144,16 +149,15 @@ void startWebServer(WebHost wh, HTTPServerSettings http, HTTPServerSettings http
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void getReq(HTTPServerRequest req, HTTPServerResponse res) {
 | 
			
		||||
    // if (req.session) {
 | 
			
		||||
    //     auto user = req.session.get!UserData("userData");
 | 
			
		||||
    //     if (user.loggedIn) {
 | 
			
		||||
    //         renderMainPage(req, res);
 | 
			
		||||
    //         return;
 | 
			
		||||
    //     }
 | 
			
		||||
    // }
 | 
			
		||||
    if (req.session) {
 | 
			
		||||
        auto user = req.session.get!UserData("user");
 | 
			
		||||
        if (user.login) {
 | 
			
		||||
            renderMainPage(req, res);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // render!("index.dt", serverInfo)(res);
 | 
			
		||||
    renderMainPage(req, res);
 | 
			
		||||
    render!("authorization.dt", serverInfo)(res);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void renderMainPage(HTTPServerRequest req, HTTPServerResponse res) {
 | 
			
		||||
| 
						 | 
				
			
			@ -168,23 +172,23 @@ void postReq(HTTPServerRequest req, HTTPServerResponse res) {
 | 
			
		|||
 | 
			
		||||
    if (query.empty) return;
 | 
			
		||||
 | 
			
		||||
    // if (query != "authorization" && !checkAuth(req)) {
 | 
			
		||||
    //     res.send(
 | 
			
		||||
    //         true,
 | 
			
		||||
    //         "Сессия не существует. Перезагрузите страницу"
 | 
			
		||||
    //     );
 | 
			
		||||
    //     return;
 | 
			
		||||
    // }
 | 
			
		||||
    if (query != "login" && !checkAuth(req)) {
 | 
			
		||||
        res.send(
 | 
			
		||||
            true,
 | 
			
		||||
            "Сессия не существует. Перезагрузите страницу"
 | 
			
		||||
        );
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    log.d("json request: " ~ jsr.to!string);
 | 
			
		||||
 | 
			
		||||
    switch (query) {
 | 
			
		||||
    //     case "authorization":
 | 
			
		||||
    //         authorization(req, res);
 | 
			
		||||
    //         break;
 | 
			
		||||
    //     case "logout":
 | 
			
		||||
    //         logout(req, res);
 | 
			
		||||
    //         break;
 | 
			
		||||
        case "login":
 | 
			
		||||
            login(req, res, serverAuthData);
 | 
			
		||||
            break;
 | 
			
		||||
        case "logout":
 | 
			
		||||
            logout(req, res);
 | 
			
		||||
            break;
 | 
			
		||||
        case "listnumbergroups":
 | 
			
		||||
            getListNumberGroups(req, res);
 | 
			
		||||
            break;
 | 
			
		||||
| 
						 | 
				
			
			@ -441,3 +445,24 @@ WebHost rcWebHost() {
 | 
			
		|||
 | 
			
		||||
    return wh;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void rcAuth() {
 | 
			
		||||
    ConfigSection auth;
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
        auth = rc[]["auth"];
 | 
			
		||||
    } catch (Exception e) {
 | 
			
		||||
        log.c("В конфигурационном файле не верны настройки auth");
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (auth["login"].empty)
 | 
			
		||||
        log.w("Логин не был установлен - auth.login");
 | 
			
		||||
    else
 | 
			
		||||
        serverAuthData.login = auth["login"];
 | 
			
		||||
 | 
			
		||||
    if (auth["password"].empty)
 | 
			
		||||
        log.w("Пароль не был установлен - auth.password");
 | 
			
		||||
    else
 | 
			
		||||
        serverAuthData.password = auth["password"];
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										47
									
								
								source/requests/authorization.d
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								source/requests/authorization.d
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
module requests.authorization;
 | 
			
		||||
 | 
			
		||||
import vibe.vibe;
 | 
			
		||||
import response;
 | 
			
		||||
import structures;
 | 
			
		||||
import singlog;
 | 
			
		||||
 | 
			
		||||
void login(HTTPServerRequest req, HTTPServerResponse res, AuthData serverAuthData) {
 | 
			
		||||
    auto userAuthData = deserializeJson!AuthData(req.json);
 | 
			
		||||
 | 
			
		||||
    if (!(serverAuthData.login == userAuthData.login &&
 | 
			
		||||
        serverAuthData.password == userAuthData.password)) {
 | 
			
		||||
        log.i(("Данные авторизации не верны: %s").format(req.json));
 | 
			
		||||
        res.send(
 | 
			
		||||
            true,
 | 
			
		||||
            "Данные авторизации не верны"
 | 
			
		||||
        );
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    auto user = UserData(true);
 | 
			
		||||
 | 
			
		||||
    req.session = res.startSession();
 | 
			
		||||
    req.session.set!UserData("user", user);
 | 
			
		||||
 | 
			
		||||
    log.i("Авторизация успешно пройдена");
 | 
			
		||||
 | 
			
		||||
    res.send();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void logout(HTTPServerRequest req, HTTPServerResponse res) {
 | 
			
		||||
    req.session.set!UserData("user", UserData.init);
 | 
			
		||||
    res.terminateSession();
 | 
			
		||||
 | 
			
		||||
    log.i("Выход из системы");
 | 
			
		||||
 | 
			
		||||
    res.send();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool checkAuth(HTTPServerRequest req) {
 | 
			
		||||
    if (req.session)
 | 
			
		||||
        return req.session.get!UserData("user").login;
 | 
			
		||||
 | 
			
		||||
    log.d("Отсутствует авторизация");
 | 
			
		||||
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4,6 +4,15 @@ struct ServerInfo {
 | 
			
		|||
    string name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct AuthData {
 | 
			
		||||
    string login;
 | 
			
		||||
    string password;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct UserData {
 | 
			
		||||
    bool login = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct WebHost {
 | 
			
		||||
    string[] addresses;
 | 
			
		||||
    ushort http = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,3 @@
 | 
			
		|||
module version_;
 | 
			
		||||
 | 
			
		||||
enum dasterVersion = "v0.0.9";
 | 
			
		||||
enum dasterVersion = "v0.0.10";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue