1
uploader_tools/domains/loginer/v1/login.go

91 lines
2.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// NNM-Club torrent filess mass downloader
// Created for Uploaders group
// Copyright (c) 2012-2019 Vladimir "fat0troll" Hodakov
package loginerv1
import (
"bufio"
"net/http"
"net/url"
"os"
"strings"
)
// login function name is self-descriptive.
// After successful login it will write cookie file and config in system's
// config directory
func login() {
dlog.Info().Msg("Введите адрес сайта NNM-Club, без протокола (к примеру, nnmclub.ro)")
// First enter is site name, second and third are user credentials
scanner := bufio.NewScanner(os.Stdin)
scanline := 0
for scanner.Scan() {
scanline++
switch {
case scanline == 1:
c.Config.URL = scanner.Text()
dlog.Info().Msg("Введите имя пользователя")
case scanline == 2:
c.Config.Username = scanner.Text()
dlog.Info().Msg("Введите пароль")
default:
c.Config.Password = scanner.Text()
}
if scanline == 3 {
break
}
}
if scanner.Err() != nil {
dlog.Fatal().Err(scanner.Err()).Msg("Не удалось прочитать пользовательский ввод.")
}
c.SaveConfig()
obtainCookies()
dlog.Info().Msg("Логин прошёл успешно. Перезапустите программу с ключём -forum НОМЕРОРУМА.")
os.Exit(0)
}
// obtainCookie tries to login to NNM-Club and saves resulting cookie
// If it can't save cookie, the program will terminate with error and you will
// need to authorize again or retry cookie obtaining.
func obtainCookies() {
// This value is obtained from login.php sources.
nnmClubCode := "58161005a04f0ee5"
client := http.Client{
// This is disables redirects for this request. Otherwise we can't obtain cookies
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse
},
}
formData := url.Values{}
formData.Add("username", c.Config.Username)
formData.Add("password", c.Config.Password)
formData.Add("autologin", "on")
formData.Add("redirect", "index.php")
formData.Add("code", nnmClubCode)
formData.Add("login", "%C2%F5%EE%E4")
url := "https://" + c.Config.URL + "/forum/login.php"
req, _ := http.NewRequest(http.MethodPost, url, strings.NewReader(formData.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
resp, err := client.Do(req)
if err != nil {
dlog.Fatal().Err(err).Msg("Не удалось отправить запрос на авторизацию в NNM-Club.")
}
defer resp.Body.Close()
if len(resp.Cookies()) == 0 {
dlog.Fatal().Msg("Не удалось получить печеньки от сайта NNM-Club. Неправильные имя/пароль или адрес сайта.")
}
c.SetCookies(resp.Cookies())
dlog.Info().Str("username", c.Config.Username).Msg("Успешный логин.")
}