|
|
|
@ -3,12 +3,13 @@ package moffas
@@ -3,12 +3,13 @@ package moffas
|
|
|
|
|
import ( |
|
|
|
|
"encoding/json" |
|
|
|
|
"errors" |
|
|
|
|
"moffas_go/db" |
|
|
|
|
"moffas_go/helper" |
|
|
|
|
"moffas_go/logger" |
|
|
|
|
"strconv" |
|
|
|
|
"strings" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"github.com/jmoiron/sqlx" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
type GeneratedChallenge struct { |
|
|
|
@ -28,7 +29,7 @@ type VerificationResult struct {
@@ -28,7 +29,7 @@ type VerificationResult struct {
|
|
|
|
|
Organization_data map[string]interface{} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func Generate_challenge(reference_id, username string, half_nonce string) (GeneratedChallenge, error) { |
|
|
|
|
func Generate_challenge(reference_id string, conn *sqlx.DB, username string, half_nonce string) (GeneratedChallenge, error) { |
|
|
|
|
logger.Debug(reference_id, " -- start generate_challenge") |
|
|
|
|
startTime := time.Now() |
|
|
|
|
defer func() { |
|
|
|
@ -36,13 +37,7 @@ func Generate_challenge(reference_id, username string, half_nonce string) (Gener
@@ -36,13 +37,7 @@ func Generate_challenge(reference_id, username string, half_nonce string) (Gener
|
|
|
|
|
logger.Debug(reference_id, " -- generate_challenge done in ", dur) |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
conn, err := db.GetConnection() |
|
|
|
|
if err != nil { |
|
|
|
|
return GeneratedChallenge{}, err |
|
|
|
|
} |
|
|
|
|
defer db.ReleaseConnection() |
|
|
|
|
|
|
|
|
|
current_time := time.Now().Unix() |
|
|
|
|
current_time := startTime.Unix() |
|
|
|
|
nonce, err := helper.GenerateRandomString(8) |
|
|
|
|
if err != nil { |
|
|
|
|
return GeneratedChallenge{}, err |
|
|
|
@ -114,7 +109,7 @@ func Generate_challenge(reference_id, username string, half_nonce string) (Gener
@@ -114,7 +109,7 @@ func Generate_challenge(reference_id, username string, half_nonce string) (Gener
|
|
|
|
|
logger.Info(reference_id, "CALCULATED CLIENT HASH : ", calculated_client_hash) |
|
|
|
|
//----- CONTEKAN DOANG -----
|
|
|
|
|
|
|
|
|
|
err = upsert_challenge(reference_id, full_nonce, dbresult.User_id) |
|
|
|
|
err = upsert_challenge(reference_id, conn, full_nonce, dbresult.User_id) |
|
|
|
|
if err != nil { |
|
|
|
|
return GeneratedChallenge{}, err |
|
|
|
|
} |
|
|
|
@ -126,20 +121,14 @@ func Generate_challenge(reference_id, username string, half_nonce string) (Gener
@@ -126,20 +121,14 @@ func Generate_challenge(reference_id, username string, half_nonce string) (Gener
|
|
|
|
|
}, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func Verify_challenge(reference_id string, full_nonce string, client_hash string, next_nonce string) (VerificationResult, error) { |
|
|
|
|
logger.Debug(reference_id, " start verify_challenge") |
|
|
|
|
func Verify_challenge(reference_id string, conn *sqlx.DB, full_nonce string, client_hash string, next_nonce string) (VerificationResult, error) { |
|
|
|
|
logger.Debug(reference_id, " -- start verify_challenge") |
|
|
|
|
startTime := time.Now() |
|
|
|
|
defer func() { |
|
|
|
|
dur := time.Since(startTime) |
|
|
|
|
logger.Debug(reference_id, " -- verify_challenge done in ", dur) |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
conn, err := db.GetConnection() |
|
|
|
|
if err != nil { |
|
|
|
|
return VerificationResult{}, err |
|
|
|
|
} |
|
|
|
|
defer db.ReleaseConnection() |
|
|
|
|
|
|
|
|
|
current_time := time.Now().Unix() |
|
|
|
|
nonce, err := helper.GenerateRandomString(8) |
|
|
|
|
if err != nil { |
|
|
|
@ -243,7 +232,7 @@ func Verify_challenge(reference_id string, full_nonce string, client_hash string
@@ -243,7 +232,7 @@ func Verify_challenge(reference_id string, full_nonce string, client_hash string
|
|
|
|
|
session_id, _ := helper.GenerateRandomString(16) |
|
|
|
|
logger.Info(reference_id, "SESSION ID : ", session_id) |
|
|
|
|
|
|
|
|
|
err = upsert_session(reference_id, session_id, dbresult.User_id, session_secret) |
|
|
|
|
err = upsert_session(reference_id, conn, session_id, dbresult.User_id, session_secret) |
|
|
|
|
if err != nil { |
|
|
|
|
return VerificationResult{}, err |
|
|
|
|
} |
|
|
|
@ -272,7 +261,7 @@ func Verify_challenge(reference_id string, full_nonce string, client_hash string
@@ -272,7 +261,7 @@ func Verify_challenge(reference_id string, full_nonce string, client_hash string
|
|
|
|
|
}, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func upsert_challenge(reference_id, full_nonce string, user_id int64) error { |
|
|
|
|
func upsert_challenge(reference_id string, conn *sqlx.DB, full_nonce string, user_id int64) error { |
|
|
|
|
logger.Debug(reference_id, " start upsert_challenge") |
|
|
|
|
startTime := time.Now() |
|
|
|
|
defer func() { |
|
|
|
@ -280,16 +269,10 @@ func upsert_challenge(reference_id, full_nonce string, user_id int64) error {
@@ -280,16 +269,10 @@ func upsert_challenge(reference_id, full_nonce string, user_id int64) error {
|
|
|
|
|
logger.Debug(reference_id, " -- upsert_challenge done in ", dur) |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
conn, err := db.GetConnection() |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
defer db.ReleaseConnection() |
|
|
|
|
|
|
|
|
|
query := "DELETE FROM servouser.challenge_response WHERE full_nonce = $1 OR user_id = $2" |
|
|
|
|
sql := strings.ReplaceAll(strings.ReplaceAll(query, "\t", " "), "\n", " ") |
|
|
|
|
logger.Debug(reference_id, "SQL : ", sql) |
|
|
|
|
_, err = conn.Exec(query, full_nonce, user_id) |
|
|
|
|
_, err := conn.Exec(query, full_nonce, user_id) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
@ -306,25 +289,18 @@ func upsert_challenge(reference_id, full_nonce string, user_id int64) error {
@@ -306,25 +289,18 @@ func upsert_challenge(reference_id, full_nonce string, user_id int64) error {
|
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func upsert_session(reference_id, session_id string, user_id int64, session_secret string) error { |
|
|
|
|
logger.Debug(reference_id, " start upsert_challenge") |
|
|
|
|
|
|
|
|
|
func upsert_session(reference_id string, conn *sqlx.DB, session_id string, user_id int64, session_secret string) error { |
|
|
|
|
logger.Debug(reference_id, " -- start upsert_session.") |
|
|
|
|
startTime := time.Now() |
|
|
|
|
defer func() { |
|
|
|
|
dur := time.Since(startTime) |
|
|
|
|
logger.Debug(reference_id, " -- upsert_session done in ", dur) |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
conn, err := db.GetConnection() |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
defer db.ReleaseConnection() |
|
|
|
|
|
|
|
|
|
query := "DELETE FROM servouser.session WHERE session_id = $1 OR user_id = $2" |
|
|
|
|
sql := strings.ReplaceAll(strings.ReplaceAll(query, "\t", " "), "\n", " ") |
|
|
|
|
logger.Debug(reference_id, "SQL : ", sql) |
|
|
|
|
_, err = conn.Exec(query, session_id, user_id) |
|
|
|
|
_, err := conn.Exec(query, session_id, user_id) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|