digitalmars.D.learn - VibeD - REST API and vibed.web.auth framework
- holo (79/79) Aug 06 2017 Hello
- Bastiaan Veelo (11/29) Aug 07 2017 [snip]
- holo (5/5) Aug 07 2017 Thank you for explanation.
Hello I'm trying to use auth framework with REST api ( http://vibed.org/api/vibe.web.auth/ ). Is it possible to use it with registerRestInterface? According to description under: http://vibed.org/api/vibe.web.auth/requiresAuth it should be available on both Web and REST. Here is my example code and compilation errors bellow: import vibe.d; import vibe.web.auth; import vibe.http.session; import vibe.web.rest : registerRestInterface; import vibe.web.web : noRoute; import std.algorithm, std.array; struct AuthInfo { string userName; bool premium; bool admin; safe: bool isAdmin() { return this.admin; } bool isPremiumUser() { return this.premium; } } interface IfOAuthAPI { void postLogin(ValidUsername login, ValidPassword password); // bool postTokenValidation(string token, string userName); } path("/api") requiresAuth class OAuthAPI : IfOAuthAPI { noRoute AuthInfo authenticate(scope HTTPServerRequest req, scope HTTPServerResponse res) safe { if (!req.session || !req.session.isKeySet("auth")) throw new HTTPStatusException(HTTPStatus.forbidden, "Not authorized to perform this action!"); return req.session.get!AuthInfo("auth"); } this(MongoCollection coll) { collection = coll; } private: MongoCollection collection; public: noAuth string postLogin(ValidUsername login, ValidPassword password) { logInfo("Recived data for" ~ login ~ "and" ~ password); Bson query = Bson(["username" : Bson(login)]); auto result = collection.find(query); foreach (i, doc; result) logInfo("Item %d: %s", i, doc.toJson().toString()); logInfo("Sending respond"); return "OK"; } } And im getting such errors: ms-frontpage ~master: building configuration "application"... ../../.dub/packages/vibe-d-0.7.31/vibe-d/source/vibe/http/server.d(286,33): Deprecation: alias diet.traits.FilterCallback is deprecated - Use SafeFilterCallback instead. source/app.d(14,31): Error: cannot create instance of interface IfOAuthAPI source/service/oauth.d(35,8): Error: safe function 'oauth.OAuthAPI.authenticate' cannot call system function 'vibe.http.session.Session.opCast' source/service/oauth.d(35,44): Error: safe function 'oauth.OAuthAPI.authenticate' cannot call system function 'vibe.http.session.Session.isKeySet' source/service/oauth.d(36,10): Error: safe function 'oauth.OAuthAPI.authenticate' cannot call system constructor 'vibe.http.common.HTTPStatusException.this' source/service/oauth.d(38,34): Error: safe function 'oauth.OAuthAPI.authenticate' cannot call system function 'vibe.http.session.Session.get!(AuthInfo).get' dmd failed with exit code 1. Regards holo
Aug 06 2017
On Sunday, 6 August 2017 at 16:47:14 UTC, holo wrote:Hello I'm trying to use auth framework with REST api ( http://vibed.org/api/vibe.web.auth/ ). Is it possible to use it with registerRestInterface? According to description under: http://vibed.org/api/vibe.web.auth/requiresAuth it should be available on both Web and REST. Here is my example code and compilation errors bellow:[snip]AuthInfo authenticate(scope HTTPServerRequest req, scope HTTPServerResponse res) safe[snip]And im getting such errors: ms-frontpage ~master: building configuration "application"... ../../.dub/packages/vibe-d-0.7.31/vibe-d/source/vibe/http/server.d(286,33): Deprecation: alias diet.traits.FilterCallback is deprecated - Use SafeFilterCallback instead. source/app.d(14,31): Error: cannot create instance of interface IfOAuthAPI source/service/oauth.d(35,8): Error: safe function 'oauth.OAuthAPI.authenticate' cannot call system function 'vibe.http.session.Session.opCast'[snip] Are you aware what safe does? If you remove it, it probably compiles. From safe functions you cannot call functions that are not marked safe or trusted [1]. Regards, Bastiaan. [1] https://dlang.org/spec/function.html#function-safety
Aug 07 2017
Thank you for explanation. It fix my problem with compilation. I was using https://github.com/rejectedsoftware/vibe.d/blob/master/examples/w b-auth/source/app.d as example and there is safe function. I try to compile it with newest (beta) version of vibe.d and it compiled too (so i suspect in newest version system function is marked as trusted/safe too or it is fixed some other way :)). Regards holo
Aug 07 2017