|  | 
| 17 | 17 | package thirdparty | 
| 18 | 18 | 
 | 
| 19 | 19 | import ( | 
|  | 20 | +	"encoding/json" | 
| 20 | 21 | 	"errors" | 
|  | 22 | +	"github.com/supertokens/supertokens-golang/recipe/session" | 
| 21 | 23 | 	"io" | 
| 22 | 24 | 	"io/ioutil" | 
|  | 25 | +	"net" | 
| 23 | 26 | 	"net/http" | 
| 24 | 27 | 	"net/http/httptest" | 
| 25 | 28 | 	"net/url" | 
| @@ -779,3 +782,122 @@ func TestThatSignInUpFailsIfValidateAccessTokenReturnsError(t *testing.T) { | 
| 779 | 782 | 	respString = strings.Replace(respString, "\n", "", -1) | 
| 780 | 783 | 	assert.Equal(t, respString, "Invalid access token") | 
| 781 | 784 | } | 
|  | 785 | + | 
|  | 786 | +func TestThatSignInUpWorksIfValidateAccessTokenDoesNotReturnError(t *testing.T) { | 
|  | 787 | +	overrideValidateCalled := false | 
|  | 788 | +	configValue := supertokens.TypeInput{ | 
|  | 789 | +		Supertokens: &supertokens.ConnectionInfo{ | 
|  | 790 | +			ConnectionURI: "http://localhost:8080", | 
|  | 791 | +		}, | 
|  | 792 | +		AppInfo: supertokens.AppInfo{ | 
|  | 793 | +			APIDomain:     "api.supertokens.io", | 
|  | 794 | +			AppName:       "SuperTokens", | 
|  | 795 | +			WebsiteDomain: "supertokens.io", | 
|  | 796 | +		}, | 
|  | 797 | +		RecipeList: []supertokens.Recipe{ | 
|  | 798 | +			session.Init(nil), | 
|  | 799 | +			Init( | 
|  | 800 | +				&tpmodels.TypeInput{ | 
|  | 801 | +					SignInAndUpFeature: tpmodels.TypeInputSignInAndUp{ | 
|  | 802 | +						Providers: []tpmodels.ProviderInput{ | 
|  | 803 | +							{ | 
|  | 804 | +								Config: tpmodels.ProviderConfig{ | 
|  | 805 | +									ThirdPartyId:     "custom", | 
|  | 806 | +									TokenEndpoint:    "http://127.0.0.1:8083/tokenendpoint", | 
|  | 807 | +									UserInfoEndpoint: "http://127.0.0.1:8083/userinfo", | 
|  | 808 | +									UserInfoMap: tpmodels.TypeUserInfoMap{ | 
|  | 809 | +										FromUserInfoAPI: tpmodels.TypeUserInfoMapFields{ | 
|  | 810 | +											UserId:        "userId", | 
|  | 811 | +											Email:         "email", | 
|  | 812 | +											EmailVerified: "emailVerified", | 
|  | 813 | +										}, | 
|  | 814 | +									}, | 
|  | 815 | +									Clients: []tpmodels.ProviderClientConfig{ | 
|  | 816 | +										{ | 
|  | 817 | +											ClientID:     "test", | 
|  | 818 | +											ClientSecret: "test-secret", | 
|  | 819 | +											Scope:        []string{"test-scope-1", "test-scope-2"}, | 
|  | 820 | +										}, | 
|  | 821 | +									}, | 
|  | 822 | +									ValidateAccessToken: func(accessToken string, clientConfig tpmodels.ProviderConfigForClientType, userContext supertokens.UserContext) error { | 
|  | 823 | +										overrideValidateCalled = true | 
|  | 824 | +										if accessToken != "accesstoken" { | 
|  | 825 | +											return errors.New("Invalid access token") | 
|  | 826 | +										} | 
|  | 827 | + | 
|  | 828 | +										return nil | 
|  | 829 | +									}, | 
|  | 830 | +								}, | 
|  | 831 | +							}, | 
|  | 832 | +						}, | 
|  | 833 | +					}, | 
|  | 834 | +				}, | 
|  | 835 | +			), | 
|  | 836 | +		}, | 
|  | 837 | +	} | 
|  | 838 | + | 
|  | 839 | +	BeforeEach() | 
|  | 840 | +	unittesting.StartUpST("localhost", "8080") | 
|  | 841 | +	defer AfterEach() | 
|  | 842 | +	err := supertokens.Init(configValue) | 
|  | 843 | + | 
|  | 844 | +	if err != nil { | 
|  | 845 | +		t.Error(err.Error()) | 
|  | 846 | +	} | 
|  | 847 | + | 
|  | 848 | +	mux := http.NewServeMux() | 
|  | 849 | + | 
|  | 850 | +	mux.HandleFunc("/tokenendpoint", func(rw http.ResponseWriter, r *http.Request) { | 
|  | 851 | +		data := map[string]interface{}{ | 
|  | 852 | +			"access_token": "accesstoken", | 
|  | 853 | +			"id_token":     "idtoken", | 
|  | 854 | +		} | 
|  | 855 | +		rw.Header().Set("Content-Type", "application/json") | 
|  | 856 | +		rw.WriteHeader(http.StatusCreated) | 
|  | 857 | +		json.NewEncoder(rw).Encode(data) | 
|  | 858 | +	}) | 
|  | 859 | + | 
|  | 860 | +	mux.HandleFunc("/userinfo", func(rw http.ResponseWriter, r *http.Request) { | 
|  | 861 | +		data := map[string]interface{}{ | 
|  | 862 | +			"userId":        "testiserid", | 
|  | 863 | +			"email":         "testinguser@supertokens.com", | 
|  | 864 | +			"emailVerified": "true", | 
|  | 865 | +		} | 
|  | 866 | +		rw.Header().Set("Content-Type", "application/json") | 
|  | 867 | +		rw.WriteHeader(http.StatusCreated) | 
|  | 868 | +		json.NewEncoder(rw).Encode(data) | 
|  | 869 | +	}) | 
|  | 870 | + | 
|  | 871 | +	l, err := net.Listen("tcp", "127.0.0.1:8083") | 
|  | 872 | +	if err != nil { | 
|  | 873 | +		t.Error(err.Error()) | 
|  | 874 | +	} | 
|  | 875 | + | 
|  | 876 | +	testServer := httptest.NewUnstartedServer(supertokens.Middleware(mux)) | 
|  | 877 | +	testServer.Listener.Close() | 
|  | 878 | +	testServer.Listener = l | 
|  | 879 | + | 
|  | 880 | +	// Start the server. | 
|  | 881 | +	testServer.Start() | 
|  | 882 | +	defer testServer.Close() | 
|  | 883 | + | 
|  | 884 | +	req, err := http.NewRequest(http.MethodPost, testServer.URL+"/auth/signinup", strings.NewReader(`{"thirdPartyId": "custom", "redirectURIInfo": {"redirectURIOnProviderDashboard": "http://127.0.0.1/callback", "redirectURIQueryParams": {"code": "abcdefghj"}}}`)) | 
|  | 885 | +	if err != nil { | 
|  | 886 | +		t.Error(err.Error()) | 
|  | 887 | +	} | 
|  | 888 | + | 
|  | 889 | +	res, err := http.DefaultClient.Do(req) | 
|  | 890 | + | 
|  | 891 | +	dataInBytes, err := ioutil.ReadAll(res.Body) | 
|  | 892 | +	if err != nil { | 
|  | 893 | +		t.Error(err.Error()) | 
|  | 894 | +	} | 
|  | 895 | + | 
|  | 896 | +	var response map[string]string | 
|  | 897 | + | 
|  | 898 | +	err = json.Unmarshal(dataInBytes, &response) | 
|  | 899 | + | 
|  | 900 | +	assert.Equal(t, res.StatusCode, 200) | 
|  | 901 | +	assert.True(t, overrideValidateCalled) | 
|  | 902 | +	assert.Equal(t, response["status"], "OK") | 
|  | 903 | +} | 
0 commit comments