Can create db and working on login
This commit is contained in:
parent
6020624ed9
commit
925318a0be
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
.idea
|
.idea
|
||||||
*.iml
|
*.iml
|
||||||
|
*.db3
|
||||||
|
89
database.go
89
database.go
@ -4,71 +4,88 @@ import (
|
|||||||
"database/sql"
|
"database/sql"
|
||||||
"embed"
|
"embed"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/mattn/go-sqlite3"
|
_ "github.com/mattn/go-sqlite3"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"strconv"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:embed migrations/*.sql
|
//go:embed migrations/*.sql
|
||||||
var migrations embed.FS
|
var embeddedMigrations embed.FS
|
||||||
|
|
||||||
func openDatabase() *sql.DB {
|
func openDatabase() *sql.DB {
|
||||||
// Initialize the database connection
|
// Initialize the database connection
|
||||||
db, err := sqlite3.Open("videos.db")
|
db, err := sql.Open("sqlite3", "videos.db3")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error opening database: %v\n", err)
|
log.Fatalf("error opening database: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read all migrations
|
||||||
|
migrationFiles, err := embeddedMigrations.ReadDir("migrations")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error reading migration files: %v", err)
|
||||||
|
}
|
||||||
|
var migrations = make(map[int]string)
|
||||||
|
latestVersion := 0
|
||||||
|
for _, f := range migrationFiles {
|
||||||
|
versionStr := f.Name()
|
||||||
|
version, err := strconv.Atoi(strings.SplitN(versionStr, "_", 2)[0])
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("invalid version number for migration script: %v", err)
|
||||||
|
}
|
||||||
|
migrations[version] = versionStr
|
||||||
|
latestVersion = max(latestVersion, version)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get current migration version from user_version
|
// Get current migration version from user_version
|
||||||
var currentVersion int
|
var currentVersion int
|
||||||
err = db.QueryRow("PRAGMA user_version").Scan(¤tVersion)
|
err = db.QueryRow("PRAGMA user_version").Scan(¤tVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error getting current version: %v\n", err)
|
log.Fatalf("error getting current version: %v", err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
|
log.Printf("Current database migration version is %d, latest version is %d", currentVersion, latestVersion)
|
||||||
|
|
||||||
// Read all migrations
|
// If we are no up-to-date, bring the db up-to-date
|
||||||
migrationFiles, err := migrations.ReadDir(migrationDir)
|
for currentVersion != latestVersion {
|
||||||
|
targetVersion := currentVersion + 1
|
||||||
|
migrationFile := migrations[targetVersion]
|
||||||
|
log.Printf("migration to version %s", migrationFile)
|
||||||
|
migrationScript, err := embeddedMigrations.ReadFile("migrations/" + migrationFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error reading migration files: %v\n", err)
|
log.Fatalf("error opening migration script %s: %v", migrationScript, err)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort and process each migration file (assuming filenames are versioned like 1.sql, 2.sql, etc.)
|
tx, err := db.Begin()
|
||||||
for _, f := range migrationFiles {
|
|
||||||
if !f.IsDir() {
|
|
||||||
versionStr := f.Name()
|
|
||||||
version, err := extractVersion(versionStr)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error extracting version from %s: %v\n", versionStr, err)
|
log.Fatalf("error beginning transaction: %v", err)
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if version > currentVersion {
|
_, err = tx.Exec(string(migrationScript))
|
||||||
// Apply the migration
|
|
||||||
sqlContent, err := readMigrationFile(f.Name())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error reading migration file %s: %v\n", f.Name(), err)
|
rollbackIgnoringErrors(tx)
|
||||||
os.Exit(1)
|
log.Fatalf("error performing migration: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = db.Exec(sqlContent)
|
_, err = tx.Exec(fmt.Sprintf("PRAGMA user_version = %d", targetVersion))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error applying migration %d: %v\n", version, err)
|
rollbackIgnoringErrors(tx)
|
||||||
os.Exit(1)
|
log.Fatalf("error updating version: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the user_version
|
err = tx.Commit()
|
||||||
_, err = db.Exec(fmt.Sprintf("PRAGMA user_version=%d", version))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Error updating user_version to %d: %v\n", version, err)
|
log.Fatalf("error commiting transaction: %v", err)
|
||||||
os.Exit(1)
|
}
|
||||||
|
currentVersion = targetVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Applied migration %d successfully\n", version)
|
log.Println("All migrations applied")
|
||||||
}
|
return db
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
func rollbackIgnoringErrors(tx *sql.Tx) {
|
||||||
fmt.Println("All migrations applied")
|
err := tx.Rollback()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("error rolling back: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
29
main.go
29
main.go
@ -1,6 +1,35 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/base64"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
db := openDatabase()
|
db := openDatabase()
|
||||||
defer db.Close()
|
defer db.Close()
|
||||||
|
|
||||||
|
username := os.Getenv("VIVAPLUS_USER")
|
||||||
|
password, err := base64.StdEncoding.DecodeString(os.Getenv("VIVAPLUS_PASS"))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error decoding password: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
form := url.Values{}
|
||||||
|
form.Set("email", username)
|
||||||
|
form.Set("password", string(password))
|
||||||
|
|
||||||
|
// First fetch csrf token by doing a get. It is found in a meta tag with name="csrf-token"
|
||||||
|
|
||||||
|
resp, err := http.Post("https://vivaplus.tv/supporters/sign_in", "application/x-www-form-urlencoded;charset=UTF-8", strings.NewReader(form.Encode()))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error logging in: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Status code: %d", resp.StatusCode)
|
||||||
|
//println(resp)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user