You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.2 KiB
Go

package migrations
import (
"crypto/md5"
"crypto/rand"
"crypto/sha1"
"database/sql"
"errors"
"fmt"
"time"
"github.com/pressly/goose"
log "github.com/sirupsen/logrus"
)
func init() {
goose.AddMigration(Up20201214193523, Down20201214193523)
}
func Up20201214193523(tx *sql.Tx) error {
// This code is executed when the migration is applied.
var row *sql.Row
row = tx.QueryRow("SELECT COUNT(*) FROM users WHERE admin=1")
var data int
if err := row.Scan(&data); err != nil {
return err
}
log.Infof("%d admins found\n", data)
if data == 0 {
location, err := time.LoadLocation("Europe/Berlin")
if err != nil {
return err
}
dob, err := time.ParseInLocation(
"2006-01-02",
"1977-08-08",
location,
)
if err != nil {
return err
}
row = tx.QueryRow("SELECT id FROM countries WHERE name='Germany'")
var ccid int
if err := row.Scan(&ccid); err != nil {
return err
}
regid := 0
locid := 0
random64Bytes := make([]byte, 64)
_, err = rand.Read(random64Bytes)
if err != nil {
return err
}
result, err := tx.Exec(`INSERT INTO users (email, password, fname, mname,
lname, suffix, dob, verified, ccid,
regid, locid, listme, codesign, 1024bit, contactinfo, admin, orgadmin,
ttpadmin, adadmin, board, tverify, locadmin, language,
Q1, Q2, Q3, Q4, Q5,
A1, A2, A3, A4, A5,
created, modified, deleted, locked, uniqueID, otphash,
otppin, assurer, assurer_blocked, lastLoginAttempt)
VALUES (?, ?, ?, ?, ?, ?, ?, 0, ?, ?, ?, 0, 1, 0, ?, 1, 0, 0, 0, 0, 0, 0, ?, '', '', '', '', '', '', '', '', '', '', ?,
?, NULL, 0, SHA1(CONCAT(NOW(), ?)), '', 0, 0, 0, NULL)`,
"jandd@cacert.org",
fmt.Sprintf("%x", sha1.Sum([]byte("abcdefghijklmn")),
"Jan", "", "Dittberner", "", dob, ccid, regid, locid, "Somewhere over the rainbow",
time.Now(), time.Now(), fmt.Sprintf("%x", md5.Sum(random64Bytes))))
if err != nil {
return err
}
lastId, err := result.LastInsertId()
if err != nil {
return err
}
log.Infof("new user id is %d", lastId)
}
return errors.New("TODO: implement")
}
func Down20201214193523(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}