(c *gin.Context)
| 1694 | } |
| 1695 | |
| 1696 | func (h *Handler) files(c *gin.Context) { |
| 1697 | secret, status, err := h.secretFromAuthorization(c, true, true, h.proxy.GetProxyIP()) |
| 1698 | if err != nil { |
| 1699 | c.JSON(status, gin.H{"error": gin.H{ |
| 1700 | "message": err.Error(), |
| 1701 | "type": "authorization_error", |
| 1702 | "param": "Authorization", |
| 1703 | "code": status, |
| 1704 | }}) |
| 1705 | return |
| 1706 | } |
| 1707 | if secret == nil || secret.Token == "" || secret.IsFree { |
| 1708 | c.JSON(400, gin.H{"error": gin.H{ |
| 1709 | "message": "Files API requires a logged-in ChatGPT access token.", |
| 1710 | "type": "invalid_request_error", |
| 1711 | "param": nil, |
| 1712 | "code": "missing_access_token", |
| 1713 | }}) |
| 1714 | return |
| 1715 | } |
| 1716 | |
| 1717 | formFile, err := c.FormFile("file") |
| 1718 | if err != nil { |
| 1719 | c.JSON(400, gin.H{"error": gin.H{ |
| 1720 | "message": "Missing required multipart field: file", |
| 1721 | "type": "invalid_request_error", |
| 1722 | "param": "file", |
| 1723 | "code": "missing_required_parameter", |
| 1724 | }}) |
| 1725 | return |
| 1726 | } |
| 1727 | file, err := formFile.Open() |
| 1728 | if err != nil { |
| 1729 | c.JSON(400, gin.H{"error": gin.H{ |
| 1730 | "message": err.Error(), |
| 1731 | "type": "invalid_request_error", |
| 1732 | "param": "file", |
| 1733 | "code": "file_open_error", |
| 1734 | }}) |
| 1735 | return |
| 1736 | } |
| 1737 | defer file.Close() |
| 1738 | data, err := io.ReadAll(file) |
| 1739 | if err != nil { |
| 1740 | c.JSON(400, gin.H{"error": gin.H{ |
| 1741 | "message": err.Error(), |
| 1742 | "type": "invalid_request_error", |
| 1743 | "param": "file", |
| 1744 | "code": "file_read_error", |
| 1745 | }}) |
| 1746 | return |
| 1747 | } |
| 1748 | if len(data) == 0 { |
| 1749 | c.JSON(400, gin.H{"error": gin.H{ |
| 1750 | "message": "Uploaded file is empty", |
| 1751 | "type": "invalid_request_error", |
| 1752 | "param": "file", |
| 1753 | "code": "empty_file", |
nothing calls this directly
no test coverage detected