@@ -215,6 +215,8 @@ var migrations = []Migration{ | |||
NewMigration("add can close issues via commit in any branch", addCanCloseIssuesViaCommitInAnyBranch), | |||
// v80 -> v81 | |||
NewMigration("add is locked to issues", addIsLockedToIssues), | |||
// v81 -> v82 | |||
NewMigration("update U2F counter type", changeU2FCounterType), | |||
} | |||
// 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 | |||
UserID int64 `xorm:"INDEX"` | |||
Raw []byte | |||
Counter uint32 | |||
Counter uint32 `xorm:"BIGINT"` | |||
CreatedUnix util.TimeStamp `xorm:"INDEX created"` | |||
UpdatedUnix util.TimeStamp `xorm:"INDEX updated"` | |||
} |
@@ -40,6 +40,14 @@ func TestU2FRegistration_UpdateCounter(t *testing.T) { | |||
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) { | |||
assert.NoError(t, PrepareTestDatabase()) | |||
user := AssertExistsAndLoadBean(t, &User{ID: 1}).(*User) |