mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 22:32:25 -06:00 
			
		
		
		
	* Add Swagger spec test script * Fix Swagger spec errors not related to statuses with polls * Add API tests that post a status with a poll * Fix creating a status with a poll from form params * Fix Swagger spec errors related to statuses with polls (this is the last error) * Fix Swagger spec warnings not related to unused definitions * Suppress a duplicate list update params definition that was somehow causing wrong param names * Add Swagger test to CI - updates Drone config - vendorizes go-swagger - fixes a file extension issue that caused the test script to generate JSON instead of YAML with the vendorized version * Put `Sample: ` on its own line everywhere * Remove unused id param from emojiCategoriesGet * Add 5 more pairs of profile fields to account update API Swagger * Remove Swagger prefix from dummy fields It makes the generated code look weird * Manually annotate params for statusCreate operation * Fix all remaining Swagger spec warnings - Change some models into operation parameters - Ignore models that already correspond to manually documented operation parameters but can't be trivially changed (those with file fields) * Documented that creating a status with scheduled_at isn't implemented yet * sign drone.yml * Fix filter API Swagger errors * fixup! Fix filter API Swagger errors --------- Co-authored-by: tobi <tobi.smethurst@protonmail.com>
		
			
				
	
	
		
			66 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package sprig
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"net/url"
 | 
						|
	"reflect"
 | 
						|
)
 | 
						|
 | 
						|
func dictGetOrEmpty(dict map[string]interface{}, key string) string {
 | 
						|
	value, ok := dict[key]
 | 
						|
	if !ok {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	tp := reflect.TypeOf(value).Kind()
 | 
						|
	if tp != reflect.String {
 | 
						|
		panic(fmt.Sprintf("unable to parse %s key, must be of type string, but %s found", key, tp.String()))
 | 
						|
	}
 | 
						|
	return reflect.ValueOf(value).String()
 | 
						|
}
 | 
						|
 | 
						|
// parses given URL to return dict object
 | 
						|
func urlParse(v string) map[string]interface{} {
 | 
						|
	dict := map[string]interface{}{}
 | 
						|
	parsedURL, err := url.Parse(v)
 | 
						|
	if err != nil {
 | 
						|
		panic(fmt.Sprintf("unable to parse url: %s", err))
 | 
						|
	}
 | 
						|
	dict["scheme"] = parsedURL.Scheme
 | 
						|
	dict["host"] = parsedURL.Host
 | 
						|
	dict["hostname"] = parsedURL.Hostname()
 | 
						|
	dict["path"] = parsedURL.Path
 | 
						|
	dict["query"] = parsedURL.RawQuery
 | 
						|
	dict["opaque"] = parsedURL.Opaque
 | 
						|
	dict["fragment"] = parsedURL.Fragment
 | 
						|
	if parsedURL.User != nil {
 | 
						|
		dict["userinfo"] = parsedURL.User.String()
 | 
						|
	} else {
 | 
						|
		dict["userinfo"] = ""
 | 
						|
	}
 | 
						|
 | 
						|
	return dict
 | 
						|
}
 | 
						|
 | 
						|
// join given dict to URL string
 | 
						|
func urlJoin(d map[string]interface{}) string {
 | 
						|
	resURL := url.URL{
 | 
						|
		Scheme:   dictGetOrEmpty(d, "scheme"),
 | 
						|
		Host:     dictGetOrEmpty(d, "host"),
 | 
						|
		Path:     dictGetOrEmpty(d, "path"),
 | 
						|
		RawQuery: dictGetOrEmpty(d, "query"),
 | 
						|
		Opaque:   dictGetOrEmpty(d, "opaque"),
 | 
						|
		Fragment: dictGetOrEmpty(d, "fragment"),
 | 
						|
	}
 | 
						|
	userinfo := dictGetOrEmpty(d, "userinfo")
 | 
						|
	var user *url.Userinfo
 | 
						|
	if userinfo != "" {
 | 
						|
		tempURL, err := url.Parse(fmt.Sprintf("proto://%s@host", userinfo))
 | 
						|
		if err != nil {
 | 
						|
			panic(fmt.Sprintf("unable to parse userinfo in dict: %s", err))
 | 
						|
		}
 | 
						|
		user = tempURL.User
 | 
						|
	}
 | 
						|
 | 
						|
	resURL.User = user
 | 
						|
	return resURL.String()
 | 
						|
}
 |