diff --git a/app/api.go b/app/api.go index 048bc2a..d2a5655 100644 --- a/app/api.go +++ b/app/api.go @@ -41,12 +41,18 @@ func (a API) Error(description string, status int) { func (a API) sendMedia(d *devianter.Deviation) { mediaUrl, name := devianter.UrlFromMedia(d.Media) a.main.SetFilename(name) - if len(mediaUrl) != 0 { + return + } + + if CFG.Proxy { mediaUrl = mediaUrl[21:] dot := strings.Index(mediaUrl, ".") a.main.Writer.Header().Del("Content-Type") a.main.DownloadAndSendMedia(mediaUrl[:dot], mediaUrl[dot+11:]) + } else { + a.main.Writer.Header().Add("Location", mediaUrl) + a.main.Writer.WriteHeader(302) } } diff --git a/app/cache.go b/app/cache.go index f9225be..e03db67 100644 --- a/app/cache.go +++ b/app/cache.go @@ -38,17 +38,7 @@ func (s skunkyart) DownloadAndSendMedia(subdomain, path string) { fileName := sha1.Sum([]byte(subdomain + path)) filePath := CFG.Cache.Path + "/" + hex.EncodeToString(fileName[:]) - mx.Lock() - if tempFS[fileName] == nil { - tempFS[fileName] = &file{} - } - mx.Unlock() - - if tempFS[fileName].Content != nil { - response = tempFS[fileName].Content - tempFS[fileName].Score += 2 - break - } else { + c := func() { file, err := os.Open(filePath) if err != nil { if dwnld := Download(url.String()); dwnld.Status == 200 && dwnld.Headers["Content-Type"][0][:5] == "image" { @@ -63,27 +53,44 @@ func (s skunkyart) DownloadAndSendMedia(subdomain, path string) { try(e) response = file } + } - go func() { - defer restore() + if CFG.Cache.MemCache { + mx.Lock() + if tempFS[fileName] == nil { + tempFS[fileName] = &file{} + } + mx.Unlock() - mx.RLock() - tempFS[fileName].Content = response - mx.RUnlock() + if tempFS[fileName].Content != nil { + response = tempFS[fileName].Content + tempFS[fileName].Score += 2 + break + } else { + c() + go func() { + defer restore() - for { - time.Sleep(1 * time.Minute) + mx.RLock() + tempFS[fileName].Content = response + mx.RUnlock() - mx.Lock() - if tempFS[fileName].Score <= 0 { - delete(tempFS, fileName) + for { + time.Sleep(1 * time.Minute) + + mx.Lock() + if tempFS[fileName].Score <= 0 { + delete(tempFS, fileName) + mx.Unlock() + return + } + tempFS[fileName].Score-- mx.Unlock() - return } - tempFS[fileName].Score-- - mx.Unlock() - } - }() + }() + } + } else { + c() } case CFG.Proxy: dwnld := Download(url.String()) @@ -112,6 +119,7 @@ func InitCacheSystem() { println(err.Error()) } + var total int64 for _, file := range dir { fileName := c.Path + "/" + file.Name() fileInfo, err := file.Info() @@ -128,9 +136,15 @@ func InitCacheSystem() { } } - if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize { - try(os.RemoveAll(fileName)) - } + total += fileInfo.Size() + // if c.MaxSize != 0 && fileInfo.Size() > c.MaxSize { + // try(os.RemoveAll(fileName)) + // } + } + + if c.MaxSize != 0 && total > c.MaxSize { + try(os.RemoveAll(c.Path)) + os.Mkdir(c.Path, 0700) } time.Sleep(time.Second * time.Duration(c.UpdateInterval)) diff --git a/app/config.go b/app/config.go index 2ba39a9..813453c 100644 --- a/app/config.go +++ b/app/config.go @@ -12,12 +12,13 @@ import ( ) var Release struct { - Version string + Version string Description string } type cache_config struct { Enabled bool + MemCache bool `json:"memcache"` Path string MaxSize int64 `json:"max-size"` Lifetime string @@ -93,9 +94,9 @@ func ExecuteConfig() { About = instanceAbout{ Proxy: CFG.Proxy, - Nsfw: CFG.Nsfw, + Nsfw: CFG.Nsfw, } - + static.StaticPath = CFG.StaticPath devianter.UserAgent = CFG.UserAgent } diff --git a/app/wrapper.go b/app/wrapper.go index 5cac175..5fe1dde 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -36,13 +36,12 @@ func (s skunkyart) GRUser() { for _, x := range g.Gruser.Page.Modules { switch x.Name { case "about", "group_about": - switch g.Owner.Group { - case true: + if g.Owner.Group { var about = &x.ModuleData.GroupAbout group.Group = true group.CreationDate = x.ModuleData.GroupAbout.FoundatedAt.UTC().String() group.About.DescriptionFormatted = ParseDescription(about.Description) - case false: + } else if false { group.About.A = x.ModuleData.About var about = &group.About.A group.CreationDate = time.Unix(time.Now().Unix()-x.ModuleData.About.RegDate, 0).UTC().String() @@ -186,6 +185,14 @@ func (s skunkyart) Deviation(author, postname string) { return } + if post.Post.Deviation.NSFW { + s.Writer.WriteHeader(403) + wr(s.Writer, `