-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmysql.go
75 lines (66 loc) · 2.41 KB
/
mysql.go
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package main
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"github.com/glauth/glauth/v2/pkg/handler"
"github.com/glauth/glauth/v2/pkg/plugins"
)
type MysqlBackend struct {
}
func NewMySQLHandler(opts ...handler.Option) handler.Handler {
backend := MysqlBackend{}
return plugins.NewDatabaseHandler(backend, opts...)
}
func (b MysqlBackend) GetDriverName() string {
return "mysql"
}
func (b MysqlBackend) GetPrepareSymbol() string {
return "?"
}
// Create db/schema if necessary
func (b MysqlBackend) CreateSchema(db *sql.DB) {
statement, _ := db.Prepare(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(64) NOT NULL,
uidnumber INTEGER NOT NULL,
primarygroup INTEGER NOT NULL,
othergroups VARCHAR(1024) DEFAULT '',
givenname VARCHAR(64) DEFAULT '',
sn VARCHAR(64) DEFAULT '',
mail VARCHAR(254) DEFAULT '',
loginshell VARCHAR(64) DEFAULT '',
homedirectory VARCHAR(64) DEFAULT '',
disabled SMALLINT DEFAULT 0,
passsha256 VARCHAR(64) DEFAULT '',
passbcrypt VARCHAR(64) DEFAULT '',
otpsecret VARCHAR(64) DEFAULT '',
yubikey VARCHAR(128) DEFAULT '',
sshkeys TEXT DEFAULT '',
custattr TEXT DEFAULT '{}')
`)
statement.Exec()
statement, _ = db.Prepare("CREATE UNIQUE INDEX idx_user_name on users(name)")
statement.Exec()
statement, _ = db.Prepare("CREATE TABLE IF NOT EXISTS ldapgroups (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(64) NOT NULL, gidnumber INTEGER NOT NULL)")
statement.Exec()
statement, _ = db.Prepare("CREATE UNIQUE INDEX idx_group_name on ldapgroups(name)")
statement.Exec()
statement, _ = db.Prepare("CREATE TABLE IF NOT EXISTS includegroups (id INTEGER AUTO_INCREMENT PRIMARY KEY, parentgroupid INTEGER NOT NULL, includegroupid INTEGER NOT NULL)")
statement.Exec()
statement, _ = db.Prepare("CREATE TABLE IF NOT EXISTS capabilities (id INTEGER AUTO_INCREMENT PRIMARY KEY, userid INTEGER NOT NULL, action VARCHAR(128) NOT NULL, object VARCHAR(128) NOT NULL)")
statement.Exec()
}
// Migrate schema if necessary
func (b MysqlBackend) MigrateSchema(db *sql.DB, checker func(*sql.DB, string, string) bool) {
if !checker(db, "users", "sshkeys") {
statement, _ := db.Prepare("ALTER TABLE users ADD COLUMN sshkeys TEXT DEFAULT ''")
statement.Exec()
}
if checker(db, "groups", "name") {
statement, _ := db.Prepare("DROP TABLE ldapgroups")
statement.Exec()
statement, _ = db.Prepare("ALTER TABLE groups RENAME ldapgroups")
statement.Exec()
}
}