Keep it simple for now. We want to write a proper test suite for this and
letting it crash is more than good enough. It was a mistake to try to add more complications to the APIs at this point in time.main
parent
2ad3b52c06
commit
e8ccc3a29f
|
@ -37,14 +37,6 @@ This module accepts four methods:
|
||||||
Logout the user from the current session and invalidate all the
|
Logout the user from the current session and invalidate all the
|
||||||
authentication cookies, if present.
|
authentication cookies, if present.
|
||||||
|
|
||||||
If an operation fails, the response JSON is in the form:
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"error": "error string"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
JSON APIs
|
JSON APIs
|
||||||
|
|
||||||
POST /api/v1/auth
|
POST /api/v1/auth
|
||||||
|
@ -62,29 +54,11 @@ Response codes:
|
||||||
- 400 Bad Request
|
- 400 Bad Request
|
||||||
- 404 Not Found
|
- 404 Not Found
|
||||||
|
|
||||||
Response body:
|
|
||||||
|
|
||||||
If authentication successful:
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"result": "ok"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
DELETE /api/v1/auth
|
DELETE /api/v1/auth
|
||||||
|
|
||||||
- 202 Accepted
|
- 202 Accepted
|
||||||
- 404 Not Found
|
- 404 Not Found
|
||||||
|
|
||||||
If operation successful;
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"result": "deleted"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
""".
|
""".
|
||||||
|
|
||||||
-behaviour(cowboy_handler).
|
-behaviour(cowboy_handler).
|
||||||
|
@ -127,10 +101,7 @@ forbidden(Req, State) ->
|
||||||
case dudeswave_auth:authenticate(User, Auth, Bucket) of
|
case dudeswave_auth:authenticate(User, Auth, Bucket) of
|
||||||
{error, service_unavailable} -> exit(service_unavailable);
|
{error, service_unavailable} -> exit(service_unavailable);
|
||||||
true -> {false, Req, State};
|
true -> {false, Req, State};
|
||||||
false ->
|
false -> {true, Req, State}
|
||||||
Resp = json:encode(#{<<"error">> => <<"authentication required">>}),
|
|
||||||
Req0 = cowboy_req:reply(403, #{}, Resp, Req),
|
|
||||||
{true, Req0, State}
|
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -148,9 +119,7 @@ resource_exists(Req, State) ->
|
||||||
|
|
||||||
case dudeswave_auth:details(User, Bucket) of
|
case dudeswave_auth:details(User, Bucket) of
|
||||||
[] ->
|
[] ->
|
||||||
Resp = json:encode(#{<<"error">> => <<"user does not exists">>}),
|
{false, Req, State};
|
||||||
Req0 = cowboy_req:reply(404, #{}, Resp, Req),
|
|
||||||
{false, Req0, State};
|
|
||||||
{error, Reason} -> exit(Reason);
|
{error, Reason} -> exit(Reason);
|
||||||
_ ->
|
_ ->
|
||||||
NewState = State#{
|
NewState = State#{
|
||||||
|
@ -180,9 +149,7 @@ delete_resource(Req, State) ->
|
||||||
#{max_age => 0}),
|
#{max_age => 0}),
|
||||||
Req1 = cowboy_req:set_resp_cookie(<<"dudename">>, User, Req0,
|
Req1 = cowboy_req:set_resp_cookie(<<"dudename">>, User, Req0,
|
||||||
#{max_age => 0}),
|
#{max_age => 0}),
|
||||||
Resp = json:encode(#{<<"result">> => <<"deleted">>}),
|
{true, Req1, State};
|
||||||
Req2 = cowboy_req:reply(200, #{}, Resp, Req1),
|
|
||||||
{true, Req2, State};
|
|
||||||
{error, _} -> {false, Req, State}
|
{error, _} -> {false, Req, State}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -201,21 +168,15 @@ login(Req, State) ->
|
||||||
|
|
||||||
case dudeswave_auth:authenticate(User, Pass, Cookies, Bucket) of
|
case dudeswave_auth:authenticate(User, Pass, Cookies, Bucket) of
|
||||||
{true, Cookie, Validity} ->
|
{true, Cookie, Validity} ->
|
||||||
Resp = json:encode(#{<<"result">> => <<"ok">>}),
|
|
||||||
Req1 = cowboy_req:set_resp_cookie(<<"dudeauth">>, Cookie, Req0,
|
Req1 = cowboy_req:set_resp_cookie(<<"dudeauth">>, Cookie, Req0,
|
||||||
#{max_age => Validity}),
|
#{max_age => Validity}),
|
||||||
Req2 = cowboy_req:set_resp_cookie(<<"dudename">>, User, Req1,
|
Req2 = cowboy_req:set_resp_cookie(<<"dudename">>, User, Req1,
|
||||||
#{max_age => Validity}),
|
#{max_age => Validity}),
|
||||||
Req3 = cowboy_req:reply(200, #{}, Resp, Req2),
|
{true, Req2, State};
|
||||||
{true, Req3, State};
|
|
||||||
false ->
|
false ->
|
||||||
Resp = json:encode(#{<<"error">> => <<"authentication failed">>}),
|
{false, Req0, State};
|
||||||
Req1 = cowboy_req:reply(401, #{}, Resp, Req0),
|
|
||||||
{false, Req1, State};
|
|
||||||
{error, _} ->
|
{error, _} ->
|
||||||
Resp = json:encode(#{<<"error">> => <<"internal error">>}),
|
{false, Req0, State}
|
||||||
Req1 = cowboy_req:reply(500, #{}, Resp, Req0),
|
|
||||||
{false, Req1, State}
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
% Provided but not used
|
% Provided but not used
|
||||||
|
|
|
@ -29,14 +29,6 @@ If the session is not valid, all the requests will return `403 Forbidden` to
|
||||||
the client. In case a technical problem occurs, `500 Internal Server Error`
|
the client. In case a technical problem occurs, `500 Internal Server Error`
|
||||||
is returned.
|
is returned.
|
||||||
|
|
||||||
In case of errors, all the methods returns a JSON response in the form:
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"error": "error string"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
This module accepts four methods:
|
This module accepts four methods:
|
||||||
|
|
||||||
- GET /api/v1/user
|
- GET /api/v1/user
|
||||||
|
@ -89,14 +81,6 @@ PUT /api/v1/user
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Response body:
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"result": "created"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Response codes:
|
Response codes:
|
||||||
|
|
||||||
- 201 Created
|
- 201 Created
|
||||||
|
@ -113,14 +97,6 @@ POST /api/v1/user
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Response body:
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"result": "updated"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Response codes:
|
Response codes:
|
||||||
|
|
||||||
- 200 OK
|
- 200 OK
|
||||||
|
@ -129,14 +105,6 @@ Response codes:
|
||||||
|
|
||||||
DELETE /api/v1/user
|
DELETE /api/v1/user
|
||||||
|
|
||||||
Response body:
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"result": "deleted"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Response codes:
|
Response codes:
|
||||||
|
|
||||||
- 202 Accepted
|
- 202 Accepted
|
||||||
|
@ -183,13 +151,9 @@ forbidden(Req, State) ->
|
||||||
|
|
||||||
case dudeswave_auth:authenticate(User, Auth, Bucket) of
|
case dudeswave_auth:authenticate(User, Auth, Bucket) of
|
||||||
{error, service_unavailable} ->
|
{error, service_unavailable} ->
|
||||||
Resp = json:encode(#{<<"error">> => <<"internal server error">>}),
|
{true, Req, State};
|
||||||
Req0 = cowboy_req:reply(500, #{}, Resp, Req),
|
|
||||||
{true, Req0, State};
|
|
||||||
true ->
|
true ->
|
||||||
Resp = json:encode(#{<<"error">> => <<"authentication required">>}),
|
{false, Req, State};
|
||||||
Req0 = cowboy_req:reply(403, #{}, Resp, Req),
|
|
||||||
{false, Req0, State};
|
|
||||||
false -> {true, Req, State}
|
false -> {true, Req, State}
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
@ -219,14 +183,8 @@ resource_exists(Req, State) ->
|
||||||
{ok, Bucket} = maps:find(bucket, State),
|
{ok, Bucket} = maps:find(bucket, State),
|
||||||
|
|
||||||
case dudeswave_auth:details(User, Bucket) of
|
case dudeswave_auth:details(User, Bucket) of
|
||||||
[] ->
|
[] -> {false, Req, State};
|
||||||
Resp = json:encode(#{<<"error">> => <<"user does not exists">>}),
|
{error, _} -> {false, Req, State};
|
||||||
Req0 = cowboy_req:reply(404, #{}, Resp, Req),
|
|
||||||
{false, Req0, State};
|
|
||||||
{error, _} ->
|
|
||||||
Resp = json:encode(#{<<"error">> => <<"internal server error">>}),
|
|
||||||
Req0 = cowboy_req:reply(500, #{}, Resp, Req),
|
|
||||||
{false, Req0, State};
|
|
||||||
Details ->
|
Details ->
|
||||||
NewState = State#{
|
NewState = State#{
|
||||||
bucket => Bucket,
|
bucket => Bucket,
|
||||||
|
@ -251,14 +209,8 @@ delete_resource(Req, State) ->
|
||||||
#{dudename := User} = cowboy_req:match_cookies([dudename], Req),
|
#{dudename := User} = cowboy_req:match_cookies([dudename], Req),
|
||||||
|
|
||||||
case dudeswave_auth:delete(User, Bucket) of
|
case dudeswave_auth:delete(User, Bucket) of
|
||||||
ok ->
|
ok -> {true, Req, State};
|
||||||
Resp = json:encode(#{<<"result">> => <<"deleted">>}),
|
{error, _} -> {false, Req, State}
|
||||||
Req0 = cowboy_req:reply(200, #{}, Resp, Req),
|
|
||||||
{true, Req0, State};
|
|
||||||
{error, _} ->
|
|
||||||
Resp = json:encode(#{<<"error">> => <<"internal server error">>}),
|
|
||||||
Req0 = cowboy_req:reply(500, #{}, Resp, Req),
|
|
||||||
{false, Req0, State}
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
delete_completed(Req, State) -> {true, Req, State}.
|
delete_completed(Req, State) -> {true, Req, State}.
|
||||||
|
@ -275,14 +227,8 @@ create_user(Req, State) ->
|
||||||
#{<<"password">> := Pass, <<"email">> := Email} = json:decode(Data),
|
#{<<"password">> := Pass, <<"email">> := Email} = json:decode(Data),
|
||||||
|
|
||||||
case dudeswave_auth:new(User, Pass, Email, Bucket) of
|
case dudeswave_auth:new(User, Pass, Email, Bucket) of
|
||||||
ok ->
|
ok -> {true, Req0, []};
|
||||||
Resp = json:encode(#{<<"result">> => <<"created">>}),
|
{error, _} -> {false, Req0, State}
|
||||||
Req1 = cowboy_req:reply(201, #{}, Resp, Req0),
|
|
||||||
{true, Req1, []};
|
|
||||||
{error, _} ->
|
|
||||||
Resp = json:encode(#{<<"error">> => <<"internal server error">>}),
|
|
||||||
Req1 = cowboy_req:reply(500, #{}, Resp, Req0),
|
|
||||||
{false, Req1, State}
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
modify_user(Req, State) ->
|
modify_user(Req, State) ->
|
||||||
|
@ -294,14 +240,8 @@ modify_user(Req, State) ->
|
||||||
<<"name">> := Name} = json:decode(Data),
|
<<"name">> := Name} = json:decode(Data),
|
||||||
|
|
||||||
case dudeswave_auth:update(User, Name, Email, Desc, Bucket) of
|
case dudeswave_auth:update(User, Name, Email, Desc, Bucket) of
|
||||||
ok ->
|
ok -> {true, Req0, []};
|
||||||
Resp = json:encode(#{<<"result">> => <<"details updated">>}),
|
{error, _} -> {false, Req0, State}
|
||||||
Req0 = cowboy_req:reply(200, #{}, Resp, Req),
|
|
||||||
{true, Req0, []};
|
|
||||||
{error, _} ->
|
|
||||||
Resp = json:encode(#{<<"error">> => <<"internal server error">>}),
|
|
||||||
Req0 = cowboy_req:reply(500, #{}, Resp, Req),
|
|
||||||
{false, Req0, State}
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
user_details(Req, State) ->
|
user_details(Req, State) ->
|
||||||
|
|
Loading…
Reference in New Issue