]> SALOME platform Git repositories - modules/gde.git/blob - projects/GDE_API_CPP/api/src/UserService.cpp
Salome HOME
FileService
[modules/gde.git] / projects / GDE_API_CPP / api / src / UserService.cpp
1 #include "UserService.hpp"
2 #include "HttpConnection.hpp"
3 #include "CommandTO.hpp"
4 #include "CommandResultTO.hpp"
5 #include "JsonFormatter.hpp"
6 #include "Credentials.hpp"
7
8 /*
9  * WARNING: keep enum values synchronized to WEB API (UserService)
10  */
11 enum {
12   CREATE_USER = 1,
13   DELETE_USER,
14   ADD_TO_GROUP,
15   REMOVE_FROM_GROUP,
16   CREATE_GROUP,
17   DELETE_GROUP,
18   FIND_USER,
19   FIND_GROUP
20 };
21
22 std::string gde::UserService::_servletName = "UserService";
23
24 const gde::User
25 gde::UserService::createUser(const std::string& name, const std::string& password)
26 {
27   // build JSON string for CommandTO data
28   Poco::JSON::Object obj;
29   obj.set("name", Poco::Dynamic::Var(name));
30   obj.set("password", Poco::Dynamic::Var(password));
31   std::string data = JsonFormatter::stringify(obj);
32
33   CommandTO cto(CREATE_USER, data);
34   const Credentials& credentials = _session.getCredentials();
35   std::string uri = _session.getServiceURI(_servletName);
36   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
37
38   // build User object from CommandResultTO data (json format)
39   {
40     Poco::JSON::Object::Ptr object = JsonFormatter::parse(crto.getData());
41     int id = JsonFormatter::extract<int>(object, "id");
42     std::string name = JsonFormatter::extract<std::string>(object, "name");
43     std::string password = JsonFormatter::extract<std::string>(object, "password");
44     return gde::User(id, name, password);
45   }
46 }
47
48 bool
49 gde::UserService::deleteUser(const User& user)
50 {
51   CommandTO cto(DELETE_USER);
52   cto.setParameter("id", user.getId());
53
54   const Credentials& credentials = _session.getCredentials();
55   std::string uri = _session.getServiceURI(_servletName);
56   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
57   return crto.getCode() == CommandResultTO::OK;
58 }
59
60 const gde::User
61 gde::UserService::findUser(const std::string& name)
62 {
63   CommandTO cto(FIND_USER);
64   cto.setParameter("username", name);
65
66   const Credentials& credentials = _session.getCredentials();
67   std::string uri = _session.getServiceURI(_servletName);
68   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
69
70   // build User object from CommandResultTO data (json format)
71   {
72     Poco::JSON::Object::Ptr object = JsonFormatter::parse(crto.getData());
73     int id = JsonFormatter::extract<int>(object, "id");
74     std::string name = JsonFormatter::extract<std::string>(object, "name");
75     return gde::User(id, name);
76   }
77 }
78
79 const gde::UserGroup
80 gde::UserService::createUserGroup(const std::string& name)
81 {
82   CommandTO cto(CREATE_GROUP);
83   cto.setParameter("name", name);
84
85   const Credentials& credentials = _session.getCredentials();
86   std::string uri = _session.getServiceURI(_servletName);
87   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
88
89   // build UserGroup object from CommandResultTO data (json format)
90   {
91     Poco::JSON::Object::Ptr object = JsonFormatter::parse(crto.getData());
92     int id = JsonFormatter::extract<int>(object, "id");
93     std::string name = JsonFormatter::extract<std::string>(object, "name");
94     return gde::UserGroup(id, name);
95   }
96 }
97
98 bool
99 gde::UserService::deleteUserGroup(const gde::UserGroup& group)
100 {
101   CommandTO cto(DELETE_GROUP);
102   cto.setParameter("id", group.getId());
103
104   const Credentials& credentials = _session.getCredentials();
105   std::string uri = _session.getServiceURI(_servletName);
106   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
107   return crto.getCode() == CommandResultTO::OK;
108 }
109
110 const gde::UserGroup
111 gde::UserService::findUserGroup(const std::string& name)
112 {
113   CommandTO cto(FIND_GROUP);
114   cto.setParameter("groupname", name);
115
116   const Credentials& credentials = _session.getCredentials();
117   std::string uri = _session.getServiceURI(_servletName);
118   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
119
120   // build UserGroup object from CommandResultTO data (json format)
121   {
122     Poco::JSON::Object::Ptr object = JsonFormatter::parse(crto.getData());
123     int id = JsonFormatter::extract<int>(object, "id");
124     std::string name = JsonFormatter::extract<std::string>(object, "name");
125     return gde::UserGroup(id, name);
126   }
127 }
128
129 bool
130 gde::UserService::addToUserGroup(const gde::UserGroup& group, const gde::User& user)
131 {
132   CommandTO cto(ADD_TO_GROUP);
133   cto.setParameter("groupId", group.getId());
134   cto.setParameter("userId", user.getId());
135
136   const Credentials& credentials = _session.getCredentials();
137   std::string uri = _session.getServiceURI(_servletName);
138   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
139   return crto.getCode() == CommandResultTO::OK;
140 }
141
142 bool
143 gde::UserService::removeFromUserGroup(const gde::UserGroup& group, const gde::User& user)
144 {
145   CommandTO cto(REMOVE_FROM_GROUP);
146   cto.setParameter("groupId", group.getId());
147   cto.setParameter("userId", user.getId());
148
149   const Credentials& credentials = _session.getCredentials();
150   std::string uri = _session.getServiceURI(_servletName);
151   CommandResultTO crto = gde::HttpConnection(Poco::URI(uri), credentials).doPost(cto);
152   return crto.getCode() == CommandResultTO::OK;
153 }