Initial commit
This commit is contained in:
commit
ea1cbb6857
0
.gitignore
vendored
Normal file
0
.gitignore
vendored
Normal file
26
check.go
Normal file
26
check.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package palauthiam
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
type CheckPermissionRequest struct {
|
||||||
|
UserID string
|
||||||
|
Permission string
|
||||||
|
}
|
||||||
|
|
||||||
|
type CheckPermissionResponse struct {
|
||||||
|
Allowed bool `json:"allowed"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PalAuthIAMClient) CheckPermission(ctx context.Context, request *CheckPermissionRequest) (bool, error) {
|
||||||
|
resp := CheckPermissionResponse{}
|
||||||
|
err := c.getRequest(ctx, "/check", map[string]string{
|
||||||
|
"userId": request.UserID,
|
||||||
|
"permission": request.Permission,
|
||||||
|
}, &resp)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp.Allowed, nil
|
||||||
|
}
|
87
client.go
Normal file
87
client.go
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
package palauthiam
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PalAuthIAMClient struct {
|
||||||
|
clientId string
|
||||||
|
clientSecret string
|
||||||
|
baseURL string
|
||||||
|
}
|
||||||
|
|
||||||
|
func InitClient(clientId, clientSecret string) *PalAuthIAMClient {
|
||||||
|
return &PalAuthIAMClient{
|
||||||
|
clientId: clientId,
|
||||||
|
clientSecret: clientSecret,
|
||||||
|
baseURL: "https://auth.palk.me/iam",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PalAuthIAMClient) SetBaseURL(baseURL string) {
|
||||||
|
c.baseURL = baseURL
|
||||||
|
}
|
||||||
|
|
||||||
|
func mapToQuery(variables map[string]string) (output string) {
|
||||||
|
for key, value := range variables {
|
||||||
|
output += fmt.Sprintf("%s=%s&", key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(variables) != 0 {
|
||||||
|
output = strings.TrimSuffix(output, "&")
|
||||||
|
}
|
||||||
|
return output
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PalAuthIAMClient) buildURL(path string, query map[string]string) string {
|
||||||
|
return fmt.Sprintf("%s%s?%s", c.baseURL, path, mapToQuery(query))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PalAuthIAMClient) runRequest(req *http.Request, mapTo interface{}) error {
|
||||||
|
res, err := http.DefaultClient.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("making request: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
resBody, err := io.ReadAll(res.Body)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("read response body: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if res.StatusCode >= 200 && res.StatusCode < 300 {
|
||||||
|
err = json.Unmarshal(resBody, mapTo)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("decode JSON response: %s", err)
|
||||||
|
}
|
||||||
|
} else if res.StatusCode >= 400 && res.StatusCode < 500 {
|
||||||
|
return &IAMError{
|
||||||
|
ServerMessage: string(resBody),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *PalAuthIAMClient) getRequest(
|
||||||
|
ctx context.Context,
|
||||||
|
path string,
|
||||||
|
variables map[string]string,
|
||||||
|
mapTo interface{},
|
||||||
|
) error {
|
||||||
|
req, err := http.NewRequestWithContext(
|
||||||
|
ctx,
|
||||||
|
http.MethodGet,
|
||||||
|
c.buildURL(path, variables),
|
||||||
|
http.NoBody,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("construct request: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.runRequest(req, mapTo)
|
||||||
|
}
|
11
errors.go
Normal file
11
errors.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package palauthiam
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
type IAMError struct {
|
||||||
|
ServerMessage string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *IAMError) Error() string {
|
||||||
|
return fmt.Sprintf("iam error: %s", r.ServerMessage)
|
||||||
|
}
|
3
go.mod
Normal file
3
go.mod
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module gitlab.palk.me/paltiverse/palauth-iam-go
|
||||||
|
|
||||||
|
go 1.21.1
|
Loading…
x
Reference in New Issue
Block a user