This repository has been archived by the owner on Jun 24, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathidentity.go
131 lines (119 loc) · 2.71 KB
/
identity.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package main
import (
"encoding/json"
"fmt"
"net/http"
"strings"
)
type Single3PIDLookUpRequest struct {
Lookup Profile3PIDS `json:"lookup"`
}
type SingleLookUpResponse struct {
Lookup *LookUpResponseBody `json:"lookup,omitempty"`
}
type LookUpID struct {
Type string `json:"type,omitempty"`
Value string `json:"value,omitempty"`
}
type LookUpResponseBody struct {
Medium string `json:"medium,omitempty"`
Address string `json:"address,omitempty"`
ID *LookUpID `json:"id,omitempty"`
}
func findUserBy3PID(medium string, address string, users KeycloakUsersArray, token string) *LookUpID {
if users == nil {
users, _ = getUsersArray(token)
if users == nil {
return nil
}
}
for _, user := range users {
if medium == "email" && user.Email == address {
return &LookUpID{
Type: "localpart",
Value: user.Username,
}
}
for key, value := range user.Attributes {
if strings.Contains(valid3pids, key) && medium == key && address == value[0] {
return &LookUpID{
Type: "localpart",
Value: user.Username,
}
}
}
}
return nil
}
func Single3PIDLookUp(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return
}
var req Single3PIDLookUpRequest
if json.NewDecoder(r.Body).Decode(&req) != nil {
fmt.Println("Invalid json request")
return
}
var res SingleLookUpResponse
token, err := getKeycloakToken()
if err != nil {
fmt.Println(err)
} else {
found := findUserBy3PID(req.Lookup.Medium, req.Lookup.Address, nil, token)
if found != nil {
res = SingleLookUpResponse{
Lookup: &LookUpResponseBody{
Medium: req.Lookup.Medium,
Address: req.Lookup.Address,
ID: found,
},
}
}
}
prepareResponse(w, res)
}
type Bulk3PIDLookUpRequest struct {
Lookup []Profile3PIDS `json:"lookup"`
}
type BulkLookUpResponse struct {
Lookup []LookUpResponseBody `json:"lookup"`
}
func Bulk3PIDLookUp(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return
}
var req Bulk3PIDLookUpRequest
if json.NewDecoder(r.Body).Decode(&req) != nil {
fmt.Println("Invalid json request")
return
}
var res = BulkLookUpResponse{
Lookup: make([]LookUpResponseBody, 0),
}
token, err := getKeycloakToken()
if err != nil {
fmt.Println(err)
} else {
users, err := getUsersArray(token)
if err != nil {
fmt.Println(err)
} else {
var results []LookUpResponseBody
for _, tpid := range req.Lookup {
found := findUserBy3PID(tpid.Medium, tpid.Address, users, "")
if found != nil {
results = append(results, LookUpResponseBody{
Medium: tpid.Medium,
Address: tpid.Address,
ID: found,
},
)
}
}
if results != nil {
res.Lookup = results
}
}
}
prepareResponse(w, res)
}