summaryrefslogtreecommitdiff
path: root/internal/integration/notion/notion.go
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <f@miniflux.net> 2023-08-10 19:46:45 -0700
committerGravatar Frédéric Guillot <f@miniflux.net> 2023-08-10 20:29:34 -0700
commit168a870c025bfef6efdeb46e166e79a16093c157 (patch)
tree4d8ab69c7e3ef03a7ade06e7b5e5053429a64c3b /internal/integration/notion/notion.go
parentc2349032552891745cbbc3d2a9e772845a0239f4 (diff)
downloadv2-168a870c025bfef6efdeb46e166e79a16093c157.tar.gz
v2-168a870c025bfef6efdeb46e166e79a16093c157.tar.zst
v2-168a870c025bfef6efdeb46e166e79a16093c157.zip
Move internal packages to an internal folder
For reference: https://go.dev/doc/go1.4#internalpackages
Diffstat (limited to 'internal/integration/notion/notion.go')
-rw-r--r--internal/integration/notion/notion.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/internal/integration/notion/notion.go b/internal/integration/notion/notion.go
new file mode 100644
index 00000000..fe579928
--- /dev/null
+++ b/internal/integration/notion/notion.go
@@ -0,0 +1,54 @@
+// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
+// SPDX-License-Identifier: Apache-2.0
+
+package notion
+
+import (
+ "fmt"
+
+ "miniflux.app/v2/internal/http/client"
+)
+
+// Client represents a Notion client.
+type Client struct {
+ token string
+ pageID string
+}
+
+// NewClient returns a new Notion client.
+func NewClient(token, pageID string) *Client {
+ return &Client{token, pageID}
+}
+
+func (c *Client) AddEntry(entryURL string, entryTitle string) error {
+ if c.token == "" || c.pageID == "" {
+ return fmt.Errorf("notion: missing credentials")
+ }
+ clt := client.New("https://api.notion.com/v1/blocks/" + c.pageID + "/children")
+ block := &Data{
+ Children: []Block{
+ {
+ Object: "block",
+ Type: "bookmark",
+ Bookmark: Bookmark{
+ Caption: []interface{}{},
+ URL: entryURL,
+ },
+ },
+ },
+ }
+ clt.WithAuthorization("Bearer " + c.token)
+ customHeaders := map[string]string{
+ "Notion-Version": "2022-06-28",
+ }
+ clt.WithCustomHeaders(customHeaders)
+ response, error := clt.PatchJSON(block)
+ if error != nil {
+ return fmt.Errorf("notion: unable to patch entry: %v", error)
+ }
+
+ if response.HasServerFailure() {
+ return fmt.Errorf("notion: request failed, status=%d", response.StatusCode)
+ }
+ return nil
+}