Pārlūkot izejas kodu

Support configuring default collection visibility

This adds a new `default_visibility` config value that lets an instance
admin set the visibility of newly created collections.

Ref T675
pull/148/head
Matt Baer pirms 4 gadiem
vecāks
revīzija
a75b45f060
5 mainītis faili ar 46 papildinājumiem un 18 dzēšanām
  1. +1
    -1
      account.go
  2. +2
    -2
      app.go
  3. +37
    -12
      collections.go
  4. +3
    -0
      config/config.go
  5. +3
    -3
      database.go

+ 1
- 1
account.go Parādīt failu

@@ -163,7 +163,7 @@ func signupWithRegistration(app *App, signup userRegistration, w http.ResponseWr
}

// Create actual user
if err := app.db.CreateUser(u, desiredUsername); err != nil {
if err := app.db.CreateUser(app, u, desiredUsername); err != nil {
return nil, err
}



+ 2
- 2
app.go Parādīt failu

@@ -507,7 +507,7 @@ func DoConfig(app *App, configSections string) {

// Create blog
log.Info("Creating user %s...\n", u.Username)
err = app.db.CreateUser(u, app.cfg.App.SiteName)
err = app.db.CreateUser(app, u, app.cfg.App.SiteName)
if err != nil {
log.Error("Unable to create user: %s", err)
os.Exit(1)
@@ -702,7 +702,7 @@ func CreateUser(apper Apper, username, password string, isAdmin bool) error {
userType = "admin"
}
log.Info("Creating %s %s...", userType, usernameDesc)
err = apper.App().db.CreateUser(u, desiredUsername)
err = apper.App().db.CreateUser(apper.App(), u, desiredUsername)
if err != nil {
return fmt.Errorf("Unable to create user: %s", err)
}


+ 37
- 12
collections.go Parādīt failu

@@ -31,6 +31,7 @@ import (
"github.com/writeas/web-core/log"
waposts "github.com/writeas/web-core/posts"
"github.com/writeas/writefreely/author"
"github.com/writeas/writefreely/config"
"github.com/writeas/writefreely/page"
)

@@ -126,6 +127,21 @@ const (
CollProtected
)

var collVisibilityStrings = map[string]collVisibility{
"unlisted": CollUnlisted,
"public": CollPublic,
"private": CollPrivate,
"protected": CollProtected,
}

func defaultVisibility(cfg *config.Config) collVisibility {
vis, ok := collVisibilityStrings[cfg.App.DefaultVisibility]
if !ok {
vis = CollUnlisted
}
return vis
}

func (cf *CollectionFormat) Ascending() bool {
return cf.Format == "novel"
}
@@ -358,35 +374,44 @@ func newCollection(app *App, w http.ResponseWriter, r *http.Request) error {
return impart.HTTPError{http.StatusBadRequest, fmt.Sprintf("Parameter(s) %srequired.", missingParams)}
}

var userID int64
if reqJSON && !c.Web {
accessToken = r.Header.Get("Authorization")
if accessToken == "" {
return ErrNoAccessToken
}
userID = app.db.GetUserID(accessToken)
if userID == -1 {
return ErrBadAccessToken
}
} else {
u = getUserSession(app, r)
if u == nil {
return ErrNotLoggedIn
}
userID = u.ID
}

if !author.IsValidUsername(app.cfg, c.Alias) {
return impart.HTTPError{http.StatusPreconditionFailed, "Collection alias isn't valid."}
}

var coll *Collection
var err error
if accessToken != "" {
coll, err = app.db.CreateCollectionFromToken(c.Alias, c.Title, accessToken)
if err != nil {
// TODO: handle this
return err
}
} else {
coll, err = app.db.CreateCollection(c.Alias, c.Title, u.ID)
coll, err := app.db.CreateCollection(c.Alias, c.Title, userID)
if err != nil {
// TODO: handle this
return err
}

// Set visibility to configured default
vis := defaultVisibility(app.cfg)
if vis != CollUnlisted {
visInt := int(vis)
err = app.db.UpdateCollection(&SubmittedCollection{
OwnerID: uint64(userID),
Visibility: &visInt,
}, coll.Alias)
if err != nil {
// TODO: handle this
return err
log.Error("Unable to set default visibility: %s", err)
}
}



+ 3
- 0
config/config.go Parādīt failu

@@ -83,6 +83,9 @@ type (
// Additional functions
LocalTimeline bool `ini:"local_timeline"`
UserInvites string `ini:"user_invites"`

// Defaults
DefaultVisibility string `ini:"default_visibility"`
}

// Config holds the complete configuration for running a writefreely instance


+ 3
- 3
database.go Parādīt failu

@@ -44,7 +44,7 @@ var (
)

type writestore interface {
CreateUser(*User, string) error
CreateUser(*App, *User, string) error
UpdateUserEmail(keys *key.Keychain, userID int64, email string) error
UpdateEncryptedUserEmail(int64, []byte) error
GetUserByID(int64) (*User, error)
@@ -162,7 +162,7 @@ func (db *datastore) dateSub(l int, unit string) string {
return fmt.Sprintf("DATE_SUB(NOW(), INTERVAL %d %s)", l, unit)
}

func (db *datastore) CreateUser(u *User, collectionTitle string) error {
func (db *datastore) CreateUser(app *App, u *User, collectionTitle string) error {
if db.PostIDExists(u.Username) {
return impart.HTTPError{http.StatusConflict, "Invalid collection name."}
}
@@ -196,7 +196,7 @@ func (db *datastore) CreateUser(u *User, collectionTitle string) error {
if collectionTitle == "" {
collectionTitle = u.Username
}
res, err = t.Exec("INSERT INTO collections (alias, title, description, privacy, owner_id, view_count) VALUES (?, ?, ?, ?, ?, ?)", u.Username, collectionTitle, "", CollUnlisted, u.ID, 0)
res, err = t.Exec("INSERT INTO collections (alias, title, description, privacy, owner_id, view_count) VALUES (?, ?, ?, ?, ?, ?)", u.Username, collectionTitle, "", defaultVisibility(app.cfg), u.ID, 0)
if err != nil {
t.Rollback()
if db.isDuplicateKeyErr(err) {


Notiek ielāde…
Atcelt
Saglabāt