mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 07:22:24 -05:00 
			
		
		
		
	[feature] Federate interaction policies + Accepts; enforce policies (#3138)
* [feature] Federate interaction policies + Accepts; enforce policies * use Acceptable type * fix index * remove appendIRIStrs * add GetAccept federatingdb function * lock on object IRI
This commit is contained in:
		
					parent
					
						
							
								f8d399cf6a
							
						
					
				
			
			
				commit
				
					
						8ab2b19a94
					
				
			
		
					 42 changed files with 3541 additions and 254 deletions
				
			
		|  | @ -37,6 +37,8 @@ func ResolveIncomingActivity(r *http.Request) (pub.Activity, bool, gtserror.With | |||
| 	// Get "raw" map | ||||
| 	// destination. | ||||
| 	raw := getMap() | ||||
| 	// Release. | ||||
| 	defer putMap(raw) | ||||
| 
 | ||||
| 	// Decode data as JSON into 'raw' map | ||||
| 	// and get the resolved AS vocab.Type. | ||||
|  | @ -79,9 +81,6 @@ func ResolveIncomingActivity(r *http.Request) (pub.Activity, bool, gtserror.With | |||
| 	// (see: https://github.com/superseriousbusiness/gotosocial/issues/1661) | ||||
| 	NormalizeIncomingActivity(activity, raw) | ||||
| 
 | ||||
| 	// Release. | ||||
| 	putMap(raw) | ||||
| 
 | ||||
| 	return activity, true, nil | ||||
| } | ||||
| 
 | ||||
|  | @ -93,6 +92,8 @@ func ResolveStatusable(ctx context.Context, body io.ReadCloser) (Statusable, err | |||
| 	// Get "raw" map | ||||
| 	// destination. | ||||
| 	raw := getMap() | ||||
| 	// Release. | ||||
| 	defer putMap(raw) | ||||
| 
 | ||||
| 	// Decode data as JSON into 'raw' map | ||||
| 	// and get the resolved AS vocab.Type. | ||||
|  | @ -121,9 +122,6 @@ func ResolveStatusable(ctx context.Context, body io.ReadCloser) (Statusable, err | |||
| 	NormalizeIncomingSummary(statusable, raw) | ||||
| 	NormalizeIncomingName(statusable, raw) | ||||
| 
 | ||||
| 	// Release. | ||||
| 	putMap(raw) | ||||
| 
 | ||||
| 	return statusable, nil | ||||
| } | ||||
| 
 | ||||
|  | @ -135,6 +133,8 @@ func ResolveAccountable(ctx context.Context, body io.ReadCloser) (Accountable, e | |||
| 	// Get "raw" map | ||||
| 	// destination. | ||||
| 	raw := getMap() | ||||
| 	// Release. | ||||
| 	defer putMap(raw) | ||||
| 
 | ||||
| 	// Decode data as JSON into 'raw' map | ||||
| 	// and get the resolved AS vocab.Type. | ||||
|  | @ -153,9 +153,6 @@ func ResolveAccountable(ctx context.Context, body io.ReadCloser) (Accountable, e | |||
| 
 | ||||
| 	NormalizeIncomingSummary(accountable, raw) | ||||
| 
 | ||||
| 	// Release. | ||||
| 	putMap(raw) | ||||
| 
 | ||||
| 	return accountable, nil | ||||
| } | ||||
| 
 | ||||
|  | @ -165,6 +162,8 @@ func ResolveCollection(ctx context.Context, body io.ReadCloser) (CollectionItera | |||
| 	// Get "raw" map | ||||
| 	// destination. | ||||
| 	raw := getMap() | ||||
| 	// Release. | ||||
| 	defer putMap(raw) | ||||
| 
 | ||||
| 	// Decode data as JSON into 'raw' map | ||||
| 	// and get the resolved AS vocab.Type. | ||||
|  | @ -174,9 +173,6 @@ func ResolveCollection(ctx context.Context, body io.ReadCloser) (CollectionItera | |||
| 		return nil, gtserror.SetWrongType(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// Release. | ||||
| 	putMap(raw) | ||||
| 
 | ||||
| 	// Cast as as Collection-like. | ||||
| 	return ToCollectionIterator(t) | ||||
| } | ||||
|  | @ -187,6 +183,8 @@ func ResolveCollectionPage(ctx context.Context, body io.ReadCloser) (CollectionP | |||
| 	// Get "raw" map | ||||
| 	// destination. | ||||
| 	raw := getMap() | ||||
| 	// Release. | ||||
| 	defer putMap(raw) | ||||
| 
 | ||||
| 	// Decode data as JSON into 'raw' map | ||||
| 	// and get the resolved AS vocab.Type. | ||||
|  | @ -196,13 +194,40 @@ func ResolveCollectionPage(ctx context.Context, body io.ReadCloser) (CollectionP | |||
| 		return nil, gtserror.SetWrongType(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// Release. | ||||
| 	putMap(raw) | ||||
| 
 | ||||
| 	// Cast as as CollectionPage-like. | ||||
| 	return ToCollectionPageIterator(t) | ||||
| } | ||||
| 
 | ||||
| // ResolveAcceptable tries to resolve the given reader | ||||
| // into an ActivityStreams Acceptable representation. | ||||
| func ResolveAcceptable( | ||||
| 	ctx context.Context, | ||||
| 	body io.ReadCloser, | ||||
| ) (Acceptable, error) { | ||||
| 	// Get "raw" map | ||||
| 	// destination. | ||||
| 	raw := getMap() | ||||
| 	// Release. | ||||
| 	defer putMap(raw) | ||||
| 
 | ||||
| 	// Decode data as JSON into 'raw' map | ||||
| 	// and get the resolved AS vocab.Type. | ||||
| 	// (this handles close of given body). | ||||
| 	t, err := decodeType(ctx, body, raw) | ||||
| 	if err != nil { | ||||
| 		return nil, gtserror.SetWrongType(err) | ||||
| 	} | ||||
| 
 | ||||
| 	// Attempt to cast as acceptable. | ||||
| 	acceptable, ok := ToAcceptable(t) | ||||
| 	if !ok { | ||||
| 		err := gtserror.Newf("cannot resolve vocab type %T as acceptable", t) | ||||
| 		return nil, gtserror.SetWrongType(err) | ||||
| 	} | ||||
| 
 | ||||
| 	return acceptable, nil | ||||
| } | ||||
| 
 | ||||
| // emptydest is an empty JSON decode | ||||
| // destination useful for "noop" decodes | ||||
| // to check underlying reader is empty. | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue