diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/dbmigrations.go | 51 | ||||
| -rw-r--r-- | internal/models/user.go | 9 |
2 files changed, 60 insertions, 0 deletions
diff --git a/internal/dbmigrations.go b/internal/dbmigrations.go new file mode 100644 index 0000000..e6c11ff --- /dev/null +++ b/internal/dbmigrations.go @@ -0,0 +1,51 @@ +package internal + +import ( + "database/sql" + "fmt" + "os" + + "golang.org/x/crypto/bcrypt" +) + +func Migrate (db *sql.DB, webmaster string, passOne string, passTwo string) { + _, table_check := db.Query("SELECT * FROM logins;") + if table_check != nil { + _, err := db.Exec("CREATE TABLE logins (id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, pass_one TEXT NOT NULL, pass_two TEXT NOT NULL);") + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to create logins table: %v\n", err) + os.Exit(1) + } + + hashOne, errHashOne := bcrypt.GenerateFromPassword([]byte(passOne), 12) + hashTwo, errHashTwo := bcrypt.GenerateFromPassword([]byte(passTwo), 12) + if errHashOne != nil || errHashTwo != nil { + fmt.Fprintf(os.Stderr, "Failed to hash password") + os.Exit(1) + } + + _, err = db.Exec(fmt.Sprintf("INSERT INTO logins (name, pass_one, pass_two) VALUES ('%s', '%s', '%s');", webmaster, hashOne, hashTwo)) + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to add webmaster to logins table: %v\n", err) + os.Exit(1) + } + } + + _, table_check = db.Query("SELECT * FROM posts;") + if table_check != nil { + _, err := db.Exec("CREATE TABLE posts (id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES logins(id), time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, content TEXT NOT NULL);") + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to create posts table: %v\n", err) + os.Exit(1) + } + } + + + _, table_check = db.Query("SELECT * FROM cookies;") + if table_check != nil { + _, err := db.Exec("CREATE TABLE cookies (id SERIAL PRIMARY KEY, content VARCHAR(255) NOT NULL, user_id INTEGER REFERENCES logins(id), expiration TIMESTAMP);") + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to create cookies table: %v\n", err) + } + } +} diff --git a/internal/models/user.go b/internal/models/user.go new file mode 100644 index 0000000..8753810 --- /dev/null +++ b/internal/models/user.go @@ -0,0 +1,9 @@ +package models + +type User struct { + Id int + Name string + Time string + PassOne string + PassTwo string +} |
