mirror of https://github.com/Xhofe/alist
				
				
				
			fix(115): support null `UserAgent` (#5787)
							parent
							
								
									8a427ddc49
								
							
						
					
					
						commit
						b5cc90cb5a
					
				|  | @ -64,11 +64,7 @@ func (d *Pan115) Link(ctx context.Context, file model.Obj, args model.LinkArgs) | |||
| 		return nil, err | ||||
| 	} | ||||
| 	var userAgent = args.Header.Get("User-Agent") | ||||
| 	if userAgent == "" { | ||||
| 		userAgent = driver115.UA115Browser | ||||
| 	} | ||||
| 
 | ||||
| 	downloadInfo, err := d.client. | ||||
| 	downloadInfo, err := d. | ||||
| 		DownloadWithUA(file.(*FileObj).PickCode, userAgent) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
|  |  | |||
|  | @ -5,12 +5,8 @@ import ( | |||
| 	"crypto/tls" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"github.com/alist-org/alist/v3/internal/model" | ||||
| 	"github.com/alist-org/alist/v3/pkg/http_range" | ||||
| 	"github.com/alist-org/alist/v3/pkg/utils" | ||||
| 	"github.com/aliyun/aliyun-oss-go-sdk/oss" | ||||
| 	"github.com/orzogc/fake115uploader/cipher" | ||||
| 	"io" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"path/filepath" | ||||
| 	"strconv" | ||||
|  | @ -18,8 +14,15 @@ import ( | |||
| 	"sync" | ||||
| 	"time" | ||||
| 
 | ||||
| 	driver115 "github.com/SheltonZhu/115driver/pkg/driver" | ||||
| 	"github.com/alist-org/alist/v3/internal/conf" | ||||
| 	"github.com/alist-org/alist/v3/internal/model" | ||||
| 	"github.com/alist-org/alist/v3/pkg/http_range" | ||||
| 	"github.com/alist-org/alist/v3/pkg/utils" | ||||
| 	"github.com/aliyun/aliyun-oss-go-sdk/oss" | ||||
| 
 | ||||
| 	driver115 "github.com/SheltonZhu/115driver/pkg/driver" | ||||
| 	crypto "github.com/gaoyb7/115drive-webdav/115" | ||||
| 	"github.com/orzogc/fake115uploader/cipher" | ||||
| 	"github.com/pkg/errors" | ||||
| ) | ||||
| 
 | ||||
|  | @ -74,6 +77,61 @@ const ( | |||
| 	appVer = "2.0.3.6" | ||||
| ) | ||||
| 
 | ||||
| func (c *Pan115) DownloadWithUA(pickCode, ua string) (*driver115.DownloadInfo, error) { | ||||
| 	key := crypto.GenerateKey() | ||||
| 	result := driver115.DownloadResp{} | ||||
| 	params, err := utils.Json.Marshal(map[string]string{"pickcode": pickCode}) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	data := crypto.Encode(params, key) | ||||
| 
 | ||||
| 	bodyReader := strings.NewReader(url.Values{"data": []string{data}}.Encode()) | ||||
| 	reqUrl := fmt.Sprintf("%s?t=%s", driver115.ApiDownloadGetUrl, driver115.Now().String()) | ||||
| 	req, _ := http.NewRequest(http.MethodPost, reqUrl, bodyReader) | ||||
| 	req.Header.Set("Content-Type", "application/x-www-form-urlencoded") | ||||
| 	req.Header.Set("Cookie", c.Cookie) | ||||
| 	req.Header.Set("User-Agent", ua) | ||||
| 
 | ||||
| 	resp, err := c.client.Client.GetClient().Do(req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer resp.Body.Close() | ||||
| 
 | ||||
| 	body, err := io.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if err := utils.Json.Unmarshal(body, &result); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	if err = result.Err(string(body)); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	bytes, err := crypto.Decode(string(result.EncodedData), key) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	downloadInfo := driver115.DownloadData{} | ||||
| 	if err := utils.Json.Unmarshal(bytes, &downloadInfo); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	for _, info := range downloadInfo { | ||||
| 		if info.FileSize < 0 { | ||||
| 			return nil, driver115.ErrDownloadEmpty | ||||
| 		} | ||||
| 		info.Header = resp.Request.Header | ||||
| 		return info, nil | ||||
| 	} | ||||
| 	return nil, driver115.ErrUnexpected | ||||
| } | ||||
| 
 | ||||
| func (d *Pan115) rapidUpload(fileSize int64, fileName, dirID, preID, fileID string, stream model.FileStreamer) (*driver115.UploadInitResp, error) { | ||||
| 	var ( | ||||
| 		ecdhCipher   *cipher.EcdhCipher | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 foxxorcat
						foxxorcat