@@ -215,6 +215,8 @@ var migrations = []Migration{ | |||||
NewMigration("add can close issues via commit in any branch", addCanCloseIssuesViaCommitInAnyBranch), | NewMigration("add can close issues via commit in any branch", addCanCloseIssuesViaCommitInAnyBranch), | ||||
// v80 -> v81 | // v80 -> v81 | ||||
NewMigration("add is locked to issues", addIsLockedToIssues), | NewMigration("add is locked to issues", addIsLockedToIssues), | ||||
// v81 -> v82 | |||||
NewMigration("update U2F counter type", changeU2FCounterType), | |||||
} | } | ||||
// Migrate database to current version | // Migrate database to current version | ||||
@@ -0,0 +1,32 @@ | |||||
// Copyright 2019 The Gitea Authors. All rights reserved. | |||||
// Use of this source code is governed by a MIT-style | |||||
// license that can be found in the LICENSE file. | |||||
package migrations | |||||
import ( | |||||
"fmt" | |||||
"github.com/go-xorm/xorm" | |||||
) | |||||
func changeU2FCounterType(x *xorm.Engine) error { | |||||
var err error | |||||
switch x.Dialect().DriverName() { | |||||
case "tidb": | |||||
fallthrough | |||||
case "mysql": | |||||
_, err = x.Exec("ALTER TABLE `u2f_registration` MODIFY `counter` BIGINT") | |||||
case "postgres": | |||||
_, err = x.Exec("ALTER TABLE `u2f_registration` ALTER COLUMN `counter` SET DATA TYPE bigint") | |||||
case "mssql": | |||||
_, err = x.Exec("ALTER TABLE `u2f_registration` ALTER COLUMN `counter` BIGINT") | |||||
} | |||||
if err != nil { | |||||
return fmt.Errorf("Error changing u2f_registration counter column type: %v", err) | |||||
} | |||||
return nil | |||||
} |
@@ -17,7 +17,7 @@ type U2FRegistration struct { | |||||
Name string | Name string | ||||
UserID int64 `xorm:"INDEX"` | UserID int64 `xorm:"INDEX"` | ||||
Raw []byte | Raw []byte | ||||
Counter uint32 | |||||
Counter uint32 `xorm:"BIGINT"` | |||||
CreatedUnix util.TimeStamp `xorm:"INDEX created"` | CreatedUnix util.TimeStamp `xorm:"INDEX created"` | ||||
UpdatedUnix util.TimeStamp `xorm:"INDEX updated"` | UpdatedUnix util.TimeStamp `xorm:"INDEX updated"` | ||||
} | } | ||||
@@ -40,6 +40,14 @@ func TestU2FRegistration_UpdateCounter(t *testing.T) { | |||||
AssertExistsIf(t, true, &U2FRegistration{ID: 1, Counter: 1}) | AssertExistsIf(t, true, &U2FRegistration{ID: 1, Counter: 1}) | ||||
} | } | ||||
func TestU2FRegistration_UpdateLargeCounter(t *testing.T) { | |||||
assert.NoError(t, PrepareTestDatabase()) | |||||
reg := AssertExistsAndLoadBean(t, &U2FRegistration{ID: 1}).(*U2FRegistration) | |||||
reg.Counter = 0xffffffff | |||||
assert.NoError(t, reg.UpdateCounter()) | |||||
AssertExistsIf(t, true, &U2FRegistration{ID: 1, Counter: 0xffffffff}) | |||||
} | |||||
func TestCreateRegistration(t *testing.T) { | func TestCreateRegistration(t *testing.T) { | ||||
assert.NoError(t, PrepareTestDatabase()) | assert.NoError(t, PrepareTestDatabase()) | ||||
user := AssertExistsAndLoadBean(t, &User{ID: 1}).(*User) | user := AssertExistsAndLoadBean(t, &User{ID: 1}).(*User) | ||||