mirror of
https://github.com/simon987/task_tracker.git
synced 2025-12-12 06:28:50 +00:00
Some work on permissions (lacks tests)
This commit is contained in:
@@ -163,3 +163,7 @@ func login(request *api.LoginRequest) (*api.LoginResponse, *http.Response) {
|
||||
|
||||
return resp, r
|
||||
}
|
||||
|
||||
func getSessionCtx(username string, password string, admin bool) {
|
||||
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ func TestCreateGetProject(t *testing.T) {
|
||||
Priority: 123,
|
||||
Motd: "motd",
|
||||
Public: true,
|
||||
Hidden: true,
|
||||
})
|
||||
|
||||
id := resp.Id
|
||||
@@ -59,6 +60,9 @@ func TestCreateGetProject(t *testing.T) {
|
||||
if getResp.Project.Public != true {
|
||||
t.Error()
|
||||
}
|
||||
if getResp.Project.Hidden != true {
|
||||
t.Error()
|
||||
}
|
||||
}
|
||||
|
||||
func TestCreateProjectInvalid(t *testing.T) {
|
||||
@@ -141,6 +145,7 @@ func TestUpdateProjectValid(t *testing.T) {
|
||||
Name: "NameB",
|
||||
Motd: "MotdB",
|
||||
Public: false,
|
||||
Hidden: true,
|
||||
}, pid)
|
||||
|
||||
if updateResp.Ok != true {
|
||||
@@ -164,6 +169,9 @@ func TestUpdateProjectValid(t *testing.T) {
|
||||
if proj.Project.Priority != 2 {
|
||||
t.Error()
|
||||
}
|
||||
if proj.Project.Hidden != true {
|
||||
t.Error()
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateProjectInvalid(t *testing.T) {
|
||||
|
||||
@@ -33,12 +33,6 @@ func TestCreateGetWorker(t *testing.T) {
|
||||
t.Error()
|
||||
}
|
||||
|
||||
if len(getResp.Worker.Identity.RemoteAddr) <= 0 {
|
||||
t.Error()
|
||||
}
|
||||
if len(getResp.Worker.Identity.UserAgent) <= 0 {
|
||||
t.Error()
|
||||
}
|
||||
if resp.Worker.Alias != "my_worker_alias" {
|
||||
t.Error()
|
||||
}
|
||||
|
||||
@@ -15,6 +15,11 @@ import (
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type SessionContext struct {
|
||||
Manager *storage.Manager
|
||||
SessionCookie *http.Cookie
|
||||
}
|
||||
|
||||
func Post(path string, x interface{}, worker *storage.Worker) *http.Response {
|
||||
|
||||
body, err := json.Marshal(x)
|
||||
|
||||
105
test/schema.sql
105
test/schema.sql
@@ -1,39 +1,30 @@
|
||||
DROP TABLE IF EXISTS worker_identity, worker, project, task, log_entry,
|
||||
DROP TABLE IF EXISTS worker, project, task, log_entry,
|
||||
worker_has_access_to_project, manager, manager_has_role_on_project, project_monitoring_snapshot,
|
||||
worker_verifies_task;
|
||||
worker_verifies_task, worker_requests_access_to_project;
|
||||
DROP TYPE IF EXISTS status;
|
||||
DROP TYPE IF EXISTS log_level;
|
||||
|
||||
CREATE TABLE worker_identity
|
||||
(
|
||||
id SERIAL PRIMARY KEY,
|
||||
remote_addr TEXT,
|
||||
user_agent TEXT,
|
||||
|
||||
UNIQUE (remote_addr)
|
||||
);
|
||||
|
||||
CREATE TABLE worker
|
||||
(
|
||||
id SERIAL PRIMARY KEY,
|
||||
alias TEXT,
|
||||
created INTEGER,
|
||||
identity INTEGER REFERENCES worker_identity (id),
|
||||
secret BYTEA,
|
||||
closed_task_count INTEGER DEFAULT 0
|
||||
id SERIAL PRIMARY KEY NOT NULL,
|
||||
alias TEXT NOT NULL,
|
||||
created INTEGER NOT NULL,
|
||||
secret BYTEA NOT NULL,
|
||||
closed_task_count INTEGER DEFAULT 0 NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE project
|
||||
(
|
||||
id SERIAL PRIMARY KEY,
|
||||
priority INTEGER DEFAULT 0,
|
||||
name TEXT UNIQUE,
|
||||
clone_url TEXT,
|
||||
git_repo TEXT UNIQUE,
|
||||
version TEXT,
|
||||
motd TEXT,
|
||||
public boolean,
|
||||
closed_task_count INT DEFAULT 0
|
||||
id SERIAL PRIMARY KEY NOT NULL,
|
||||
priority INTEGER DEFAULT 0 NOT NULL,
|
||||
closed_task_count INT DEFAULT 0 NOT NULL,
|
||||
public boolean NOT NULL,
|
||||
hidden boolean NOT NULL,
|
||||
name TEXT UNIQUE NOT NULL,
|
||||
clone_url TEXT NOT NULL,
|
||||
git_repo TEXT UNIQUE NOT NULL,
|
||||
version TEXT NOT NULL,
|
||||
motd TEXT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE worker_has_access_to_project
|
||||
@@ -61,43 +52,50 @@ CREATE TABLE task
|
||||
|
||||
CREATE TABLE worker_verifies_task
|
||||
(
|
||||
verification_hash BIGINT,
|
||||
task BIGINT REFERENCES task (id) ON DELETE CASCADE,
|
||||
worker INT REFERENCES worker (id)
|
||||
verification_hash BIGINT NOT NULL,
|
||||
task BIGINT REFERENCES task (id) ON DELETE CASCADE NOT NULL,
|
||||
worker INT REFERENCES worker (id) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE log_entry
|
||||
(
|
||||
level INTEGER,
|
||||
message TEXT,
|
||||
message_data TEXT,
|
||||
timestamp INTEGER
|
||||
level INTEGER NOT NULL,
|
||||
message TEXT NOT NULL,
|
||||
message_data TEXT NOT NULL,
|
||||
timestamp INTEGER NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE manager
|
||||
(
|
||||
id SERIAL PRIMARY KEY,
|
||||
username TEXT UNIQUE,
|
||||
password BYTEA,
|
||||
website_admin BOOLEAN
|
||||
register_time INTEGER NOT NULL,
|
||||
website_admin BOOLEAN NOT NULL,
|
||||
username TEXT UNIQUE NOT NULL,
|
||||
password BYTEA NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE manager_has_role_on_project
|
||||
(
|
||||
manager INTEGER REFERENCES manager (id),
|
||||
role SMALLINT,
|
||||
project INTEGER REFERENCES project (id)
|
||||
manager INTEGER REFERENCES manager (id) NOT NULL,
|
||||
role SMALLINT NOT NULl,
|
||||
project INTEGER REFERENCES project (id) NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE project_monitoring_snapshot
|
||||
(
|
||||
project INT REFERENCES project (id),
|
||||
new_task_count INT,
|
||||
failed_task_count INT,
|
||||
closed_task_count INT,
|
||||
awaiting_verification_task_count INT,
|
||||
worker_access_count INT,
|
||||
timestamp INT
|
||||
project INT REFERENCES project (id) NOT NULL,
|
||||
new_task_count INT NOT NULL,
|
||||
failed_task_count INT NOT NULL,
|
||||
closed_task_count INT NOT NULL,
|
||||
awaiting_verification_task_count INT NOT NULL,
|
||||
worker_access_count INT NOT NULL,
|
||||
timestamp INT NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE worker_requests_access_to_project
|
||||
(
|
||||
worker INT REFERENCES worker (id) NOT NULL,
|
||||
project INT REFERENCES project (id) NOT NULL
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION on_task_delete_proc() RETURNS TRIGGER AS
|
||||
@@ -114,6 +112,21 @@ CREATE TRIGGER on_task_delete
|
||||
FOR EACH ROW
|
||||
EXECUTE PROCEDURE on_task_delete_proc();
|
||||
|
||||
CREATE OR REPLACE FUNCTION on_manager_insert() RETURNS TRIGGER AS
|
||||
$$
|
||||
BEGIN
|
||||
IF NEW.id = 1 THEN
|
||||
UPDATE manager SET website_admin= TRUE WHERE id = 1;
|
||||
end if;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE 'plpgsql';
|
||||
CREATE TRIGGER on_manager_insert
|
||||
AFTER INSERT
|
||||
ON manager
|
||||
FOR EACH ROW
|
||||
EXECUTE PROCEDURE on_manager_insert();
|
||||
|
||||
CREATE OR REPLACE FUNCTION release_task_ok(wid INT, tid INT, ver INT) RETURNS BOOLEAN AS
|
||||
$$
|
||||
DECLARE
|
||||
|
||||
Reference in New Issue
Block a user