diff --git a/config.example.yml b/config.example.yml deleted file mode 100644 index 735eac3..0000000 --- a/config.example.yml +++ /dev/null @@ -1,15 +0,0 @@ -# This is required for the API. See https://github.com/Nandaka/PixivUtil2/wiki#pixiv-login-using-cookie -# Please keep this carefully, there is a risk of account theft if somebody got your cookie. -# It is better to use a decoy account, instead of using your main account's cookie. -PHPSESSID: XXXXXXXX_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX - -Port: 8080 - -UserAgent: Mozilla/5.0 - -# Number of items in each list page -# This is going to be deprecated -PageItems: 30 - -# Default image proxy server. Recommended since Pixiv doesn't like you accessing images on their server. -ImageProxyServer: px2.rainchan.win diff --git a/configs/config.go b/configs/config.go index 99a3e46..358109b 100644 --- a/configs/config.go +++ b/configs/config.go @@ -1,32 +1,44 @@ package configs import ( - "embed" - "gopkg.in/yaml.v3" + "errors" "os" ) -var Config embed.FS -var Configs Conf +var Token, Port, UserAgent, ProxyServer string -type Conf struct { - PHPSESSID string `yaml:"PHPSESSID"` - Port string `yaml:"Port"` - UserAgent string `yaml:"UserAgent"` - PageItems int `yaml:"PageItems"` - ImageProxyServer string `yaml:"ImageProxyServer"` +func parseEnv(key string) (string, error) { + value, ok := os.LookupEnv(key) + + if !ok { + return "", errors.New("Failed to get environment variable" + key) + } + + return value, nil } -func (conf *Conf) ReadConfig() { - f, err := os.Open("config.yml") - if err != nil { - panic(err) - } - defer f.Close() +func parseEnvWithDefault(key string, defaultValue string) string { + value, ok := os.LookupEnv(key) - decoder := yaml.NewDecoder(f) - err = decoder.Decode(conf) - if err != nil { - panic(err) + if !ok { + return defaultValue } + + return value +} + +func ParseConfig() error { + var err error + + Token, err = parseEnv("PIXIVFE_TOKEN") + + if err != nil { + return err + } + + Port = parseEnvWithDefault("PIXIVFE_PORT", "8080") + UserAgent = parseEnvWithDefault("PIXIVFE_USERAGENT", "Mozilla/5.0") + ProxyServer = parseEnvWithDefault("PIXIVFE_IMAGEPROXY", "px2.rainchan.win") + + return nil } diff --git a/handler/pixiv.go b/handler/pixiv.go index 6215cea..39d52d1 100644 --- a/handler/pixiv.go +++ b/handler/pixiv.go @@ -7,7 +7,6 @@ import ( "io/ioutil" "math" "net/http" - "pixivfe/configs" "pixivfe/models" "sort" "strconv" @@ -258,7 +257,7 @@ func (p *PixivClient) GetUserArtworksID(id string, page int) (*string, error) { sort.Sort(sort.Reverse(sort.IntSlice(ids))) worksNumber := float64(len(ids)) - worksPerPage := float64(configs.Configs.PageItems) + worksPerPage := 30.0 if page < 1 || float64(page) > math.Ceil(worksNumber/worksPerPage)+1.0 { return nil, errors.New("Page overflow") @@ -297,7 +296,7 @@ func (p *PixivClient) GetUserArtworksCount(id string) (int, error) { } func (p *PixivClient) GetRelatedArtworks(id string) ([]models.IllustShort, error) { - url := fmt.Sprintf(ArtworkRelatedURL, id, configs.Configs.PageItems) + url := fmt.Sprintf(ArtworkRelatedURL, id, 30) var pr models.PixivResponse diff --git a/main.go b/main.go index 1400f94..ee8c5a9 100644 --- a/main.go +++ b/main.go @@ -40,7 +40,7 @@ func setupRouter() *gin.Engine { } regex := regexp.MustCompile(`.*?pximg\.net`) - proxy := "https://" + configs.Configs.ImageProxyServer + proxy := "https://" + configs.ProxyServer return regex.ReplaceAllString(url, proxy) }, @@ -167,9 +167,13 @@ func setupRouter() *gin.Engine { } func main() { - configs.Configs.ReadConfig() + err := configs.ParseConfig() + + if err != nil { + panic(err) + } r := setupRouter() - r.Run(":" + configs.Configs.Port) + r.Run(":" + configs.Port) } diff --git a/views/routes.go b/views/routes.go index 4999a90..5139a15 100644 --- a/views/routes.go +++ b/views/routes.go @@ -54,7 +54,7 @@ func user_page(c *gin.Context) { user, _ := PC.GetUserInformation(id, pageInt) worksCount, _ := PC.GetUserArtworksCount(id) - pageLimit := math.Ceil(float64(worksCount)/float64(configs.Configs.PageItems)) + 1.0 + pageLimit := math.Ceil(float64(worksCount)/30.0) + 1.0 c.HTML(http.StatusOK, "user.html", gin.H{"User": user, "PageLimit": int(pageLimit), "Page": pageInt}) } @@ -180,8 +180,8 @@ func NewPixivClient(timeout int) *models.PixivClient { func SetupRoutes(r *gin.Engine) { PC = NewPixivClient(5000) - PC.SetSessionID(configs.Configs.PHPSESSID) - PC.SetUserAgent(configs.Configs.UserAgent) + PC.SetSessionID(configs.Token) + PC.SetUserAgent(configs.UserAgent) r.GET("/", index_page) r.GET("artworks/:id", artwork_page) r.GET("users/:id", user_page)