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

91 lines
2.8 KiB
Go
Raw Normal View History

// 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("Успешный логин.")
}