summaryrefslogtreecommitdiff
path: root/internal/db/domain.go
blob: f4d05ad1d374279dcc1d768d01f81c7859ef199e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// 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 db

import (
	"context"
	"net/url"

	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
	"github.com/superseriousbusiness/gotosocial/internal/paging"
)

// Domain contains DB functions related to domains and domain blocks.
type Domain interface {
	/*
		Block/allow storage + retrieval functions.
	*/

	// CreateDomainAllow puts the given instance-level domain allow into the database.
	CreateDomainAllow(ctx context.Context, allow *gtsmodel.DomainAllow) error

	// GetDomainAllow returns one instance-level domain allow with the given domain, if it exists.
	GetDomainAllow(ctx context.Context, domain string) (*gtsmodel.DomainAllow, error)

	// GetDomainAllowByID returns one instance-level domain allow with the given id, if it exists.
	GetDomainAllowByID(ctx context.Context, id string) (*gtsmodel.DomainAllow, error)

	// GetDomainAllows returns all instance-level domain allows currently enforced by this instance.
	GetDomainAllows(ctx context.Context) ([]*gtsmodel.DomainAllow, error)

	// UpdateDomainAllow updates the given domain allow, setting the provided columns (empty for all).
	UpdateDomainAllow(ctx context.Context, allow *gtsmodel.DomainAllow, columns ...string) error

	// DeleteDomainAllow deletes an instance-level domain allow with the given domain, if it exists.
	DeleteDomainAllow(ctx context.Context, domain string) error

	// CreateDomainBlock puts the given instance-level domain block into the database.
	CreateDomainBlock(ctx context.Context, block *gtsmodel.DomainBlock) error

	// GetDomainBlock returns one instance-level domain block with the given domain, if it exists.
	GetDomainBlock(ctx context.Context, domain string) (*gtsmodel.DomainBlock, error)

	// GetDomainBlockByID returns one instance-level domain block with the given id, if it exists.
	GetDomainBlockByID(ctx context.Context, id string) (*gtsmodel.DomainBlock, error)

	// GetDomainBlocks returns all instance-level domain blocks currently enforced by this instance.
	GetDomainBlocks(ctx context.Context) ([]*gtsmodel.DomainBlock, error)

	// UpdateDomainBlock updates the given domain block, setting the provided columns (empty for all).
	UpdateDomainBlock(ctx context.Context, block *gtsmodel.DomainBlock, columns ...string) error

	// DeleteDomainBlock deletes an instance-level domain block with the given domain, if it exists.
	DeleteDomainBlock(ctx context.Context, domain string) error

	/*
		Block/allow checking functions.
	*/

	// IsDomainBlocked checks if domain is blocked, accounting for both explicit allows and blocks.
	// Will check allows first, so an allowed domain will always return false, even if it's also blocked.
	IsDomainBlocked(ctx context.Context, domain string) (bool, error)

	// AreDomainsBlocked calls IsDomainBlocked for each domain.
	// Will return true if even one of the given domains is blocked.
	AreDomainsBlocked(ctx context.Context, domains []string) (bool, error)

	// IsURIBlocked calls IsDomainBlocked for the host of the given URI.
	IsURIBlocked(ctx context.Context, uri *url.URL) (bool, error)

	// AreURIsBlocked calls IsURIBlocked for each URI.
	// Will return true if even one of the given URIs is blocked.
	AreURIsBlocked(ctx context.Context, uris []*url.URL) (bool, error)

	/*
		Domain permission draft stuff.
	*/

	// GetDomainPermissionDraftByID gets one DomainPermissionDraft with the given ID.
	GetDomainPermissionDraftByID(ctx context.Context, id string) (*gtsmodel.DomainPermissionDraft, error)

	// GetDomainPermissionDrafts returns a page of
	// DomainPermissionDrafts using the given parameters.
	GetDomainPermissionDrafts(
		ctx context.Context,
		permType gtsmodel.DomainPermissionType,
		permSubID string,
		domain string,
		page *paging.Page,
	) ([]*gtsmodel.DomainPermissionDraft, error)

	// PutDomainPermissionDraft stores one DomainPermissionDraft.
	PutDomainPermissionDraft(ctx context.Context, permDraft *gtsmodel.DomainPermissionDraft) error

	// DeleteDomainPermissionDraft deletes one DomainPermissionDraft with the given id.
	DeleteDomainPermissionDraft(ctx context.Context, id string) error

	/*
		Domain permission exclude stuff.
	*/

	// GetDomainPermissionExcludeByID gets one DomainPermissionExclude with the given ID.
	GetDomainPermissionExcludeByID(ctx context.Context, id string) (*gtsmodel.DomainPermissionExclude, error)

	// GetDomainPermissionExcludes returns a page of
	// DomainPermissionExcludes using the given parameters.
	GetDomainPermissionExcludes(
		ctx context.Context,
		domain string,
		page *paging.Page,
	) ([]*gtsmodel.DomainPermissionExclude, error)

	// PutDomainPermissionExclude stores one DomainPermissionExclude.
	PutDomainPermissionExclude(ctx context.Context, permExclude *gtsmodel.DomainPermissionExclude) error

	// DeleteDomainPermissionExclude deletes one DomainPermissionExclude with the given id.
	DeleteDomainPermissionExclude(ctx context.Context, id string) error

	// IsDomainPermissionExcluded returns true if the given domain matches in the list of excluded domains.
	IsDomainPermissionExcluded(ctx context.Context, domain string) (bool, error)
}