openstackid/database/migrations/Version20210616123839.php
smarcet@gmail.com 5b72c74a74 Passwordlress Flow
* API endpoints for embedded login flow
* unit tests
* UI Tweaks
* Universal login implementation

Signed-off-by: smarcet@gmail.com <smarcet@gmail.com>
Change-Id: Ib09f1486f5d9419ee1df64a9d1c41dc7c9a4a65c
Depends-on: https://review.opendev.org/c/osf/openstackid/+/791306
2021-06-24 18:25:46 -03:00

94 lines
3.9 KiB
PHP

<?php namespace Database\Migrations;
/**
* Copyright 2021 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
use Doctrine\Migrations\AbstractMigration;
use Doctrine\DBAL\Schema\Schema as Schema;
use LaravelDoctrine\Migrations\Schema\Builder;
use LaravelDoctrine\Migrations\Schema\Table;
/**
* Class Version20210616123839
* @package Database\Migrations
*/
class Version20210616123839 extends AbstractMigration
{
/**
* @param Schema $schema
*/
public function up(Schema $schema): void
{
$builder = new Builder($schema);
if (!$builder->hasTable("oauth2_otp")) {
$builder->create("oauth2_otp", function (Table $table) {
$table->bigInteger("id", true, false);
$table->primary("id");
$table->timestamps();
$table->string("value")->setLength(50)->setNotnull(true);
$table->string("connection")->setLength(10)->setNotnull(true);//sms|mail
$table->string("send")->setLength(10)->setNotnull(true);//code|link
$table->text("scope")->setNotnull(false);
$table->string("email")->setLength(50)->setNotnull(false);
$table->string("phone_number")->setLength(50)->setNotnull(false);
$table->string("nonce")->setLength(50)->setNotnull(false);
$table->integer("redeemed_attempts")->setNotnull(true)->setDefault(0);
$table->string("redeemed_from_ip")->setNotnull(false);
$table->string("redirect_url")->setLength(255)->setNotnull(false);
$table->integer('length')->setNotnull(true)->setDefault(6);
// seconds
$table->integer('lifetime')->setNotnull(true)->setDefault(60);
$table->dateTime('redeemed_at')->setNotnull(false);
// FK Optional
$table->unsignedBigInteger("oauth2_client_id", false)->setNotnull(false)->setDefault('NULL');
$table->index("oauth2_client_id", "oauth2_client_id");
$table->foreign("oauth2_client", "oauth2_client_id", "id", ["onDelete" => "CASCADE"]);
$table->unique(["oauth2_client_id", "value"]);
});
}
if ($builder->hasTable("oauth2_client") && !$builder->hasColumn("oauth2_client","otp_enabled")) {
$builder->table('oauth2_client', function (Table $table) {
//
$table->boolean('otp_enabled')->setNotnull(false)->setDefault(0);
// characters
$table->integer('otp_length')->setNotnull(false)->setDefault(6);
// seconds
$table->integer('otp_lifetime')->setNotnull(false);
});
}
}
/**
* @param Schema $schema
*/
public function down(Schema $schema): void
{
$builder = new Builder($schema);
if ($builder->hasTable("oauth2_otp")) {
$builder->drop("oauth2_otp");
}
if ($builder->hasTable("oauth2_client") && $builder->hasColumn("oauth2_client","otp_enabled")) {
$builder->table('oauth2_client', function (Table $table) {
//
$table->dropColumn('otp_enabled');
// characters
$table->dropColumn('otp_length');
// seconds
$table->dropColumn('otp_lifetime');
});
}
}
}