]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1354589 - schema changes only
authorDylan William Hardison <dylan@hardison.net>
Thu, 15 Nov 2018 14:14:33 +0000 (09:14 -0500)
committerGitHub <noreply@github.com>
Thu, 15 Nov 2018 14:14:33 +0000 (09:14 -0500)
Bugzilla/DB/Schema.pm
Bugzilla/Install/DB.pm

index e1c19fa51bea075361c44414e3dd83acced3654f..d2b0fbdeb8bc4ecb31ed92e110557152b4db385a 100644 (file)
@@ -1826,6 +1826,164 @@ use constant ABSTRACT_SCHEMA => {
             user_user_request_log_user_id_idx => ['user_id'],
         ],
     },
+
+    # OAuth2 Tables
+    # -------------
+
+    oauth2_client => {
+        FIELDS => [
+            id            => {TYPE => 'varchar(255)', NOTNULL => 1, PRIMARYKEY => 1},
+            description   => {TYPE => 'varchar(255)', NOTNULL => 1},
+            secret        => {TYPE => 'varchar(255)', NOTNULL => 1},
+            active        => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'},
+            last_modified => {TYPE => 'DATETIME'}
+        ]
+    },
+
+    oauth2_scope => {
+        FIELDS => [
+            id          => {TYPE => 'INT3', NOTNULL => 1, PRIMARYKEY => 1},
+            description => {TYPE => 'varchar(255)', NOTNULL => 1}
+        ]
+    },
+
+    oauth2_client_scope => {
+        FIELDS => [
+            client_id => {TYPE => 'varchar(255)', NOTNULL => 1,
+                          REFERENCES => {TABLE  => 'oauth2_client',
+                                         COLUMN => 'id',
+                                         UPDATE => 'CASCADE',
+                                         DELETE => 'CASCADE'}},
+            scope_id  => {TYPE => 'INT3', NOTNULL => 1,
+                          REFERENCES => {TABLE  => 'oauth2_scope',
+                                         COLUMN => 'id',
+                                         UPDATE => 'CASCADE',
+                                         DELETE => 'CASCADE'}},
+            allowed   => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'}
+        ],
+        INDEXES => [
+            oauth2_client_scope_idx => {FIELDS => ['client_id', 'scope_id'],
+                                        TYPE => 'UNIQUE'},
+        ]
+    },
+
+    oauth2_auth_code => {
+        FIELDS => [
+            auth_code    => {TYPE => 'varchar(255)', NOTNULL => 1, PRIMARYKEY => 1},
+            client_id    => {TYPE => 'varchar(255)', NOTNULL => 1,
+                             REFERENCES => {TABLE  => 'oauth2_client',
+                                            COLUMN => 'id',
+                                            UPDATE => 'CASCADE',
+                                            DELETE => 'CASCADE'}},
+            user_id      => {TYPE => 'INT3', NOTNULL => 1,
+                             REFERENCES => {TABLE  => 'profiles',
+                                            COLUMN => 'userid',
+                                            UPDATE => 'CASCADE',
+                                            DELETE => 'CASCADE'}},
+            expires      => {TYPE => 'DATETIME', NOTNULL => 1},
+            redirect_uri => {TYPE => 'TINYTEXT', NOTNULL => 1},
+            verified     => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
+        ]
+    },
+
+    oauth2_auth_code_scope => {
+        FIELDS => [
+            auth_code => {TYPE => 'varchar(255)', NOTNULL => 1,
+                          REFERENCES => {TABLE  => 'oauth2_auth_code',
+                                         COLUMN => 'auth_code',
+                                         UPDATE => 'CASCADE',
+                                         DELETE => 'CASCADE'}},
+            scope_id  => {TYPE => 'INT3', NOTNULL => 1,
+                          REFERENCES => {TABLE  => 'oauth2_scope',
+                                         COLUMN => 'id',
+                                         UPDATE => 'CASCADE',
+                                         DELETE => 'CASCADE'}},
+            allowed   => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
+        ],
+        INDEXES => [
+            oauth2_auth_code_scope_idx => {FIELDS => ['auth_code', 'scope_id'],
+                                           TYPE => 'UNIQUE'},
+        ]
+    },
+
+    oauth2_access_token => {
+        FIELDS => [
+            access_token  => {TYPE => 'varchar(255)', NOTNULL => 1, PRIMARYKEY => 1},
+            refresh_token => {TYPE => 'varchar(255)'},
+            client_id     => {TYPE => 'varchar(255)', NOTNULL => 1,
+                              REFERENCES => {TABLE  => 'oauth2_client',
+                                             COLUMN => 'id',
+                                             UPDATE => 'CASCADE',
+                                             DELETE => 'CASCADE'}},
+            user_id       => {TYPE => 'INT3', NOTNULL => 1,
+                              REFERENCES => {TABLE  => 'profiles',
+                                             COLUMN => 'userid',
+                                             UPDATE => 'CASCADE',
+                                             DELETE => 'CASCADE'}},
+            expires       => {TYPE => 'DATETIME', NOTNULL => 1},
+        ]
+    },
+
+    oauth2_access_token_scope => {
+        FIELDS => [
+            access_token => {TYPE => 'varchar(255)', NOTNULL => 1,
+                             REFERENCES => {TABLE  => 'oauth2_access_token',
+                                            COLUMN => 'access_token',
+                                            UPDATE => 'CASCADE',
+                                            DELETE => 'CASCADE'}},
+            scope_id     => {TYPE => 'INT3', NOTNULL => 1,
+                             REFERENCES => {TABLE  => 'oauth2_scope',
+                                            COLUMN => 'id',
+                                            UPDATE => 'CASCADE',
+                                            DELETE => 'CASCADE'}},
+            allowed      => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
+        ],
+        INDEXES => [
+            oauth2_access_token_scope_idx => {FIELDS => ['access_token', 'scope_id'],
+                                              TYPE => 'UNIQUE'}
+        ]
+    },
+
+    oauth2_refresh_token => {
+        FIELDS => [
+            refresh_token => {TYPE => 'varchar(255)', NOTNULL => 1, PRIMARYKEY => 1},
+            access_token  => {TYPE => 'varchar(255)', NOTNULL => 1,
+                              REFERENCES => {TABLE  => 'oauth2_access_token',
+                                             COLUMN => 'access_token',
+                                             UPDATE => 'CASCADE',
+                                             DELETE => 'CASCADE'}},
+            client_id     => {TYPE => 'varchar(255)', NOTNULL => 1,
+                              REFERENCES => {TABLE  => 'oauth2_client',
+                                             COLUMN => 'id',
+                                             UPDATE => 'CASCADE',
+                                             DELETE => 'CASCADE'}},
+            user_id       => {TYPE => 'INT3', NOTNULL => 1,
+                              REFERENCES => {TABLE  => 'profiles',
+                                             COLUMN => 'userid',
+                                             UPDATE => 'CASCADE',
+                                             DELETE => 'CASCADE'}}
+        ]
+    },
+
+    oauth2_refresh_token_scope => {
+        FIELDS => [
+            refresh_token => {TYPE => 'varchar(255)', NOTNULL => 1,
+                              REFERENCES => {TABLE  => 'oauth2_refresh_token',
+                                             COLUMN => 'refresh_token',
+                                             UPDATE => 'CASCADE',
+                                             DELETE => 'CASCADE'}},
+            scope_id      => {TYPE => 'INT3', NOTNULL => 1,
+                              REFERENCES => {TABLE  => 'oauth2_scope',
+                                             COLUMN => 'id',
+                                             UPDATE => 'CASCADE',
+                                             DELETE => 'CASCADE'}},
+            allowed       => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
+        ],
+        INDEXES => [
+            oauth2_refresh_token_scope_idx => {FIELDS => ['refresh_token', 'scope_id'],
+                                               TYPE => 'UNIQUE'}
+        ]
+    }
 };
 
 # Foreign Keys are added in Bugzilla::DB::bz_add_field_tables
index 2e5ae5ff2f0a073919d843169218a5897ddce1fa..50c5d97cdbdf31c158493ad84326d889d4abaae2 100644 (file)
@@ -775,6 +775,9 @@ sub update_table_definitions {
                        {TYPE => 'FULLTEXT', FIELDS => ['realname']});
     _migrate_nicknames();
 
+    # Bug 1354589 - dkl@mozilla.com
+    _populate_oauth2_scopes();
+
     ################################################################
     # New --TABLE-- changes should go *** A B O V E *** this point #
     ################################################################
@@ -3935,6 +3938,17 @@ sub _migrate_preference_categories {
     }
 }
 
+sub _populate_oauth2_scopes {
+  my $dbh = Bugzilla->dbh;
+
+  # if there are no scopes, then we're creating a database from scratch
+  my ($scope_count)
+    = $dbh->selectrow_array('SELECT COUNT(*) FROM oauth2_scope');
+  return if $scope_count;
+  $dbh->do(
+    "INSERT INTO oauth2_scope (id, description) VALUES (1, 'user:read')");
+}
+
 1;
 
 __END__