diff options
| author | 2023-08-19 14:33:15 +0200 | |
|---|---|---|
| committer | 2023-08-19 14:33:15 +0200 | |
| commit | 92de8fb396265d057f18aab4de0bc8aff4b90188 (patch) | |
| tree | 46438b9ff550261f56aa58d038cdf2f1e15493e3 /internal/api/client/instance | |
| parent | [bugfix] fix double firing bun.DB query hooks (#2124) (diff) | |
| download | gotosocial-92de8fb396265d057f18aab4de0bc8aff4b90188.tar.xz | |
[feature] Instance rules (#2125)
* init instance rules database model, admin api
* expose instance rules in public instance api
* public /api/v1/instance/rules route
* GET ruleById
* createRule route
* createRule auth check
* updateRule
* deleteRule
* list rules on about page
* ruleGet auth
* add about page ids for anchors
* process and store adding violated rules to reports
* admin api models for instance rules
* instance rule edit frontend
* change rule inputs to textareas
* database fixes after rebase (#2124)
* remove unused imports
* fix db migration column name
* fix tests
* fix more tests
* fix postgres error with wrongly used Ident
* add some tests, fiddle with rule model a bit, fix postgres migration
* swagger docs
---------
Co-authored-by: tsmethurst <tobi.smethurst@protonmail.com>
Diffstat (limited to 'internal/api/client/instance')
| -rw-r--r-- | internal/api/client/instance/instance.go | 3 | ||||
| -rw-r--r-- | internal/api/client/instance/instancepatch_test.go | 72 | ||||
| -rw-r--r-- | internal/api/client/instance/instancerulesget.go | 71 | 
3 files changed, 140 insertions, 6 deletions
diff --git a/internal/api/client/instance/instance.go b/internal/api/client/instance/instance.go index 8c58b62aa..82f6a4714 100644 --- a/internal/api/client/instance/instance.go +++ b/internal/api/client/instance/instance.go @@ -28,6 +28,7 @@ const (  	InstanceInformationPathV1 = "/v1/instance"  	InstanceInformationPathV2 = "/v2/instance"  	InstancePeersPath         = InstanceInformationPathV1 + "/peers" +	InstanceRulesPath         = InstanceInformationPathV1 + "/rules"  	PeersFilterKey            = "filter" // PeersFilterKey is used to provide filters to /api/v1/instance/peers  ) @@ -47,4 +48,6 @@ func (m *Module) Route(attachHandler func(method string, path string, f ...gin.H  	attachHandler(http.MethodPatch, InstanceInformationPathV1, m.InstanceUpdatePATCHHandler)  	attachHandler(http.MethodGet, InstancePeersPath, m.InstancePeersGETHandler) + +	attachHandler(http.MethodGet, InstanceRulesPath, m.InstanceRulesGETHandler)  } diff --git a/internal/api/client/instance/instancepatch_test.go b/internal/api/client/instance/instancepatch_test.go index 11382f83a..a402f8347 100644 --- a/internal/api/client/instance/instancepatch_test.go +++ b/internal/api/client/instance/instancepatch_test.go @@ -160,7 +160,17 @@ func (suite *InstancePatchTestSuite) TestInstancePatch1() {        "name": "admin"      }    }, -  "max_toot_chars": 5000 +  "max_toot_chars": 5000, +  "rules": [ +    { +      "id": "01GP3AWY4CRDVRNZKW0TEAMB51", +      "text": "Be gay" +    }, +    { +      "id": "01GP3DFY9XQ1TJMZT5BGAZPXX3", +      "text": "Do crime" +    } +  ]  }`, dst.String())  } @@ -264,7 +274,17 @@ func (suite *InstancePatchTestSuite) TestInstancePatch2() {        "name": "admin"      }    }, -  "max_toot_chars": 5000 +  "max_toot_chars": 5000, +  "rules": [ +    { +      "id": "01GP3AWY4CRDVRNZKW0TEAMB51", +      "text": "Be gay" +    }, +    { +      "id": "01GP3DFY9XQ1TJMZT5BGAZPXX3", +      "text": "Do crime" +    } +  ]  }`, dst.String())  } @@ -368,7 +388,17 @@ func (suite *InstancePatchTestSuite) TestInstancePatch3() {        "name": "admin"      }    }, -  "max_toot_chars": 5000 +  "max_toot_chars": 5000, +  "rules": [ +    { +      "id": "01GP3AWY4CRDVRNZKW0TEAMB51", +      "text": "Be gay" +    }, +    { +      "id": "01GP3DFY9XQ1TJMZT5BGAZPXX3", +      "text": "Do crime" +    } +  ]  }`, dst.String())  } @@ -523,7 +553,17 @@ func (suite *InstancePatchTestSuite) TestInstancePatch6() {        "name": "admin"      }    }, -  "max_toot_chars": 5000 +  "max_toot_chars": 5000, +  "rules": [ +    { +      "id": "01GP3AWY4CRDVRNZKW0TEAMB51", +      "text": "Be gay" +    }, +    { +      "id": "01GP3DFY9XQ1TJMZT5BGAZPXX3", +      "text": "Do crime" +    } +  ]  }`, dst.String())  } @@ -651,7 +691,17 @@ func (suite *InstancePatchTestSuite) TestInstancePatch8() {        "name": "admin"      }    }, -  "max_toot_chars": 5000 +  "max_toot_chars": 5000, +  "rules": [ +    { +      "id": "01GP3AWY4CRDVRNZKW0TEAMB51", +      "text": "Be gay" +    }, +    { +      "id": "01GP3DFY9XQ1TJMZT5BGAZPXX3", +      "text": "Do crime" +    } +  ]  }`, dst.String())  	// extra bonus: check the v2 model thumbnail after the patch @@ -790,7 +840,17 @@ func (suite *InstancePatchTestSuite) TestInstancePatch9() {        "name": "admin"      }    }, -  "max_toot_chars": 5000 +  "max_toot_chars": 5000, +  "rules": [ +    { +      "id": "01GP3AWY4CRDVRNZKW0TEAMB51", +      "text": "Be gay" +    }, +    { +      "id": "01GP3DFY9XQ1TJMZT5BGAZPXX3", +      "text": "Do crime" +    } +  ]  }`, dst.String())  } diff --git a/internal/api/client/instance/instancerulesget.go b/internal/api/client/instance/instancerulesget.go new file mode 100644 index 000000000..5cc99ba41 --- /dev/null +++ b/internal/api/client/instance/instancerulesget.go @@ -0,0 +1,71 @@ +// GoToSocial +// Copyright (C) GoToSocial Authors admin@gotosocial.org +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program.  If not, see <http://www.gnu.org/licenses/>. + +package instance + +import ( +	"net/http" + +	"github.com/gin-gonic/gin" +	apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util" +	"github.com/superseriousbusiness/gotosocial/internal/gtserror" +) + +// instanceRulesGETHandler swagger:operation GET /api/v1/instance/rules rules +// +// View instance rules (public). +// +// The rules will be returned in order (sorted by Order ascending). +// +//	--- +//	tags: +//	- instance +// +//	produces: +//	- application/json +// +//	parameters: +// +//	responses: +//		'200': +//			description: An array with all the rules for the local instance. +//			schema: +//				type: array +//				items: +//					"$ref": "#/definitions/instanceRule" +//		'400': +//			description: bad request +//		'404': +//			description: not found +//		'406': +//			description: not acceptable +//		'500': +//			description: internal server error +func (m *Module) InstanceRulesGETHandler(c *gin.Context) { +	if _, err := apiutil.NegotiateAccept(c, apiutil.JSONAcceptHeaders...); err != nil { +		apiutil.ErrorHandler(c, gtserror.NewErrorNotAcceptable(err, err.Error()), m.processor.InstanceGetV1) +		return +	} + +	resp, errWithCode := m.processor.InstanceGetRules(c.Request.Context()) +	if errWithCode != nil { +		apiutil.ErrorHandler(c, errWithCode, m.processor.InstanceGetV1) +		return +	} + +	c.JSON(http.StatusOK, resp) +}  | 
