mirror of https://github.com/itsmrval/ltsNinja
68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"math/rand"
|
|
"net/url"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func isLoggedIn(c *gin.Context) bool {
|
|
_, err := c.Cookie("user_id")
|
|
return err == nil
|
|
}
|
|
|
|
func getUserID(c *gin.Context) string {
|
|
userID, _ := c.Cookie("user_id")
|
|
return userID
|
|
}
|
|
|
|
func isValidURL(str string) bool {
|
|
u, err := url.Parse(str)
|
|
return err == nil && u.Scheme != "" && u.Host != ""
|
|
}
|
|
|
|
func generateShortURL() string {
|
|
const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
|
const length = 8
|
|
|
|
rand.Seed(time.Now().UnixNano())
|
|
result := make([]byte, length)
|
|
for i := range result {
|
|
result[i] = charset[rand.Intn(len(charset))]
|
|
}
|
|
return string(result)
|
|
}
|
|
|
|
func (app *App) getUserLinks(userID string) ([]Link, error) {
|
|
rows, err := app.DB.Query("SELECT id, original_url, short_url FROM links WHERE user_id = ?", userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var links []Link
|
|
for rows.Next() {
|
|
var link Link
|
|
err := rows.Scan(&link.ID, &link.OriginalURL, &link.ShortURL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
links = append(links, link)
|
|
}
|
|
|
|
return links, nil
|
|
}
|
|
|
|
func (app *App) createTable() error {
|
|
_, err := app.DB.Exec(`CREATE TABLE IF NOT EXISTS links (
|
|
id TEXT PRIMARY KEY NOT NULL UNIQUE,
|
|
original_url TEXT NOT NULL,
|
|
short_url TEXT NOT NULL UNIQUE,
|
|
user_id TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)`)
|
|
return err
|
|
}
|