tsk-21: Disable registration (#27)
Closes #21 Reviewed-on: phoenix/textsender-auth#27 Co-authored-by: phoenix <kundeng00@pm.me> Co-committed-by: phoenix <kundeng00@pm.me>
This commit is contained in:
@@ -4,10 +4,10 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/pkg/token"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/token"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/config"
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/model"
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/store"
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/utility"
|
||||
)
|
||||
|
||||
@@ -22,11 +22,12 @@ type LoginResponse struct {
|
||||
}
|
||||
|
||||
type LoginHandler struct {
|
||||
UserStore model.UserStore
|
||||
Config *config.Config
|
||||
UserStore store.UserStore
|
||||
}
|
||||
|
||||
func NewLoginHandler(userStore model.UserStore) *LoginHandler {
|
||||
return &LoginHandler{UserStore: userStore}
|
||||
func NewLoginHandler(cfg *config.Config, userStore store.UserStore) *LoginHandler {
|
||||
return &LoginHandler{Config: cfg, UserStore: userStore}
|
||||
}
|
||||
|
||||
// Login godoc
|
||||
|
||||
@@ -17,8 +17,9 @@ import (
|
||||
)
|
||||
|
||||
func TestLogin(t *testing.T) {
|
||||
cfg := GetConfig()
|
||||
mockstore := mock.NewMockUserStore()
|
||||
handler := NewLoginHandler(mockstore)
|
||||
handler := NewLoginHandler(cfg, mockstore)
|
||||
|
||||
testUser := GetTestUser()
|
||||
unhashedPassword := testUser.Password
|
||||
|
||||
@@ -3,21 +3,21 @@ package handler
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/pkg/token"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/token"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/config"
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/model"
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/store"
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/utility"
|
||||
)
|
||||
|
||||
type RefreshHandler struct {
|
||||
UserStore model.UserStore
|
||||
Config *config.Config
|
||||
UserStore store.UserStore
|
||||
ServiceStore store.ServiceStore
|
||||
}
|
||||
|
||||
func NewRefreshHandler(userStore model.UserStore, serviceStore store.ServiceStore) *RefreshHandler {
|
||||
return &RefreshHandler{UserStore: userStore, ServiceStore: serviceStore}
|
||||
func NewRefreshHandler(cfg *config.Config, userStore store.UserStore, serviceStore store.ServiceStore) *RefreshHandler {
|
||||
return &RefreshHandler{Config: cfg, UserStore: userStore, ServiceStore: serviceStore}
|
||||
}
|
||||
|
||||
type RefreshRequest struct {
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/pkg/user"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/user"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/handler/endpoint"
|
||||
@@ -35,7 +35,8 @@ func TestRefreshTokenWithMock(t *testing.T) {
|
||||
assert.NoError(t, err, "Error creating service user: %v", err)
|
||||
}
|
||||
|
||||
handler := NewServiceHandler(mockStore)
|
||||
cfg := GetConfig()
|
||||
handler := NewServiceHandler(cfg, mockStore)
|
||||
testService := ServiceLoginRequest{Username: serviceUser.Username, Passphrase: unhashed}
|
||||
jsonValue, err := json.Marshal(testService)
|
||||
assert.NoError(t, err, "Error marshaling request")
|
||||
@@ -56,7 +57,7 @@ func TestRefreshTokenWithMock(t *testing.T) {
|
||||
jsonValue, err = json.Marshal(testReq)
|
||||
assert.NoError(t, err, "Error marshaling request")
|
||||
|
||||
newHandler := NewRefreshHandler(userStore, mockStore)
|
||||
newHandler := NewRefreshHandler(cfg, userStore, mockStore)
|
||||
req, _ = http.NewRequest("POST", endpoint.TokenRefresh, strings.NewReader(string(jsonValue)))
|
||||
rr = httptest.NewRecorder()
|
||||
|
||||
|
||||
@@ -4,10 +4,11 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/pkg/user"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/user"
|
||||
"github.com/google/uuid"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/model"
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/config"
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/store"
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/utility"
|
||||
)
|
||||
|
||||
@@ -29,11 +30,12 @@ type RegisterResponse struct {
|
||||
}
|
||||
|
||||
type UserHandler struct {
|
||||
UserStore model.UserStore
|
||||
Config *config.Config
|
||||
UserStore store.UserStore
|
||||
}
|
||||
|
||||
func NewUserHandler(userStore model.UserStore) *UserHandler {
|
||||
return &UserHandler{UserStore: userStore}
|
||||
func NewUserHandler(cfg *config.Config, userStore store.UserStore) *UserHandler {
|
||||
return &UserHandler{Config: cfg, UserStore: userStore}
|
||||
}
|
||||
|
||||
// Register godoc
|
||||
@@ -46,6 +48,7 @@ func NewUserHandler(userStore model.UserStore) *UserHandler {
|
||||
// @Param request body RegisterUser true "Data to add user"
|
||||
// @Success 200 {object} RegisterResponse
|
||||
// @Failure 400 {object} RegisterResponse
|
||||
// @Failure 403 {object} RegisterResponse
|
||||
// @Failure 500 {object} RegisterResponse
|
||||
// @Router /register [post]
|
||||
func (u *UserHandler) Register(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -60,6 +63,12 @@ func (u *UserHandler) Register(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
var statusCode int
|
||||
var resp RegisterResponse
|
||||
if !u.Config.EnableRegistration {
|
||||
statusCode = http.StatusForbidden
|
||||
resp.Message = "Registration disabled"
|
||||
RespondWithJson(w, statusCode, &resp)
|
||||
return
|
||||
}
|
||||
user := user.User{Username: req.Username, Password: req.Password, PhoneNumber: req.PhoneNumber}
|
||||
|
||||
fmt.Println("Username:", user.Username)
|
||||
|
||||
@@ -14,8 +14,9 @@ import (
|
||||
)
|
||||
|
||||
func TestCreateUserWithMock(t *testing.T) {
|
||||
cfg := GetConfig()
|
||||
mockstore := mock.NewMockUserStore()
|
||||
handler := NewUserHandler(mockstore)
|
||||
handler := NewUserHandler(cfg, mockstore)
|
||||
|
||||
testUser := GetTestUser()
|
||||
jsonValue, _ := json.Marshal(testUser)
|
||||
|
||||
@@ -3,8 +3,8 @@ package handler
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/pkg/token"
|
||||
"git.kundeng.us/phoenix/textsender-models/pkg/user"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/token"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/user"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/config"
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/store"
|
||||
@@ -12,11 +12,12 @@ import (
|
||||
)
|
||||
|
||||
type ServiceHandler struct {
|
||||
Config *config.Config
|
||||
ServiceStore store.ServiceStore
|
||||
}
|
||||
|
||||
func NewServiceHandler(serviceStore store.ServiceStore) *ServiceHandler {
|
||||
return &ServiceHandler{ServiceStore: serviceStore}
|
||||
func NewServiceHandler(cfg *config.Config, serviceStore store.ServiceStore) *ServiceHandler {
|
||||
return &ServiceHandler{Config: cfg, ServiceStore: serviceStore}
|
||||
}
|
||||
|
||||
type ServiceCreationRequest struct {
|
||||
@@ -39,6 +40,7 @@ type ServiceCreationResponse struct {
|
||||
// @Param request body ServiceCreationRequest true "Data to add user"
|
||||
// @Success 200 {object} ServiceCreationResponse
|
||||
// @Failure 400 {object} ServiceCreationResponse
|
||||
// @Failure 403 {object} ServiceCreationResponse
|
||||
// @Failure 500 {object} ServiceCreationResponse
|
||||
// @Router /service/register [post]
|
||||
func (s *ServiceHandler) Register(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -52,6 +54,12 @@ func (s *ServiceHandler) Register(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
var statusCode int
|
||||
var resp ServiceCreationResponse
|
||||
if !s.Config.EnableRegistration {
|
||||
statusCode = http.StatusForbidden
|
||||
resp.Message = "Registration disabled"
|
||||
RespondWithJson(w, statusCode, &resp)
|
||||
return
|
||||
}
|
||||
|
||||
ctx := r.Context()
|
||||
if exists, err := s.ServiceStore.CheckWithUsername(ctx, req.Username); err != nil {
|
||||
|
||||
@@ -7,7 +7,7 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/pkg/user"
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/user"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/handler/endpoint"
|
||||
@@ -16,8 +16,9 @@ import (
|
||||
)
|
||||
|
||||
func TestCreateServiceUserWithMock(t *testing.T) {
|
||||
cfg := GetConfig()
|
||||
mockStore := mock.NewMockServiceUserStore()
|
||||
handler := NewServiceHandler(mockStore)
|
||||
handler := NewServiceHandler(cfg, mockStore)
|
||||
|
||||
testService := ServiceCreationRequest{Username: "swoon", Passphrase: "ewrewr329n12y3x2!2"}
|
||||
jsonValue, err := json.Marshal(testService)
|
||||
@@ -53,7 +54,8 @@ func TestLoginServiceUserWithMock(t *testing.T) {
|
||||
assert.NoError(t, err, "Error creating service user: %v", err)
|
||||
}
|
||||
|
||||
handler := NewServiceHandler(mockStore)
|
||||
cfg := GetConfig()
|
||||
handler := NewServiceHandler(cfg, mockStore)
|
||||
testService := ServiceLoginRequest{Username: serviceUser.Username, Passphrase: unhashed}
|
||||
jsonValue, err := json.Marshal(testService)
|
||||
assert.NoError(t, err, "Error marshaling request")
|
||||
|
||||
@@ -1,9 +1,40 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"git.kundeng.us/phoenix/textsender-models/pkg/user"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-models/tx0/user"
|
||||
"github.com/joho/godotenv"
|
||||
|
||||
"git.kundeng.us/phoenix/textsender-auth/internal/config"
|
||||
)
|
||||
|
||||
func GetTestUser() user.User {
|
||||
return user.User{Username: "ghost", PhoneNumber: "+1234567890", Password: "dfgdffddfd"}
|
||||
}
|
||||
|
||||
func GetConfig() *config.Config {
|
||||
err := godotenv.Load()
|
||||
if err != nil {
|
||||
cwd, _ := os.Getwd()
|
||||
envPath := path.Join(cwd, "../..", ".env")
|
||||
if err = godotenv.Load(envPath); err != nil {
|
||||
prevPath := path.Join(envPath, "../..", ".env")
|
||||
if err = godotenv.Load(prevPath); err != nil {
|
||||
log.Fatal("Error loading .env file")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unpackedConnString := config.UnpackDBConnString()
|
||||
dbConnString := unpackedConnString.Parse()
|
||||
|
||||
return &config.Config{
|
||||
DBConnString: dbConnString,
|
||||
ServerPort: config.Port,
|
||||
ResetDB: false,
|
||||
EnableRegistration: config.CheckRegistration(),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user