client side login and register almost done
This commit is contained in:
parent
78031d8e70
commit
46cf748651
1 changed files with 136 additions and 7 deletions
|
@ -36,7 +36,7 @@ func Run() {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
token = cryptoUtils.GetUserToken()
|
token = cryptoUtils.GetUserToken()
|
||||||
|
|
||||||
command := flag.Arg(0)
|
command := flag.Arg(0)
|
||||||
switch command {
|
switch command {
|
||||||
|
@ -79,7 +79,7 @@ func Run() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
showMessagesInfo(page, pageSize, listClientMessageInfo)
|
showMessagesInfo(page, pageSize, listClientMessageInfo)
|
||||||
|
|
||||||
case "getmsg":
|
case "getmsg":
|
||||||
if flag.NArg() < 2 {
|
if flag.NArg() < 2 {
|
||||||
|
@ -97,7 +97,39 @@ func Run() {
|
||||||
printError(err.Error())
|
printError(err.Error())
|
||||||
}
|
}
|
||||||
showMessage(msg)
|
showMessage(msg)
|
||||||
|
case "register":
|
||||||
|
// call register
|
||||||
|
if flag.NArg() > 3 {
|
||||||
|
printError("MSG SERVICE: command error!")
|
||||||
|
showHelp()
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
userId := flag.Arg(1)
|
||||||
|
password := flag.Arg(2)
|
||||||
|
if userId == "" || password == "" {
|
||||||
|
printError("MSG SERVICE: command error!")
|
||||||
|
showHelp()
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
err := registerUser(userId, password, clientKeyStore)
|
||||||
|
if err != nil {
|
||||||
|
printError(err.Error())
|
||||||
|
}
|
||||||
|
// TODO: print register successful
|
||||||
|
case "login":
|
||||||
|
if flag.NArg() > 3 {
|
||||||
|
printError("MSG SERVICE: command error!")
|
||||||
|
showHelp()
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
userId := flag.Arg(1)
|
||||||
|
password := flag.Arg(2)
|
||||||
|
err := login(userId,password,clientKeyStore)
|
||||||
|
if err != nil {
|
||||||
|
printError(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: print logged in
|
||||||
case "help":
|
case "help":
|
||||||
showHelp()
|
showHelp()
|
||||||
|
|
||||||
|
@ -105,7 +137,6 @@ func Run() {
|
||||||
printError("MSG SERVICE: command error!")
|
printError("MSG SERVICE: command error!")
|
||||||
showHelp()
|
showHelp()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getHTTPClient(tlsConfig *tls.Config) *http.Client {
|
func getHTTPClient(tlsConfig *tls.Config) *http.Client {
|
||||||
|
@ -113,6 +144,104 @@ func getHTTPClient(tlsConfig *tls.Config) *http.Client {
|
||||||
return &http.Client{Transport: transport}
|
return &http.Client{Transport: transport}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func registerUser(userId string, password string, clientKeyStore cryptoUtils.KeyStore) error {
|
||||||
|
postRegister := protocol.NewPostRegister(userId, password, clientKeyStore.GetCert().Raw)
|
||||||
|
|
||||||
|
jsonData, err := json.Marshal(postRegister)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
client := getHTTPClient(clientKeyStore.GetClientTLSConfig())
|
||||||
|
|
||||||
|
parsedURL, err := url.Parse(baseURL)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
parsedURL.JoinPath("register")
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", parsedURL.String(), bytes.NewBuffer(jsonData))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error creating request: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error making request: %v", err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
// Read response
|
||||||
|
responseBody, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error reading response body: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
var reportError protocol.ReportError
|
||||||
|
if err := json.Unmarshal(responseBody, &reportError); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return errors.New(reportError.ErrorMessage)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Token struct {
|
||||||
|
Value string `json:"token"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func login(userId string, password string, clientKeyStore cryptoUtils.KeyStore) error {
|
||||||
|
postLogin := protocol.NewPostLogin(userId, password)
|
||||||
|
|
||||||
|
jsonData, err := json.Marshal(postLogin)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
client := getHTTPClient(clientKeyStore.GetClientTLSConfig())
|
||||||
|
|
||||||
|
parsedURL, err := url.Parse(baseURL)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
parsedURL.JoinPath("Login")
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", parsedURL.String(), bytes.NewBuffer(jsonData))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error creating request: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error making request: %v", err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
// Read response
|
||||||
|
responseBody, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error reading response body: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
var reportError protocol.ReportError
|
||||||
|
if err := json.Unmarshal(responseBody, &reportError); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return errors.New(reportError.ErrorMessage)
|
||||||
|
}
|
||||||
|
var token Token
|
||||||
|
err = json.Unmarshal(responseBody,token)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
// TODO: persist token to disk
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func sendCommand(clientKeyStore cryptoUtils.KeyStore, plainSubject, plainBody, uid string) error {
|
func sendCommand(clientKeyStore cryptoUtils.KeyStore, plainSubject, plainBody, uid string) error {
|
||||||
//Turn content to bytes
|
//Turn content to bytes
|
||||||
plainSubjectBytes, err := Marshal(plainSubject)
|
plainSubjectBytes, err := Marshal(plainSubject)
|
||||||
|
@ -171,7 +300,7 @@ func sendCommand(clientKeyStore cryptoUtils.KeyStore, plainSubject, plainBody, u
|
||||||
return fmt.Errorf("error reading response body: %v", err)
|
return fmt.Errorf("error reading response body: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode != 200 {
|
if resp.StatusCode != http.StatusOK {
|
||||||
var reportError protocol.ReportError
|
var reportError protocol.ReportError
|
||||||
if err := json.Unmarshal(responseBody, &reportError); err != nil {
|
if err := json.Unmarshal(responseBody, &reportError); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -219,7 +348,7 @@ func getMsgCommand(clientKeyStore cryptoUtils.KeyStore, num int) (ClientMessage,
|
||||||
return ClientMessage{}, fmt.Errorf("error reading response body: %v", err)
|
return ClientMessage{}, fmt.Errorf("error reading response body: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode != 200 {
|
if resp.StatusCode != http.StatusOK {
|
||||||
var reportError protocol.ReportError
|
var reportError protocol.ReportError
|
||||||
if err := json.Unmarshal(body, &reportError); err != nil {
|
if err := json.Unmarshal(body, &reportError); err != nil {
|
||||||
return ClientMessage{}, err
|
return ClientMessage{}, err
|
||||||
|
@ -293,7 +422,7 @@ func getUserCert(keyStore cryptoUtils.KeyStore, uid string) (*x509.Certificate,
|
||||||
return nil, fmt.Errorf("error reading response body: %v", err)
|
return nil, fmt.Errorf("error reading response body: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode == 200 {
|
if resp.StatusCode == http.StatusOK {
|
||||||
var answerGetUserCert protocol.AnswerGetUserCert
|
var answerGetUserCert protocol.AnswerGetUserCert
|
||||||
if err := json.Unmarshal(body, &answerGetUserCert); err != nil {
|
if err := json.Unmarshal(body, &answerGetUserCert); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -352,7 +481,7 @@ func getUnreadMessagesInfo(keyStore cryptoUtils.KeyStore, page int, pageSize int
|
||||||
return protocol.AnswerGetUnreadMsgsInfo{}, nil, fmt.Errorf("error reading response body: %v", err)
|
return protocol.AnswerGetUnreadMsgsInfo{}, nil, fmt.Errorf("error reading response body: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode == 200 {
|
if resp.StatusCode == http.StatusOK {
|
||||||
//Create Set of needed certificates
|
//Create Set of needed certificates
|
||||||
var answerGetUnreadMsgsInfo protocol.AnswerGetUnreadMsgsInfo
|
var answerGetUnreadMsgsInfo protocol.AnswerGetUnreadMsgsInfo
|
||||||
if err := json.Unmarshal(body, &answerGetUnreadMsgsInfo); err != nil {
|
if err := json.Unmarshal(body, &answerGetUnreadMsgsInfo); err != nil {
|
||||||
|
|
Loading…
Add table
Reference in a new issue