Page Menu
Home
Musing Studio
Search
Configure Global Search
Log In
Files
F10669773
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Subscribers
None
View Options
diff --git a/auth.go b/auth.go
new file mode 100644
index 0000000..cbe9a13
--- /dev/null
+++ b/auth.go
@@ -0,0 +1,12 @@
+package writeas
+
+import (
+ "net/http"
+)
+
+func (c *Client) isNotLoggedIn(code int) bool {
+ if c.token == "" {
+ return false
+ }
+ return code == http.StatusUnauthorized
+}
diff --git a/post.go b/post.go
index c4d4996..922ee99 100644
--- a/post.go
+++ b/post.go
@@ -1,89 +1,119 @@
package writeas
import (
"fmt"
"net/http"
"time"
)
type (
// Post represents a published Write.as post, whether anonymous, owned by a
// user, or part of a collection.
Post struct {
- ID string `json:"id"`
- Slug string `json:"slug"`
- ModifyToken string `json:"token"`
- Font string `json:"appearance"`
- Language *string `json:"language"`
- RTL *bool `json:"rtl"`
- Listed bool `json:"listed"`
- Created time.Time `json:"created"`
- Title string `json:"title"`
- Content string `json:"body"`
- Views int64 `json:"views"`
- Tags []string `json:"tags"`
- Images []string `json:"images"`
- OwnerName string `json:"owner,omitempty"`
+ ID string `json:"id"`
+ Slug string `json:"slug"`
+ Token string `json:"token"`
+ Font string `json:"appearance"`
+ Language *string `json:"language"`
+ RTL *bool `json:"rtl"`
+ Listed bool `json:"listed"`
+ Created time.Time `json:"created"`
+ Title string `json:"title"`
+ Content string `json:"body"`
+ Views int64 `json:"views"`
+ Tags []string `json:"tags"`
+ Images []string `json:"images"`
+ OwnerName string `json:"owner,omitempty"`
Collection *Collection `json:"collection,omitempty"`
}
// PostParams holds values for creating or updating a post.
PostParams struct {
- Title string `json:"title"`
- Content string `json:"body"`
- Font string `json:"font"`
- IsRTL *bool `json:"rtl"`
- Language *string `json:"lang"`
+ // Parameters only for creating
+ ID string `json:"-"`
+ Token string `json:"token,omitempty"`
- Crosspost []map[string]string `json:"crosspost"`
+ // Parameters for creating or updating
+ Title string `json:"title,omitempty"`
+ Content string `json:"body,omitempty"`
+ Font string `json:"font,omitempty"`
+ IsRTL *bool `json:"rtl,omitempty"`
+ Language *string `json:"lang,omitempty"`
+
+ Crosspost []map[string]string `json:"crosspost,omitempty"`
}
)
func (c *Client) GetPost(id string) (*Post, error) {
p := &Post{}
env, err := c.get(fmt.Sprintf("/posts/%s", id), p)
if err != nil {
return nil, err
}
var ok bool
if p, ok = env.Data.(*Post); !ok {
return nil, fmt.Errorf("Wrong data returned from API.")
}
status := env.Code
if status == http.StatusOK {
return p, nil
} else if status == http.StatusNotFound {
return nil, fmt.Errorf("Post not found.")
} else if status == http.StatusGone {
return nil, fmt.Errorf("Post unpublished.")
} else {
return nil, fmt.Errorf("Problem getting post: %s. %v\n", status, err)
}
return p, nil
}
func (c *Client) CreatePost(sp *PostParams) (*Post, error) {
p := &Post{}
env, err := c.post("/posts", sp, p)
if err != nil {
return nil, err
}
var ok bool
if p, ok = env.Data.(*Post); !ok {
return nil, fmt.Errorf("Wrong data returned from API.")
}
status := env.Code
if status == http.StatusCreated {
return p, nil
} else if status == http.StatusBadRequest {
return nil, fmt.Errorf("Bad request: %s", env.ErrorMessage)
} else {
return nil, fmt.Errorf("Problem getting post: %s. %v\n", status, err)
}
return p, nil
}
+
+func (c *Client) UpdatePost(sp *PostParams) (*Post, error) {
+ p := &Post{}
+ env, err := c.post(fmt.Sprintf("/posts/%s", sp.ID), sp, p)
+ if err != nil {
+ return nil, err
+ }
+
+ var ok bool
+ if p, ok = env.Data.(*Post); !ok {
+ return nil, fmt.Errorf("Wrong data returned from API.")
+ }
+
+ status := env.Code
+ if status == http.StatusOK {
+ return p, nil
+ } else if c.isNotLoggedIn(status) {
+ return nil, fmt.Errorf("Not authenticated.")
+ } else if status == http.StatusBadRequest {
+ return nil, fmt.Errorf("Bad request: %s", env.ErrorMessage)
+ } else {
+ return nil, fmt.Errorf("Problem getting post: %s. %v\n", status, err)
+ }
+ return p, nil
+}
diff --git a/post_test.go b/post_test.go
index 6c4ad14..d70be40 100644
--- a/post_test.go
+++ b/post_test.go
@@ -1,44 +1,56 @@
package writeas
import (
"testing"
"strings"
)
func TestCreatePost(t *testing.T) {
wac := NewClient()
p, err := wac.CreatePost(&PostParams{
Title: "Title!",
Content: "This is a post.",
Font: "sans",
})
if err != nil {
t.Errorf("Post create failed: %v", err)
- } else {
- t.Logf("Post created: %+v", p)
+ return
+ }
+ t.Logf("Post created: %+v", p)
+
+ // Update post
+ p, err = wac.UpdatePost(&PostParams{
+ ID: p.ID,
+ Token: p.Token,
+ Content: "Now it's been updated!",
+ })
+ if err != nil {
+ t.Errorf("Post update failed: %v", err)
+ return
}
+ t.Logf("Post updated: %+v", p)
}
func TestGetPost(t *testing.T) {
wac := NewClient()
res, err := wac.GetPost("zekk5r9apum6p")
if err != nil {
t.Errorf("Unexpected fetch results: %+v, err: %v\n", res, err)
} else {
t.Logf("Post: %+v", res)
if res.Content != "This is a post." {
t.Errorf("Unexpected fetch results: %+v\n", res)
}
}
res, err = wac.GetPost("3psnxyhqxy3hq")
if err != nil {
t.Errorf("Unexpected fetch results: %+v, err: %v\n", res, err)
} else {
if !strings.HasPrefix(res.Content, " Write.as Blog") {
t.Errorf("Unexpected fetch results: %+v\n", res)
}
}
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Fri, May 16, 5:01 PM (1 d, 5 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3240244
Attached To
rWGO writeas-go
Event Timeline
Log In to Comment