~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to userdb/users.sql

Merge enforce-naming-constraints. Users, subjects, semesters, projects, groups exercises and worksheets now have restricted name character sets.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
BEGIN;
 
2
 
 
3
-- Check that the provided name is sane for use in URLs.
 
4
CREATE OR REPLACE FUNCTION valid_url_name(name text) RETURNS boolean AS 
 
5
$$
 
6
    BEGIN
 
7
        RETURN name ~ E'^[a-z0-9][a-z0-9_\+\.\-]*$';
 
8
    END;
 
9
$$ LANGUAGE 'plpgsql';
 
10
 
 
11
-- Just like valid_url_name, except that @ is permitted (so we can use a
 
12
-- reasonable subset of email addresses as usernames).
 
13
CREATE OR REPLACE FUNCTION valid_login_name(name text) RETURNS boolean AS 
 
14
$$
 
15
    BEGIN
 
16
        RETURN name ~ E'^[a-z0-9][a-z0-9@_\+\.\-]*$';
 
17
    END;
 
18
$$ LANGUAGE 'plpgsql';
 
19
 
2
20
CREATE SEQUENCE login_unixid_seq MINVALUE 1000 MAXVALUE 29999 START WITH 5000;
3
21
 
4
22
CREATE TABLE login (
5
23
    loginid     SERIAL PRIMARY KEY NOT NULL,
6
 
    login       VARCHAR UNIQUE NOT NULL,
 
24
    login       VARCHAR UNIQUE NOT NULL CHECK (valid_login_name(login)),
7
25
    passhash    VARCHAR,
8
26
    state       VARCHAR NOT NULL CHECK (state in ('no_agreement', 'pending',
9
27
                                              'enabled', 'disabled'))
28
46
    subjectid       SERIAL PRIMARY KEY NOT NULL,
29
47
    subj_code       VARCHAR UNIQUE NOT NULL,
30
48
    subj_name       VARCHAR NOT NULL,
31
 
    subj_short_name VARCHAR UNIQUE NOT NULL
 
49
    subj_short_name VARCHAR UNIQUE NOT NULL CHECK (valid_url_name(subj_short_name))
32
50
);
33
51
 
34
52
CREATE TABLE semester (
35
53
    semesterid  SERIAL PRIMARY KEY NOT NULL,
36
 
    year        CHAR(4) NOT NULL,
37
 
    semester    CHAR(1) NOT NULL,
 
54
    year        CHAR(4) NOT NULL CHECK (valid_url_name(year)),
 
55
    semester    CHAR(1) NOT NULL CHECK (valid_url_name(semester)),
38
56
    state       TEXT NOT NULL CHECK (state IN ('disabled', 'past',
39
57
                                    'current', 'future')) DEFAULT 'current',
40
58
    UNIQUE (year, semester)
62
80
 
63
81
CREATE TABLE project (
64
82
    projectid   SERIAL PRIMARY KEY NOT NULL,
65
 
    short_name  TEXT NOT NULL,
 
83
    short_name  TEXT NOT NULL CHECK (valid_url_name(short_name)),
66
84
    name        TEXT NOT NULL,
67
85
    synopsis    TEXT,
68
86
    url         TEXT,
97
115
    FOR EACH ROW EXECUTE PROCEDURE check_project_namespacing_insertupdate();
98
116
 
99
117
CREATE TABLE project_group (
100
 
    groupnm     VARCHAR NOT NULL,
 
118
    groupnm     VARCHAR NOT NULL CHECK (valid_url_name(groupnm)),
101
119
    groupid     SERIAL PRIMARY KEY NOT NULL,
102
120
    projectsetid  INTEGER REFERENCES project_set (projectsetid) NOT NULL,
103
121
    nick        VARCHAR,
193
211
-- Worksheets
194
212
-- ----------
195
213
CREATE TABLE exercise (
196
 
    identifier  TEXT PRIMARY KEY,
 
214
    identifier  TEXT PRIMARY KEY CHECK (valid_url_name(identifier)),
197
215
    name        TEXT,
198
216
    description TEXT,
199
217
    partial     TEXT,
205
223
CREATE TABLE worksheet (
206
224
    worksheetid SERIAL PRIMARY KEY,
207
225
    offeringid  INT4 REFERENCES offering (offeringid) NOT NULL,
208
 
    identifier  TEXT NOT NULL,
 
226
    identifier  TEXT NOT NULL CHECK (valid_url_name(identifier)),
209
227
    name        TEXT NOT NULL,
210
228
    data        TEXT NOT NULL,
211
229
    assessable  BOOLEAN NOT NULL,