aboutsummaryrefslogtreecommitdiffstats
path: root/models/migrations/v1_24/v320.go
blob: 1d34444826f0f5fe31aa4291ed295787e8d1a057 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package v1_24 //nolint

import (
	"code.gitea.io/gitea/modules/json"

	"xorm.io/xorm"
)

func MigrateSkipTwoFactor(x *xorm.Engine) error {
	type LoginSource struct {
		TwoFactorPolicy string `xorm:"two_factor_policy NOT NULL DEFAULT ''"`
	}
	_, err := x.SyncWithOptions(
		xorm.SyncOptions{
			IgnoreConstrains: true,
			IgnoreIndices:    true,
		},
		new(LoginSource),
	)
	if err != nil {
		return err
	}

	type LoginSourceSimple struct {
		ID  int64
		Cfg string
	}

	var loginSources []LoginSourceSimple
	err = x.Table("login_source").Find(&loginSources)
	if err != nil {
		return err
	}

	for _, source := range loginSources {
		if source.Cfg == "" {
			continue
		}

		var cfg map[string]any
		err = json.Unmarshal([]byte(source.Cfg), &cfg)
		if err != nil {
			return err
		}

		if cfg["SkipLocalTwoFA"] == true {
			_, err = x.Exec("UPDATE login_source SET two_factor_policy = 'skip' WHERE id = ?", source.ID)
			if err != nil {
				return err
			}
		}
	}
	return nil
}