diff options
| -rw-r--r-- | gentoobrowse-api/api/users.ice | 8 | ||||
| -rw-r--r-- | gentoobrowse-api/db/schema.sql | 3 | ||||
| -rw-r--r-- | gentoobrowse-api/domain/user-models.ice | 5 | ||||
| -rw-r--r-- | gentoobrowse-api/service/sql/users/create.sql | 4 | ||||
| -rw-r--r-- | gentoobrowse-api/service/sql/users/find.sql | 3 | ||||
| -rw-r--r-- | gentoobrowse-api/service/sql/users/get.sql | 3 | ||||
| -rw-r--r-- | gentoobrowse-api/service/sql/users/safeDelete.sql | 3 | ||||
| -rw-r--r-- | gentoobrowse-api/service/sql/users/track.sql | 2 | ||||
| -rw-r--r-- | gentoobrowse-api/service/sql/users/untrack.sql | 3 | ||||
| -rw-r--r-- | gentoobrowse-api/service/usersimpl.cpp | 54 | ||||
| -rw-r--r-- | gentoobrowse-api/service/usersimpl.h | 8 | ||||
| -rw-r--r-- | gentoobrowse-api/unittests/testUsers.cpp | 59 | 
12 files changed, 154 insertions, 1 deletions
| diff --git a/gentoobrowse-api/api/users.ice b/gentoobrowse-api/api/users.ice index 798ab52..d0c37f7 100644 --- a/gentoobrowse-api/api/users.ice +++ b/gentoobrowse-api/api/users.ice @@ -8,6 +8,14 @@ module Gentoo {  	interface Users {  		User authenticate(string username, string password) throws Slicer::NoRowsReturned;  		User verify(string username, string verifyguid) throws Slicer::NoRowsReturned; + +		User get(int id) throws Slicer::NoRowsReturned; +		User find(string username) throws Slicer::NoRowsReturned; +		NewUser create(string username, string password, string realname, string email) throws DuplicateDetails; +		void remove(int id, string password) throws Slicer::NoRowsReturned; + +		void track(int userId, int packageId); +		void untrack(int userId, int packageId);  	};  }; diff --git a/gentoobrowse-api/db/schema.sql b/gentoobrowse-api/db/schema.sql index 8951297..d5d7678 100644 --- a/gentoobrowse-api/db/schema.sql +++ b/gentoobrowse-api/db/schema.sql @@ -5,6 +5,7 @@ SET client_encoding = 'UTF8';  SET standard_conforming_strings = on;  SET check_function_bodies = true;  SET client_min_messages = warning; +CREATE EXTENSION "uuid-ossp";  -- Name: gentoobrowse; Type: SCHEMA; Schema: -; Owner: gentoo  CREATE SCHEMA gentoobrowse;  ALTER SCHEMA gentoobrowse OWNER TO gentoo; @@ -603,7 +604,7 @@ ALTER TABLE users OWNER TO gentoo;  COMMENT ON TABLE users IS 'Registered users';  -- Name: users_userid_seq; Type: SEQUENCE; Schema: gentoobrowse; Owner: gentoo  CREATE SEQUENCE users_userid_seq -    START WITH 1 +    START WITH 3      INCREMENT BY 1      NO MINVALUE      NO MAXVALUE diff --git a/gentoobrowse-api/domain/user-models.ice b/gentoobrowse-api/domain/user-models.ice index ccbda99..cf0a386 100644 --- a/gentoobrowse-api/domain/user-models.ice +++ b/gentoobrowse-api/domain/user-models.ice @@ -9,7 +9,12 @@ module Gentoo {  		string useremail;  	}; +	class NewUser extends User { +		string verifyguid; +	}; +  	exception InvalidCredentials { }; +	exception DuplicateDetails { };  };  #endif diff --git a/gentoobrowse-api/service/sql/users/create.sql b/gentoobrowse-api/service/sql/users/create.sql new file mode 100644 index 0000000..dc43f18 --- /dev/null +++ b/gentoobrowse-api/service/sql/users/create.sql @@ -0,0 +1,4 @@ +-- libdbpp:no-cursor +INSERT INTO gentoobrowse.users(username, userpassword, userrealname, useremail, verifyguid) +VALUES(?, ?, ?, ?, uuid_generate_v4()) +RETURNING userid, username, userrealname, useremail, verifyguid diff --git a/gentoobrowse-api/service/sql/users/find.sql b/gentoobrowse-api/service/sql/users/find.sql new file mode 100644 index 0000000..026cfcf --- /dev/null +++ b/gentoobrowse-api/service/sql/users/find.sql @@ -0,0 +1,3 @@ +SELECT userid, username, userrealname, useremail +FROM gentoobrowse.users +WHERE username = ? diff --git a/gentoobrowse-api/service/sql/users/get.sql b/gentoobrowse-api/service/sql/users/get.sql new file mode 100644 index 0000000..7bd778e --- /dev/null +++ b/gentoobrowse-api/service/sql/users/get.sql @@ -0,0 +1,3 @@ +SELECT userid, username, userrealname, useremail +FROM gentoobrowse.users +WHERE userid = ? diff --git a/gentoobrowse-api/service/sql/users/safeDelete.sql b/gentoobrowse-api/service/sql/users/safeDelete.sql new file mode 100644 index 0000000..198c534 --- /dev/null +++ b/gentoobrowse-api/service/sql/users/safeDelete.sql @@ -0,0 +1,3 @@ +DELETE FROM gentoobrowse.users +WHERE userid = ? +AND userpassword = ? diff --git a/gentoobrowse-api/service/sql/users/track.sql b/gentoobrowse-api/service/sql/users/track.sql new file mode 100644 index 0000000..c05c6df --- /dev/null +++ b/gentoobrowse-api/service/sql/users/track.sql @@ -0,0 +1,2 @@ +INSERT INTO gentoobrowse.user_packages(userid, packageid) +VALUES(?, ?) diff --git a/gentoobrowse-api/service/sql/users/untrack.sql b/gentoobrowse-api/service/sql/users/untrack.sql new file mode 100644 index 0000000..e303ec1 --- /dev/null +++ b/gentoobrowse-api/service/sql/users/untrack.sql @@ -0,0 +1,3 @@ +DELETE FROM gentoobrowse.user_packages +WHERE userid = ? +AND packageid = ? diff --git a/gentoobrowse-api/service/usersimpl.cpp b/gentoobrowse-api/service/usersimpl.cpp index dc3769b..6aee42d 100644 --- a/gentoobrowse-api/service/usersimpl.cpp +++ b/gentoobrowse-api/service/usersimpl.cpp @@ -2,6 +2,12 @@  #include <modifycommand.h>  #include <sql/users/authenticate.sql.h>  #include <sql/users/verify.sql.h> +#include <sql/users/create.sql.h> +#include <sql/users/get.sql.h> +#include <sql/users/find.sql.h> +#include <sql/users/safeDelete.sql.h> +#include <sql/users/track.sql.h> +#include <sql/users/untrack.sql.h>  namespace Gentoo {  namespace Service { @@ -21,6 +27,54 @@ Users::verify(const std::string & username, const std::string & verifyguid, cons  {  	return fetch<Gentoo::UserPtr>(sql::users::verify, username, verifyguid);  } + +Gentoo::UserPtr +Users::get(Ice::Int id, const Ice::Current &) +{ +	return fetch<Gentoo::UserPtr>(sql::users::get, id); +} + +Gentoo::UserPtr +Users::find(const std::string & username, const Ice::Current &) +{ +	return fetch<Gentoo::UserPtr>(sql::users::find, username); +} + +Gentoo::NewUserPtr +Users::create(const std::string & username, const std::string & password, const std::string & realname, const std::string & email, const Ice::Current &) +{ +	return fetch<Gentoo::NewUserPtr>(sql::users::create, username, password, realname, email); +} + +void +Users::remove(Ice::Int id, const std::string & password, const Ice::Current &) +{ +	auto dbc = db->get(); +	auto del = dbc->modify(sql::users::safeDelete.getSql()); +	del->bindParamI(0, id); +	del->bindParamS(1, password); +	del->execute(); +} + +void +Users::track(Ice::Int userId, Ice::Int packageId, const Ice::Current &) +{ +	auto dbc = db->get(); +	auto track = dbc->modify(sql::users::track.getSql()); +	track->bindParamI(0, userId); +	track->bindParamI(1, packageId); +	track->execute(); +} + +void +Users::untrack(Ice::Int userId, Ice::Int packageId, const Ice::Current &) +{ +	auto dbc = db->get(); +	auto untrack = dbc->modify(sql::users::untrack.getSql()); +	untrack->bindParamI(0, userId); +	untrack->bindParamI(1, packageId); +	untrack->execute(); +}  }  } diff --git a/gentoobrowse-api/service/usersimpl.h b/gentoobrowse-api/service/usersimpl.h index 76a6ade..f97e2ad 100644 --- a/gentoobrowse-api/service/usersimpl.h +++ b/gentoobrowse-api/service/usersimpl.h @@ -13,6 +13,14 @@ class DLL_PUBLIC Users : public Gentoo::Users, IceTray::AbstractCachingDatabaseC  		Gentoo::UserPtr authenticate(const std::string &, const std::string &, const Ice::Current &) override;  		Gentoo::UserPtr verify(const std::string &, const std::string &, const Ice::Current &) override; + +		Gentoo::UserPtr get(Ice::Int id, const Ice::Current &) override; +		Gentoo::UserPtr find(const std::string & username, const Ice::Current &) override; +		Gentoo::NewUserPtr create(const std::string &, const std::string &, const std::string &, const std::string &, const Ice::Current &) override; +		void remove(Ice::Int id, const std::string &, const Ice::Current &) override; + +		void track(Ice::Int, Ice::Int, const Ice::Current &) override; +		void untrack(Ice::Int, Ice::Int, const Ice::Current &) override;  };  }  } diff --git a/gentoobrowse-api/unittests/testUsers.cpp b/gentoobrowse-api/unittests/testUsers.cpp index 93c8fdd..e4c1ac4 100644 --- a/gentoobrowse-api/unittests/testUsers.cpp +++ b/gentoobrowse-api/unittests/testUsers.cpp @@ -41,5 +41,64 @@ BOOST_AUTO_TEST_CASE( authenticateVerify )  	BOOST_REQUIRE_THROW(u->verify("unverified", "a24eb4fa-8a42-11e6-a04e-c86000a60e12"), Slicer::NoRowsReturned);  } +BOOST_AUTO_TEST_CASE( create ) +{ +	auto user = u->create("testuser", "testpass", "Test User", "test@user.com"); +	BOOST_REQUIRE_EQUAL(3, user->userid); +	BOOST_REQUIRE_EQUAL("testuser", user->username); +	BOOST_REQUIRE_EQUAL("Test User", user->userrealname); +	BOOST_REQUIRE_EQUAL("test@user.com", user->useremail); +	BOOST_REQUIRE_EQUAL(36, user->verifyguid.length()); +	auto verified = u->verify(user->username, user->verifyguid); +	BOOST_REQUIRE(verified); +} + +BOOST_AUTO_TEST_CASE( get ) +{ +	auto user = u->get(3); +	BOOST_REQUIRE_EQUAL(3, user->userid); +	BOOST_REQUIRE_EQUAL("testuser", user->username); +	BOOST_REQUIRE_EQUAL("Test User", user->userrealname); +	BOOST_REQUIRE_EQUAL("test@user.com", user->useremail); +} + +BOOST_AUTO_TEST_CASE( getMissing ) +{ +	BOOST_REQUIRE_THROW(u->get(20), Slicer::NoRowsReturned); +} + +BOOST_AUTO_TEST_CASE( find ) +{ +	auto user = u->find("testuser"); +	BOOST_REQUIRE_EQUAL(3, user->userid); +	BOOST_REQUIRE_EQUAL("testuser", user->username); +	BOOST_REQUIRE_EQUAL("Test User", user->userrealname); +	BOOST_REQUIRE_EQUAL("test@user.com", user->useremail); +} + +BOOST_AUTO_TEST_CASE( findMissing ) +{ +	BOOST_REQUIRE_THROW(u->find("nobody"), Slicer::NoRowsReturned); +} + +BOOST_AUTO_TEST_CASE( deleteCheck ) +{ +	u->get(3); +	u->remove(3, "wrongpass"); +	u->get(3); +	u->remove(3, "testpass"); +	BOOST_REQUIRE_THROW(u->get(3), Slicer::NoRowsReturned); +} + +BOOST_AUTO_TEST_CASE( track ) +{ +	u->track(1, 44473); +} + +BOOST_AUTO_TEST_CASE( untrack ) +{ +	u->untrack(1, 44473); +} +  BOOST_AUTO_TEST_SUITE_END() | 
