backend-auth integration
parent
d323083f74
commit
6b446d85d0
90
README.md
90
README.md
|
@ -23,7 +23,7 @@ Supply environment variables by either exporting them or editing ```.env```.
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
Unless otherwise noted, bodies and responses are with ```Content-Type: application/json```.
|
Unless otherwise noted, bodies and responses are with `Content-Type: application/json`. Endpoints marked with a `*` require a populated `X-User-Claim` header from `backend-auth`.
|
||||||
|
|
||||||
| Contents |
|
| Contents |
|
||||||
| -------- |
|
| -------- |
|
||||||
|
@ -122,7 +122,7 @@ List of users.
|
||||||
### Get User
|
### Get User
|
||||||
|
|
||||||
```
|
```
|
||||||
GET /user/:user
|
GET /user/id/:user
|
||||||
```
|
```
|
||||||
|
|
||||||
Get a specific user by ID.
|
Get a specific user by ID.
|
||||||
|
@ -155,20 +155,14 @@ User object.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Create Conversation
|
### Create Conversation*
|
||||||
|
|
||||||
```
|
```
|
||||||
POST /user/:user/conversation
|
POST /user/conversation
|
||||||
```
|
```
|
||||||
|
|
||||||
Create a new conversation for a user.
|
Create a new conversation for a user.
|
||||||
|
|
||||||
#### URL Params
|
|
||||||
|
|
||||||
| Name | Type | Description | Required |
|
|
||||||
| ---- | ---- | ----------- | -------- |
|
|
||||||
| user | String | User's ID. | ✓ |
|
|
||||||
|
|
||||||
#### Body
|
#### Body
|
||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
|
@ -190,16 +184,16 @@ Conversation object.
|
||||||
|
|
||||||
| Code | Description |
|
| Code | Description |
|
||||||
| ---- | ----------- |
|
| ---- | ----------- |
|
||||||
| 400 | Error occurred parsing the supplied body. |
|
| 400 | Error occurred parsing the supplied body/Invalid `X-User-Claim` header |
|
||||||
| 404 | User with supplied ID could not be found in database. |
|
| 404 | User with supplied ID could not be found in database. |
|
||||||
| 500 | Error occurred inserting entries into the database. |
|
| 500 | Error occurred inserting entries into the database. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Delete Conversation
|
### Delete Conversation*
|
||||||
|
|
||||||
```
|
```
|
||||||
DELETE /user/:user/conversation/:conversation
|
DELETE /user/conversation/:conversation
|
||||||
```
|
```
|
||||||
|
|
||||||
Delete the specified conversation.
|
Delete the specified conversation.
|
||||||
|
@ -208,7 +202,6 @@ Delete the specified conversation.
|
||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
| ---- | ---- | ----------- | -------- |
|
| ---- | ---- | ----------- | -------- |
|
||||||
| user | String | User's ID. | ✓ |
|
|
||||||
| conversation | String | Conversation's ID. | ✓ |
|
| conversation | String | Conversation's ID. | ✓ |
|
||||||
|
|
||||||
#### Success Response (200 OK)
|
#### Success Response (200 OK)
|
||||||
|
@ -219,15 +212,16 @@ Empty body.
|
||||||
|
|
||||||
| Code | Description |
|
| Code | Description |
|
||||||
| ---- | ----------- |
|
| ---- | ----------- |
|
||||||
|
| 400 | Invalid `X-User-Claim` header. |
|
||||||
| 404 | User/Conversation with supplied ID could not be found in database. |
|
| 404 | User/Conversation with supplied ID could not be found in database. |
|
||||||
| 500 | Error occurred deleting entries from the database. |
|
| 500 | Error occurred deleting entries from the database. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Update Conversation
|
### Update Conversation*
|
||||||
|
|
||||||
```
|
```
|
||||||
PATCH /user/:user/conversation/:conversation
|
PATCH /user/conversation/:conversation
|
||||||
```
|
```
|
||||||
|
|
||||||
Update a conversation's details (mainly just title for now).
|
Update a conversation's details (mainly just title for now).
|
||||||
|
@ -236,7 +230,6 @@ Update a conversation's details (mainly just title for now).
|
||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
| ---- | ---- | ----------- | -------- |
|
| ---- | ---- | ----------- | -------- |
|
||||||
| user | String | User's ID. | ✓ |
|
|
||||||
| conversation | String | Conversation's ID. | ✓ |
|
| conversation | String | Conversation's ID. | ✓ |
|
||||||
|
|
||||||
#### Body
|
#### Body
|
||||||
|
@ -253,26 +246,20 @@ Empty Body. (TODO: Updated conversation)
|
||||||
|
|
||||||
| Code | Description |
|
| Code | Description |
|
||||||
| ---- | ----------- |
|
| ---- | ----------- |
|
||||||
| 400 | Error occurred parsing the supplied body. |
|
| 400 | Error occurred parsing the supplied body/Invalid `X-User-Claim` header. |
|
||||||
| 404 | User/Conversation with supplied ID could not be found in database. |
|
| 404 | User/Conversation with supplied ID could not be found in database. |
|
||||||
| 500 | Error occurred updating entries in the database. |
|
| 500 | Error occurred updating entries in the database. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Get Conversations
|
### Get Conversations*
|
||||||
|
|
||||||
```
|
```
|
||||||
GET /user/:user/conversation
|
GET /user/conversation
|
||||||
```
|
```
|
||||||
|
|
||||||
Get the conversations of the specified user.
|
Get the conversations of the specified user.
|
||||||
|
|
||||||
#### URL Params
|
|
||||||
|
|
||||||
| Name | Type | Description | Required |
|
|
||||||
| ---- | ---- | ----------- | -------- |
|
|
||||||
| user | String | User's ID. | ✓ |
|
|
||||||
|
|
||||||
#### Success Response (200 OK)
|
#### Success Response (200 OK)
|
||||||
|
|
||||||
List of conversations.
|
List of conversations.
|
||||||
|
@ -291,14 +278,15 @@ List of conversations.
|
||||||
|
|
||||||
| Code | Description |
|
| Code | Description |
|
||||||
| ---- | ----------- |
|
| ---- | ----------- |
|
||||||
|
| 400 | Invalid `X-User-Claim` header. |
|
||||||
| 500 | Error occurred updating entries in the database. |
|
| 500 | Error occurred updating entries in the database. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Get Conversation
|
### Get Conversation*
|
||||||
|
|
||||||
```
|
```
|
||||||
GET /user/:user/conversation/:conversation
|
GET /user/conversation/:conversation
|
||||||
```
|
```
|
||||||
|
|
||||||
Get a specific conversation of a specific user.
|
Get a specific conversation of a specific user.
|
||||||
|
@ -307,7 +295,6 @@ Get a specific conversation of a specific user.
|
||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
| ---- | ---- | ----------- | -------- |
|
| ---- | ---- | ----------- | -------- |
|
||||||
| user | String | User's ID. | ✓ |
|
|
||||||
| conversation | String | Conversation's ID. | ✓ |
|
| conversation | String | Conversation's ID. | ✓ |
|
||||||
|
|
||||||
#### Success Response (200 OK)
|
#### Success Response (200 OK)
|
||||||
|
@ -325,24 +312,24 @@ Conversation object.
|
||||||
|
|
||||||
| Code | Description |
|
| Code | Description |
|
||||||
| ---- | ----------- |
|
| ---- | ----------- |
|
||||||
| 404 | User/Conversation with supplied ID could not be found in database. |
|
| 400 | Invalid `X-User-Claim` header. |
|
||||||
|
| 404 | Conversation with supplied ID could not be found in database. |
|
||||||
| 500 | Error occurred retrieving entries from the database. |
|
| 500 | Error occurred retrieving entries from the database. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Create Conversation Member
|
### Create Conversation Member*
|
||||||
|
|
||||||
```
|
```
|
||||||
POST /user/:user/conversation/:conversation/member
|
POST /user/conversation/:conversation/member
|
||||||
```
|
```
|
||||||
|
|
||||||
Add a member to the specified conversation of the specified member.
|
Add a member to the specified conversation.
|
||||||
|
|
||||||
#### URL Params
|
#### URL Params
|
||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
| ---- | ---- | ----------- | -------- |
|
| ---- | ---- | ----------- | -------- |
|
||||||
| user | String | User's ID. | ✓ |
|
|
||||||
| conversation | String | Conversation's ID. | ✓ |
|
| conversation | String | Conversation's ID. | ✓ |
|
||||||
|
|
||||||
#### Body
|
#### Body
|
||||||
|
@ -359,25 +346,24 @@ Empty body.
|
||||||
|
|
||||||
| Code | Description |
|
| Code | Description |
|
||||||
| ---- | ----------- |
|
| ---- | ----------- |
|
||||||
| 400 | Error occurred parsing the supplied body/The length of the ID supplied in the body is less than 1. |
|
| 400 | Error occurred parsing the supplied body/The length of the ID supplied in the body is less than 1/Invalid `X-User-Claim` header. |
|
||||||
| 404 | User/Conversation with supplied ID could not be found in database. |
|
| 404 | User/Conversation with supplied ID could not be found in database. |
|
||||||
| 500 | Error occurred updating entries in the database. |
|
| 500 | Error occurred updating entries in the database. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Get Conversation Members
|
### Get Conversation Members*
|
||||||
|
|
||||||
```
|
```
|
||||||
GET /user/:user/conversation/:conversation/member
|
GET /user/conversation/:conversation/member
|
||||||
```
|
```
|
||||||
|
|
||||||
Get the members of the specified conversation of the specified member.
|
Get the members of the specified conversation.
|
||||||
|
|
||||||
#### URL Params
|
#### URL Params
|
||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
| ---- | ---- | ----------- | -------- |
|
| ---- | ---- | ----------- | -------- |
|
||||||
| user | String | User's ID. | ✓ |
|
|
||||||
| conversation | String | Conversation's ID. | ✓ |
|
| conversation | String | Conversation's ID. | ✓ |
|
||||||
|
|
||||||
#### Success (200 OK)
|
#### Success (200 OK)
|
||||||
|
@ -400,23 +386,18 @@ List of user objects in conversation.
|
||||||
|
|
||||||
| Code | Description |
|
| Code | Description |
|
||||||
| ---- | ----------- |
|
| ---- | ----------- |
|
||||||
|
| 400 | Invalid `X-User-Claim` header. |
|
||||||
| 500 | Error occurred retrieving entries from the database. |
|
| 500 | Error occurred retrieving entries from the database. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Create Contact
|
### Create Contact*
|
||||||
|
|
||||||
```
|
```
|
||||||
POST /user/:user/contact
|
POST /user/contact
|
||||||
```
|
```
|
||||||
|
|
||||||
Add a new contact for the specified user.
|
Add a new contact.
|
||||||
|
|
||||||
#### URL Params
|
|
||||||
|
|
||||||
| Name | Type | Description | Required |
|
|
||||||
| ---- | ---- | ----------- | -------- |
|
|
||||||
| user | String | User's ID. | ✓ |
|
|
||||||
|
|
||||||
#### Body
|
#### Body
|
||||||
|
|
||||||
|
@ -432,7 +413,7 @@ Empty body
|
||||||
|
|
||||||
| Code | Description |
|
| Code | Description |
|
||||||
| ---- | ----------- |
|
| ---- | ----------- |
|
||||||
| 400 | Error occurred parsing the supplied body/The length of the ID supplied in the body is less than 1 or equal to the user's ID. |
|
| 400 | Error occurred parsing the supplied body/The length of the ID supplied in the body is less than 1 or equal to the user's ID/Invalid `X-User-Claim` header. |
|
||||||
| 500 | Error occurred updating entries in the database. |
|
| 500 | Error occurred updating entries in the database. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
@ -440,16 +421,10 @@ Empty body
|
||||||
### Get Contacts
|
### Get Contacts
|
||||||
|
|
||||||
```
|
```
|
||||||
GET /user/:user/contact
|
GET /user/contact
|
||||||
```
|
```
|
||||||
|
|
||||||
Get the contacts of the specified user.
|
Get the user's contacts.
|
||||||
|
|
||||||
#### URL Params
|
|
||||||
|
|
||||||
| Name | Type | Description | Required |
|
|
||||||
| ---- | ---- | ----------- | -------- |
|
|
||||||
| user | String | User's ID. | ✓ |
|
|
||||||
|
|
||||||
#### Success (200 OK)
|
#### Success (200 OK)
|
||||||
|
|
||||||
|
@ -470,4 +445,5 @@ List of user objects in user's contacts.
|
||||||
|
|
||||||
| Code | Description |
|
| Code | Description |
|
||||||
| ---- | ----------- |
|
| ---- | ----------- |
|
||||||
|
| 400 | Invalid `X-User-Claim` header. |
|
||||||
| 500 | Error occurred retrieving entries from the database. |
|
| 500 | Error occurred retrieving entries from the database. |
|
||||||
|
|
18
handlers.go
18
handlers.go
|
@ -122,7 +122,7 @@ func (h *Handler) GetUser(w http.ResponseWriter, r *http.Request, p httprouter.P
|
||||||
|
|
||||||
func (h *Handler) CreateConversation(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
func (h *Handler) CreateConversation(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
// Parse
|
// Parse
|
||||||
userID := p.ByName("user")
|
userID := r.Context().Value("user").(string)
|
||||||
conversation := Conversation{}
|
conversation := Conversation{}
|
||||||
decoder := json.NewDecoder(r.Body)
|
decoder := json.NewDecoder(r.Body)
|
||||||
err := decoder.Decode(&conversation)
|
err := decoder.Decode(&conversation)
|
||||||
|
@ -175,7 +175,7 @@ func (h *Handler) CreateConversation(w http.ResponseWriter, r *http.Request, p h
|
||||||
|
|
||||||
func (h *Handler) GetConversations(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
func (h *Handler) GetConversations(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
// Parse
|
// Parse
|
||||||
userID := p.ByName("user")
|
userID := r.Context().Value("user").(string)
|
||||||
|
|
||||||
// Response object
|
// Response object
|
||||||
conversations := make([]Conversation, 0)
|
conversations := make([]Conversation, 0)
|
||||||
|
@ -211,7 +211,7 @@ func (h *Handler) GetConversations(w http.ResponseWriter, r *http.Request, p htt
|
||||||
|
|
||||||
func (h *Handler) GetConversation(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
func (h *Handler) GetConversation(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
// Parse
|
// Parse
|
||||||
userID := p.ByName("user")
|
userID := r.Context().Value("user").(string)
|
||||||
conversationID := p.ByName("conversation")
|
conversationID := p.ByName("conversation")
|
||||||
|
|
||||||
// Response object
|
// Response object
|
||||||
|
@ -241,7 +241,7 @@ func (h *Handler) GetConversation(w http.ResponseWriter, r *http.Request, p http
|
||||||
|
|
||||||
func (h *Handler) UpdateConversation(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
func (h *Handler) UpdateConversation(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
// Parse
|
// Parse
|
||||||
userID := p.ByName("user")
|
userID := r.Context().Value("user").(string)
|
||||||
conversationID := p.ByName("conversation")
|
conversationID := p.ByName("conversation")
|
||||||
conversation := Conversation{}
|
conversation := Conversation{}
|
||||||
decoder := json.NewDecoder(r.Body)
|
decoder := json.NewDecoder(r.Body)
|
||||||
|
@ -286,7 +286,7 @@ func (h *Handler) UpdateConversation(w http.ResponseWriter, r *http.Request, p h
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Handler) DeleteConversation(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
func (h *Handler) DeleteConversation(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
userID := p.ByName("user")
|
userID := r.Context().Value("user").(string)
|
||||||
conversationID := p.ByName("conversation")
|
conversationID := p.ByName("conversation")
|
||||||
|
|
||||||
// Delete
|
// Delete
|
||||||
|
@ -342,7 +342,7 @@ func (h *Handler) DeleteConversation(w http.ResponseWriter, r *http.Request, p h
|
||||||
|
|
||||||
func (h *Handler) CreateConversationMember(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
func (h *Handler) CreateConversationMember(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
// Parse
|
// Parse
|
||||||
userID := p.ByName("user")
|
userID := r.Context().Value("user").(string)
|
||||||
conversationID := p.ByName("conversation")
|
conversationID := p.ByName("conversation")
|
||||||
member := User{}
|
member := User{}
|
||||||
decoder := json.NewDecoder(r.Body)
|
decoder := json.NewDecoder(r.Body)
|
||||||
|
@ -396,7 +396,7 @@ func (h *Handler) CreateConversationMember(w http.ResponseWriter, r *http.Reques
|
||||||
|
|
||||||
func (h *Handler) GetConversationMembers(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
func (h *Handler) GetConversationMembers(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
// Parse
|
// Parse
|
||||||
userID := p.ByName("user")
|
userID := r.Context().Value("user").(string)
|
||||||
conversationID := p.ByName("conversation")
|
conversationID := p.ByName("conversation")
|
||||||
|
|
||||||
// Response object
|
// Response object
|
||||||
|
@ -438,7 +438,7 @@ type PhoneNumber struct {
|
||||||
}
|
}
|
||||||
func (h *Handler) CreateContact(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
func (h *Handler) CreateContact(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
// Parse
|
// Parse
|
||||||
userID := p.ByName("user")
|
userID := r.Context().Value("user").(string)
|
||||||
contact := PhoneNumber{}
|
contact := PhoneNumber{}
|
||||||
decoder := json.NewDecoder(r.Body)
|
decoder := json.NewDecoder(r.Body)
|
||||||
err := decoder.Decode(&contact)
|
err := decoder.Decode(&contact)
|
||||||
|
@ -490,7 +490,7 @@ func (h *Handler) CreateContact(w http.ResponseWriter, r *http.Request, p httpro
|
||||||
|
|
||||||
func (h *Handler) GetContacts(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
func (h *Handler) GetContacts(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
// Parse
|
// Parse
|
||||||
userID := p.ByName("user")
|
userID := r.Context().Value("user").(string)
|
||||||
|
|
||||||
// Response object
|
// Response object
|
||||||
contacts := make([]User, 0)
|
contacts := make([]User, 0)
|
||||||
|
|
47
main.go
47
main.go
|
@ -1,7 +1,9 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
|
"encoding/json"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
|
@ -39,25 +41,25 @@ func main() {
|
||||||
// Users
|
// Users
|
||||||
router.POST("/user/", h.CreateUser)
|
router.POST("/user/", h.CreateUser)
|
||||||
router.GET("/user/", h.GetUsersByPhone)
|
router.GET("/user/", h.GetUsersByPhone)
|
||||||
router.GET("/user/:user", h.GetUser)
|
router.GET("/user/id/:user", h.GetUser)
|
||||||
//router.PATCH("/user/:user", h.UpdateUser)
|
//router.PATCH("/user/:user", h.UpdateUser)
|
||||||
// Conversations
|
// Conversations
|
||||||
router.POST("/user/:user/conversation/", h.CreateConversation)
|
router.POST("/user/conversation/", AuthMiddleware(h.CreateConversation))
|
||||||
router.GET("/user/:user/conversation/", h.GetConversations) // USER MEMBER CONVERSATION
|
router.GET("/user/conversation/", AuthMiddleware(h.GetConversations)) // USER MEMBER CONVERSATION
|
||||||
router.DELETE("/user/:user/conversation/:conversation", h.DeleteConversation)
|
router.DELETE("/user/conversation/:conversation", AuthMiddleware(h.DeleteConversation))
|
||||||
//router.GET("/user/:user/conversation/bymembers/", h.GetConversationsByMembers) // TODO
|
//router.GET("/user/:user/conversation/bymembers/", h.GetConversationsByMembers) // TODO
|
||||||
router.GET("/user/:user/conversation/:conversation", h.GetConversation) // USER MEMBER CONVERSATION
|
router.GET("/user/conversation/:conversation", AuthMiddleware(h.GetConversation)) // USER MEMBER CONVERSATION
|
||||||
router.PATCH("/user/:user/conversation/:conversation", h.UpdateConversation) // USER MEMBER CONVERSATION ADMIN=true -> update conversation title
|
router.PATCH("/user/conversation/:conversation", AuthMiddleware(h.UpdateConversation)) // USER MEMBER CONVERSATION ADMIN=true -> update conversation title
|
||||||
//router.DELETE("/user/:user/conversation/:conversation", h.DeleteConversation) // USER MEMBER CONVERSATION -> delete membership
|
//router.DELETE("/user/:user/conversation/:conversation", h.DeleteConversation) // USER MEMBER CONVERSATION -> delete membership
|
||||||
router.POST("/user/:user/conversation/:conversation/member/", h.CreateConversationMember) // USER MEMBER CONVERSATION ADMIN=true -> create new membership
|
router.POST("/user/conversation/:conversation/member/", AuthMiddleware(h.CreateConversationMember)) // USER MEMBER CONVERSATION ADMIN=true -> create new membership
|
||||||
router.GET("/user/:user/conversation/:conversation/member/", h.GetConversationMembers) // USER MEMBER CONVERSATION
|
router.GET("/user/conversation/:conversation/member/", AuthMiddleware(h.GetConversationMembers)) // USER MEMBER CONVERSATION
|
||||||
//router.DELETE("/user/:user/conversation/:conversation/member/:member", h.DeleteConversationMember) // USER MEMBER CONVERSATION ADMIN=true -> delete membership
|
//router.DELETE("/user/:user/conversation/:conversation/member/:member", h.DeleteConversationMember) // USER MEMBER CONVERSATION ADMIN=true -> delete membership
|
||||||
// Last heard
|
// Last heard
|
||||||
//router.GET("/user/:user/lastheard/:conversation", h.GetLastheard)
|
//router.GET("/user/:user/lastheard/:conversation", h.GetLastheard)
|
||||||
//router.PUT("/user/:user/lastheard/:conversation", h.SetLastheard)
|
//router.PUT("/user/:user/lastheard/:conversation", h.SetLastheard)
|
||||||
// Contacts
|
// Contacts
|
||||||
router.POST("/user/:user/contact/", h.CreateContact)
|
router.POST("/user/contact/", AuthMiddleware(h.CreateContact))
|
||||||
router.GET("/user/:user/contact/", h.GetContacts)
|
router.GET("/user/contact/", AuthMiddleware(h.GetContacts))
|
||||||
//router.GET("/user/:user/contact/:contact", h.GetContact)
|
//router.GET("/user/:user/contact/:contact", h.GetContact)
|
||||||
//router.DELETE("/user/:user/contact/:contact", h.DeleteContact)
|
//router.DELETE("/user/:user/contact/:contact", h.DeleteContact)
|
||||||
//router.GET("/user/:user/contact/:contact/conversation/", h.GetContactConversations)
|
//router.GET("/user/:user/contact/:contact/conversation/", h.GetContactConversations)
|
||||||
|
@ -65,3 +67,28 @@ func main() {
|
||||||
log.Printf("starting server on %s", listen)
|
log.Printf("starting server on %s", listen)
|
||||||
log.Fatal(http.ListenAndServe(listen, router))
|
log.Fatal(http.ListenAndServe(listen, router))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type RawClient struct {
|
||||||
|
UserId string `json:"userid"`
|
||||||
|
ClientId string `json:"clientid"`
|
||||||
|
}
|
||||||
|
func AuthMiddleware(next httprouter.Handle) httprouter.Handle {
|
||||||
|
return func (w http.ResponseWriter, r *http.Request, p httprouter.Params) {
|
||||||
|
ua := r.Header.Get("X-User-Claim")
|
||||||
|
if ua == "" {
|
||||||
|
http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var client RawClient
|
||||||
|
err := json.Unmarshal([]byte(ua), &client)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
context := context.WithValue(r.Context(), "user", client.UserId)
|
||||||
|
next(w, r.WithContext(context), p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue