2017-01-17 22:38:35 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2017-05-21 20:54:42 +00:00
|
|
|
"bufio"
|
|
|
|
"fmt"
|
|
|
|
"log"
|
2017-01-17 22:38:35 +00:00
|
|
|
"os"
|
|
|
|
"os/signal"
|
2017-05-21 20:54:42 +00:00
|
|
|
"path"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
2017-01-17 22:38:35 +00:00
|
|
|
"syscall"
|
|
|
|
|
2017-01-19 01:00:09 +00:00
|
|
|
"github.com/gin-gonic/gin"
|
2017-01-17 22:38:35 +00:00
|
|
|
"github.com/robfig/cron"
|
|
|
|
|
|
|
|
"git.1750studios.com/AniNite/SocialDragon/config"
|
|
|
|
"git.1750studios.com/AniNite/SocialDragon/database"
|
2017-05-13 21:29:31 +00:00
|
|
|
"git.1750studios.com/AniNite/SocialDragon/folder"
|
2017-01-17 22:38:35 +00:00
|
|
|
"git.1750studios.com/AniNite/SocialDragon/instagram"
|
|
|
|
"git.1750studios.com/AniNite/SocialDragon/snapchat"
|
|
|
|
"git.1750studios.com/AniNite/SocialDragon/twitter"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
config.LoadConfig(os.Getenv("HOME") + "/.socialdragon.toml")
|
2017-01-19 18:49:53 +00:00
|
|
|
database.InitDb(SendUpdate)
|
2017-01-17 22:38:35 +00:00
|
|
|
|
|
|
|
c := cron.New()
|
2017-01-20 17:18:19 +00:00
|
|
|
if config.C.Snapchat.UserName != "" {
|
|
|
|
c.AddFunc("@every 30s", snapchat.LoadNewSnaps)
|
|
|
|
}
|
|
|
|
if config.C.Instagram.Tag != "" {
|
|
|
|
c.AddFunc("@every 30s", instagram.LoadNewInstas)
|
|
|
|
}
|
2017-05-13 21:29:31 +00:00
|
|
|
if config.C.Folder.Folder != "" {
|
|
|
|
c.AddFunc("@every 30s", folder.LoadNewFolders)
|
|
|
|
}
|
2017-01-17 22:38:35 +00:00
|
|
|
c.Start()
|
|
|
|
|
2017-01-20 17:18:19 +00:00
|
|
|
if len(config.C.Twitter.Filter) != 0 {
|
|
|
|
go twitter.LoadNewTweets()
|
|
|
|
}
|
2017-01-19 01:00:09 +00:00
|
|
|
go setupGin()
|
2017-01-17 22:38:35 +00:00
|
|
|
|
|
|
|
ch := make(chan os.Signal)
|
|
|
|
signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
|
2017-01-19 01:00:09 +00:00
|
|
|
|
2017-01-17 22:38:35 +00:00
|
|
|
<-ch
|
|
|
|
|
|
|
|
twitter.Stop()
|
2017-05-21 20:54:42 +00:00
|
|
|
|
|
|
|
exportAndDeleteImages()
|
2017-01-17 22:38:35 +00:00
|
|
|
}
|
2017-01-18 18:47:55 +00:00
|
|
|
|
|
|
|
func setupGin() {
|
|
|
|
router := gin.Default()
|
2017-01-19 01:00:09 +00:00
|
|
|
router.GET("/", renderHomepage)
|
2017-01-18 18:47:55 +00:00
|
|
|
|
2017-01-19 01:00:09 +00:00
|
|
|
router.GET("/admin", func(c *gin.Context) { c.Redirect(301, "/admin/inbox") })
|
|
|
|
router.GET("/admin/inbox", renderAdminInbox)
|
|
|
|
router.GET("/admin/approved", renderAdminApproved)
|
|
|
|
router.GET("/admin/rejected", renderAdminRejected)
|
2017-01-18 18:47:55 +00:00
|
|
|
|
2017-01-20 15:00:56 +00:00
|
|
|
router.GET("/admin/stats", stats)
|
2017-01-20 01:20:31 +00:00
|
|
|
router.POST("/admin/approve/:id", approveSnap)
|
|
|
|
router.POST("/admin/reject/:id", rejectSnap)
|
|
|
|
|
2017-01-19 01:00:09 +00:00
|
|
|
router.GET("/ws", func(c *gin.Context) { wsHandler(c.Writer, c.Request) })
|
2017-05-12 12:03:21 +00:00
|
|
|
router.GET("/listSnaps", listSnaps)
|
2017-01-18 18:47:55 +00:00
|
|
|
|
2017-01-20 00:21:44 +00:00
|
|
|
router.LoadHTMLGlob(config.C.TemplatesDirectory + "/*.html")
|
2017-01-19 01:00:09 +00:00
|
|
|
router.Static("/static", config.C.AssetsDirectory)
|
|
|
|
router.Static(config.C.ContentWebDirectory, config.C.ContentDirectory)
|
|
|
|
router.Run(config.C.BindAddress)
|
2017-01-18 18:47:55 +00:00
|
|
|
}
|
2017-05-21 20:54:42 +00:00
|
|
|
|
|
|
|
func exportAndDeleteImages() {
|
|
|
|
conf := askForConfirmationNo("Do you want to export and delete the images from the database?")
|
|
|
|
if conf {
|
|
|
|
var ITs []database.Item
|
|
|
|
database.Db.Find(&ITs)
|
|
|
|
for _, IT := range ITs {
|
|
|
|
old := path.Join(path.Join(config.C.ContentDirectory, ".."), IT.Path)
|
|
|
|
new := path.Join(path.Join(config.C.ContentDirectory, ".."), "export")
|
|
|
|
state := "unknown"
|
|
|
|
if IT.State == database.Approved {
|
|
|
|
state = "approved"
|
|
|
|
} else if IT.State == database.Rejected {
|
|
|
|
state = "rejected"
|
|
|
|
} else if IT.State == database.Inbox {
|
|
|
|
state = "inbox"
|
|
|
|
}
|
|
|
|
new = path.Join(new, state)
|
|
|
|
os.MkdirAll(new, 0755)
|
|
|
|
paths := strings.Split(IT.Path, ".")
|
|
|
|
str := strconv.FormatUint(uint64(IT.UserID), 10) + "-" + string(IT.OriginalID) + "." + paths[len(paths)-1]
|
|
|
|
new = path.Join(new, str)
|
|
|
|
os.Rename(old, new)
|
|
|
|
database.Db.Delete(&IT)
|
|
|
|
}
|
|
|
|
os.RemoveAll(config.C.ContentDirectory)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func askForConfirmationNo(s string) bool {
|
|
|
|
reader := bufio.NewReader(os.Stdin)
|
|
|
|
fmt.Printf("%s [y/N]: ", s)
|
|
|
|
response, err := reader.ReadString('\n')
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
response = strings.ToLower(strings.TrimSpace(response))
|
|
|
|
if response == "y" || response == "yes" {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|