@@ -34,28 +34,30 @@ object DAuth {
3434 * clientCreds [ClientCredentials] storing the credentials obtained after client registration in auth.delta.nitt.edu
3535 */
3636 private var currentUser: User ? = null
37- private var codeVerifier: String? = null
38- private val clientCreds: ClientCredentials = ClientCredentials (
39- BuildConfig .CLIENT_ID ,
40- BuildConfig .REDIRECT_URI ,
41- BuildConfig .CLIENT_SECRET
37+ private val clientCredentials: ClientCredentials = ClientCredentials (
38+ BuildConfig .DAUTH_CLIENT_ID ,
39+ BuildConfig .DAUTH_REDIRECT_URI ,
40+ BuildConfig .DAUTH_CLIENT_SECRET
4241 )
4342
4443 /* *
4544 * Wrapper function for sign-in functionality for java consumer
4645 *
4746 * @param activity Activity
4847 * @param authorizationRequest AuthorizationRequest
48+ * @param isPkceEnabled Boolean which tells whether to choose pkce workflow
4949 * @param signInListener ResultListener<Result>
5050 */
5151 fun signIn (
5252 activity : Activity ,
5353 authorizationRequest : AuthorizationRequest ,
54+ isPkceEnabled : Boolean ,
5455 signInListener : ResultListener <Result >
5556 ) {
5657 signIn(
5758 activity,
5859 authorizationRequest,
60+ isPkceEnabled,
5961 onSuccess = { result -> signInListener.onSuccess(result) },
6062 onFailure = { exception -> signInListener.onFailure(exception) }
6163 )
@@ -66,38 +68,38 @@ object DAuth {
6668 *
6769 * @param activity Activity
6870 * @param authorizationRequest AuthorizationRequest
71+ * @param isPkceEnabled Boolean which tells whether to choose pkce workflow
6972 * @param onSuccess Lambda Function that is called on successfull login taking Result as member and returns unit
7073 * @param onFailure Lambda Function that is called on failure taking Exception as member and returns unit
7174 */
7275 fun signIn (
7376 activity : Activity ,
7477 authorizationRequest : AuthorizationRequest ,
78+ isPkceEnabled : Boolean ,
7579 onSuccess : (Result ) -> Unit ,
7680 onFailure : (Exception ) -> Unit
7781 ) {
7882 requestAuthorization(
7983 activity,
8084 authorizationRequest,
85+ isPkceEnabled,
8186 onFailure = { errorState -> onFailure(Exception (errorState.toString())) },
8287 onSuccess = { authorizationResponse ->
8388 if (authorizationResponse.state == authorizationRequest.state) {
8489 fetchToken(
85- authorizationRequest,
8690 TokenRequest (
87- client_id = clientCreds.clientId,
88- client_secret = clientCreds.clientSecret,
8991 grant_type = authorizationRequest.grant_type.toString(),
9092 code = authorizationResponse.authorizationCode,
91- redirect_uri = clientCreds.redirectUri
93+ code_verifier = authorizationResponse.codeVerifier
9294 ),
95+ isPkceEnabled,
9396 onFailure = { e -> onFailure(e) },
9497 onSuccess = { token ->
9598 if (authorizationRequest.scopes.contains(Scope .User )) {
9699 fetchUserDetails(
97100 token.access_token,
98101 onFailure = { e -> onFailure(e) }
99102 ) { user ->
100- currentUser = user
101103 if (authorizationRequest.scopes.contains(Scope .OpenID )){
102104 fetchFromJwt(
103105 authorizationRequest,
@@ -137,16 +139,19 @@ object DAuth {
137139 *
138140 * @param activity Activity
139141 * @param authorizationRequest AuthorizationRequest
142+ * @param isPkceEnabled Boolean which tells whether to choose pkce workflow
140143 * @param authorizationListener ResultListener<AuthorizationResponse>
141144 */
142145 fun requestAuthorization (
143146 activity : Activity ,
144147 authorizationRequest : AuthorizationRequest ,
148+ isPkceEnabled : Boolean ,
145149 authorizationListener : ResultListener <AuthorizationResponse >
146150 ) {
147151 requestAuthorization(
148152 activity,
149153 authorizationRequest,
154+ isPkceEnabled,
150155 onFailure = { authorizationErrorType -> authorizationListener.onFailure(Exception (" $authorizationErrorType " )) },
151156 onSuccess = { authorizationResponse ->
152157 authorizationListener.onSuccess(
@@ -161,12 +166,14 @@ object DAuth {
161166 *
162167 * @param activity Activity
163168 * @param authorizationRequest AuthorizationRequest
169+ * @param isPkceEnabled Boolean which tells whether to choose pkce workflow
164170 * @param onFailure Lambda function called on failure taking AuthorizationErrorType as member and returns unit
165171 * @param onSuccess Lambda function called on successful authorization taking AuthorizationResponse as member and returns unit
166172 */
167173 fun requestAuthorization (
168174 activity : Activity ,
169175 authorizationRequest : AuthorizationRequest ,
176+ isPkceEnabled : Boolean ,
170177 onFailure : (AuthorizationErrorType ) -> Unit ,
171178 onSuccess : (AuthorizationResponse ) -> Unit
172179 ) {
@@ -183,21 +190,19 @@ object DAuth {
183190 .scheme(Scheme )
184191 .authority(BaseAuthority )
185192 .appendPath(" authorize" )
186- .appendQueryParameter(" client_id" , clientCreds.clientId)
187- .appendQueryParameter(" redirect_uri" , clientCreds.redirectUri)
188- .appendQueryParameter(
189- " response_type" ,
190- authorizationRequest.response_type.toString()
191- )
193+ .appendQueryParameter(" client_id" , clientCredentials.clientId)
194+ .appendQueryParameter(" redirect_uri" , clientCredentials.redirectUri)
195+ .appendQueryParameter(" response_type" , authorizationRequest.response_type.toString())
192196 .appendQueryParameter(" grant_type" , authorizationRequest.grant_type.toString())
193197 .appendQueryParameter(" state" , authorizationRequest.state)
194198 .appendQueryParameter(" scope" , Scope .combineScopes(authorizationRequest.scopes))
195199 .appendQueryParameter(" nonce" , authorizationRequest.nonce)
196- if (authorizationRequest.isPkceEnabled){
200+ var codeVerifier: String? = " "
201+ if (isPkceEnabled){
197202 try {
198203 codeVerifier = pkceUtil.generateCodeVerifier()
199204 uriBuilder.appendQueryParameter(" code_challenge" ,pkceUtil.generateCodeChallenge(
200- codeVerifier!! ,pkceUtil.getCodeChallengeMethod()))
205+ codeVerifier,pkceUtil.getCodeChallengeMethod()))
201206 uriBuilder.appendQueryParameter(" code_challenge_method" ,pkceUtil.getCodeChallengeMethod())
202207 }catch (e: Exception ){
203208 onFailure(AuthorizationErrorType .UnableToGenerateCodeVerifier )
@@ -211,13 +216,15 @@ object DAuth {
211216 onFailure = { onFailure(AuthorizationErrorType .ServerDownError ) }
212217 ) { url ->
213218 val uri: Uri = Uri .parse(url)
214- if (url.startsWith(clientCreds .redirectUri)) {
219+ if (url.startsWith(clientCredentials .redirectUri)) {
215220 if (uri.query.isNullOrBlank() or uri.query.isNullOrEmpty()) {
216221 onFailure(AuthorizationErrorType .AuthorizationDenied )
217222 } else {
218223 val authorizationResponse = AuthorizationResponse (
219224 uri.getQueryParameter(" code" ) ? : " " ,
220- uri.getQueryParameter(" state" ) ? : " "
225+ uri.getQueryParameter(" state" ) ? : " " ,
226+ codeVerifier ? : " " ,
227+ isPkceEnabled
221228 )
222229 onSuccess(authorizationResponse)
223230 }
@@ -243,18 +250,18 @@ object DAuth {
243250 /* *
244251 * Wrapper function to fetch the auth token for java consumers
245252 *
246- * @param authorizationRequest AuthorizationRequest
247253 * @param request TokenRequest
254+ * @param isPkceEnabled Boolean which tells whether to choose pkce workflow
248255 * @param fetchTokenListener ResultListener<Token>
249256 */
250257 fun fetchToken (
251- authorizationRequest : AuthorizationRequest ,
252258 request : TokenRequest ,
259+ isPkceEnabled : Boolean ,
253260 fetchTokenListener : ResultListener <Token >
254261 ) {
255262 fetchToken(
256- authorizationRequest,
257263 request,
264+ isPkceEnabled,
258265 onFailure = { exception -> fetchTokenListener.onFailure(exception) },
259266 onSuccess = { token -> fetchTokenListener.onSuccess(token) }
260267 )
@@ -263,21 +270,23 @@ object DAuth {
263270 /* *
264271 * Fetches the auth token
265272 *
266- * @param authorizationRequest AuthorizationRequest
267273 * @param request TokenRequest
274+ * @param isPkceEnabled Boolean which tells whether to choose pkce workflow
268275 * @param onFailure Lambda function called on failure taking [Exception] as member and returns unit
269276 * @param onSuccess Lambda function called after fetching token successfully taking [Token] as member and returns unit
270277 */
271278 fun fetchToken (
272- authorizationRequest : AuthorizationRequest ,
273279 request : TokenRequest ,
280+ isPkceEnabled : Boolean ,
274281 onFailure : (Exception ) -> Unit ,
275282 onSuccess : (Token ) -> Unit
276283 ) {
277284 var requestAsMap : Map <String ,String > = request.toMap()
278- if (authorizationRequest.isPkceEnabled) {
279- requestAsMap = requestAsMap.plus(Pair (" code_verifier" , codeVerifier!! ))
280- requestAsMap = requestAsMap.minus(" client_secret" )
285+ requestAsMap = requestAsMap.plus(Pair (" client_id" , clientCredentials.clientId))
286+ requestAsMap = requestAsMap.plus(Pair (" redirect_uri" , clientCredentials.redirectUri))
287+ if (! isPkceEnabled){
288+ requestAsMap = requestAsMap.plus(Pair (" client_secret" , clientCredentials.clientSecret))
289+ requestAsMap = requestAsMap.minus(" code_verifier" )
281290 }
282291 RetrofitInstance .api.getToken(requestAsMap).enqueue(object : Callback <Token > {
283292 override fun onResponse (call : Call <Token >, response : Response <Token >) {
@@ -329,7 +338,10 @@ object DAuth {
329338 onFailure(Exception (response.code().toString()))
330339 return
331340 }
332- response.body()?.let { onSuccess(it) }
341+ response.body()?.let {
342+ currentUser = it
343+ onSuccess(it)
344+ }
333345 }
334346
335347 override fun onFailure (call : Call <User >, t : Throwable ) {
0 commit comments