Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion cmd/bugout/brood/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ func CreateUserCommand() *cobra.Command {
Short: "Bugout user operations",
}

userAuthCmd := CreateUserAuthCommand()
userCreateCmd := CreateUserCreateCommand()
userLoginCmd := CreateUserLoginCommand()
userTokensCmd := CreateUserTokensCommand()
Expand All @@ -25,11 +26,38 @@ func CreateUserCommand() *cobra.Command {
userVerifyCmd := CreateUserVerifyCommand()
userChangePasswordCmd := CreateUserChangePasswordCommand()

userCmd.AddCommand(userCreateCmd, userLoginCmd, userTokensCmd, userGetCmd, userFindCmd, userVerifyCmd, userChangePasswordCmd)
userCmd.AddCommand(userAuthCmd, userCreateCmd, userLoginCmd, userTokensCmd, userGetCmd, userFindCmd, userVerifyCmd, userChangePasswordCmd)

return userCmd
}

func CreateUserAuthCommand() *cobra.Command {
var token string
userGetCmd := &cobra.Command{
Use: "auth",
Short: "Get the user with groups represented by a token",
PreRunE: cmdutils.TokenArgPopulator,
RunE: func(cmd *cobra.Command, args []string) error {
client, err := bugout.ClientFromEnv()
if err != nil {
return err
}

userAuth, err := client.Brood.Auth(token)
if err != nil {
return err
}

encodeErr := json.NewEncoder(cmd.OutOrStdout()).Encode(&userAuth)
return encodeErr
},
}

userGetCmd.Flags().StringVarP(&token, "token", "t", "", "Bugout access token to use for the request")

return userGetCmd
}

func CreateUserCreateCommand() *cobra.Command {
var username, email, password string
userCreateCmd := &cobra.Command{
Expand Down
10 changes: 10 additions & 0 deletions dev.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/usr/bin/env sh

# Compile application and run with provided arguments
set -e

PROGRAM_NAME="bugout"

go build -o "$PROGRAM_NAME" ./cmd/bugout

./"$PROGRAM_NAME" "$@"
3 changes: 3 additions & 0 deletions pkg/brood/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ const BugoutBroodURL string = "https://auth.bugout.dev"
type BroodCaller interface {
Ping() (string, error)
Version() (string, error)
Auth(token string) (AuthUser, error)
CreateUser(string, string, string) (User, error)
GenerateToken(string, string) (string, error)
AnnotateToken(token, tokenType, note string) (string, error)
Expand Down Expand Up @@ -49,6 +50,7 @@ type BroodCaller interface {
type BroodRoutes struct {
Ping string
Version string
Auth string
User string
FindUser string
Groups string
Expand All @@ -69,6 +71,7 @@ func RoutesFromURL(broodURL string) BroodRoutes {
return BroodRoutes{
Ping: fmt.Sprintf("%s/ping", cleanURL),
Version: fmt.Sprintf("%s/version", cleanURL),
Auth: fmt.Sprintf("%s/auth", cleanURL),
User: fmt.Sprintf("%s/user", cleanURL),
FindUser: fmt.Sprintf("%s/user/find", cleanURL),
Groups: fmt.Sprintf("%s/groups", cleanURL),
Expand Down
24 changes: 24 additions & 0 deletions pkg/brood/data.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,36 @@ import (
"encoding/json"
)

type AuthUserGroup struct {
GroupId string `json:"group_id"`
UserId string `json:"user_id"`
UserType string `json:"user_type"`
Autogenerated bool `json:"autogenerated"`
GroupName string `json:"group_name"`
}

type AuthUser struct {
UserId string `json:"user_id"`
Username string `json:"username"`
Email string `json:"email"`
NormalizedEmail string `json:"normalized_email"`
Verified bool `json:"verified"`
Autogenerated bool `json:"autogenerated"`
ApplicationId string `json:"application_id"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`

Groups []AuthUserGroup `json:"groups"`
}

type User struct {
Id string `json:"id"`
Username string `json:"username"`
Email string `json:"email"`
NormalizedEmail string `json:"normalized_email"`
Verified bool `json:"verified"`
ApplicationId string `json:"application_id"`
Autogenerated bool `json:"autogenerated"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
Expand Down
32 changes: 32 additions & 0 deletions pkg/brood/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,38 @@ func getUserID(decoder *json.Decoder) (string, error) {
return userIDWrapper.UserID, decodeErr
}

func (client BroodClient) Auth(token string) (AuthUser, error) {
authRoute := client.Routes.Auth
request, requestErr := http.NewRequest("GET", authRoute, nil)
if requestErr != nil {
return AuthUser{}, requestErr
}
request.Header.Add("Authorization", fmt.Sprintf("Bearer %s", token))
request.Header.Add("Accept", "application/json")

response, err := client.HTTPClient.Do(request)
if err != nil {
return AuthUser{}, err
}
defer response.Body.Close()

var buf bytes.Buffer
bodyReader := io.TeeReader(response.Body, &buf)

statusErr := utils.HTTPStatusCheck(response)
if statusErr != nil {
return AuthUser{}, statusErr
}

var authUser AuthUser
decodeErr := json.NewDecoder(bodyReader).Decode(&authUser)
if decodeErr != nil {
return authUser, decodeErr
}

return authUser, nil
}

func (client BroodClient) CreateUser(username, email, password string) (User, error) {
userRoute := client.Routes.User
data := url.Values{}
Expand Down
2 changes: 1 addition & 1 deletion pkg/version.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
package bugout

const Version string = "0.4.6"
const Version string = "0.4.7"
Loading