aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Backend/Api/Api/Controllers/UserController.cs6
-rw-r--r--Backend/Api/Api/Interfaces/IUserService.cs2
-rw-r--r--Backend/Api/Api/Services/UserService.cs24
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityChangePassword.kt91
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt7
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt4
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/activity_change_password.xml1
7 files changed, 134 insertions, 1 deletions
diff --git a/Backend/Api/Api/Controllers/UserController.cs b/Backend/Api/Api/Controllers/UserController.cs
index 73d32ea..30beac4 100644
--- a/Backend/Api/Api/Controllers/UserController.cs
+++ b/Backend/Api/Api/Controllers/UserController.cs
@@ -162,6 +162,12 @@ namespace Api.Controllers
return Ok(await _userService.ChangeMyProfileName(newName));
}
+ [HttpPost("changePass")]
+ [Authorize(Roles = "User")]
+ public async Task<ActionResult<int>> ChangePass(string currentPass, string newPass)
+ {
+ return Ok(await _userService.ChangePass(currentPass,newPass));
+ }
}
diff --git a/Backend/Api/Api/Interfaces/IUserService.cs b/Backend/Api/Api/Interfaces/IUserService.cs
index f4954e0..855272f 100644
--- a/Backend/Api/Api/Interfaces/IUserService.cs
+++ b/Backend/Api/Api/Interfaces/IUserService.cs
@@ -40,6 +40,8 @@ namespace Api.Interfaces
Task<int> ChangeMyProfileUsername(String newUsername);
Task<bool> ChangeMyProfileName(String newUsername);
+ Task<int> ChangePass(string currentPass, string newPass);
+
}
}
diff --git a/Backend/Api/Api/Services/UserService.cs b/Backend/Api/Api/Services/UserService.cs
index 2b3f0b8..74c0894 100644
--- a/Backend/Api/Api/Services/UserService.cs
+++ b/Backend/Api/Api/Services/UserService.cs
@@ -733,6 +733,30 @@ namespace Api.Services
return false;
}
+ public async Task<int> ChangePass(string currentPass,string newPass)
+ {
+
+ string myId = null;
+ if (_httpContext.HttpContext.User.FindFirstValue("id") != null)
+ {
+ myId = _httpContext.HttpContext.User.FindFirstValue("id").ToString();
+ }
+
+ User u = await _users.Find(user => user._id == myId).FirstOrDefaultAsync();
+
+ if (u != null)
+ {
+ if (checkPassword(currentPass, u.password))
+ {
+ u.password = hashPassword(newPass);
+ await _users.ReplaceOneAsync(x => x._id == u._id, u);
+ return 1;
+ }
+ return -1;
+ }
+ return -2;
+ }
+
}
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityChangePassword.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityChangePassword.kt
index fbe3f4d..2501f8a 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityChangePassword.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityChangePassword.kt
@@ -1,11 +1,102 @@
package com.example.brzodolokacije.Activities
+import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import android.widget.Button
+import android.widget.TextView
+import android.widget.Toast
+import androidx.core.view.isVisible
+import com.exam.DBHelper.Companion.activity
+import com.example.brzodolokacije.Models.UserReceive
+import com.example.brzodolokacije.R
+import com.example.brzodolokacije.Services.RetrofitHelper
+import com.example.brzodolokacije.Services.SharedPreferencesHelper
+import retrofit2.Call
+import retrofit2.Response
class ActivityChangePassword : AppCompatActivity() {
+
+ private lateinit var oldPass:TextView
+ private lateinit var oldPassError:TextView
+ private lateinit var newPass:TextView
+ private lateinit var newPassError:TextView
+ private lateinit var confirmPass:TextView
+ private lateinit var confirmPassError:TextView
+ private lateinit var forgotten:TextView
+ private lateinit var submit:Button
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_change_password)
+
+ oldPass=findViewById(R.id.changeDataOldPassword)
+ oldPassError=findViewById(R.id.ActivityChangePasswordOldError)
+ newPass=findViewById(R.id.tvActivityChangePasswordNewPass)
+ newPassError=findViewById(R.id.btnActivityChangePasswordNewError)
+ confirmPass=findViewById(R.id.ActivityChangePasswordNewPasswordConfirm)
+ confirmPassError=findViewById(R.id.btnActivityChangePasswordConfirmError)
+ forgotten=findViewById(R.id.btnActivityChangePasswordForgottenPass)
+ submit=findViewById(R.id.ActivityChangePasswordChangePassword)
+
+ oldPassError.isVisible=false
+ newPassError.isVisible=false
+ confirmPassError.isVisible=false
+
+ submit.setOnClickListener{
+ oldPassError.isVisible=false
+ newPassError.isVisible=false
+ confirmPassError.isVisible=false
+
+ if(oldPass.text.toString().trim().isNotEmpty()&&newPass.text.toString().trim().isNotEmpty()
+ &&confirmPass.text.toString().trim().isNotEmpty()){
+
+ if(newPass.text.toString().trim() == confirmPass.text.toString().trim()){
+
+ //PROVERI DA LI JE TRENUTA LOZINKA ISTA KAO TRENUTNI UNOS
+
+ val authApi= RetrofitHelper.getInstance()
+ val token= SharedPreferencesHelper.getValue("jwt",this@ActivityChangePassword)
+ val request=authApi.changePass("Bearer "+token)
+
+ request.enqueue(object : retrofit2.Callback<Int> {
+ override fun onResponse(call: Call<Int>, response: Response<Int>) {
+ if(response.isSuccessful()){
+ var done=response.body()!!
+ if(done==1){
+ Toast.makeText(this@ActivityChangePassword, "Lozinka je uspešno promenjena.", Toast.LENGTH_LONG).show();
+ }
+ else if(done==-1){
+ oldPassError.isVisible=true
+ oldPassError.text="Uneta lozinka nije odgovarajuća, pokušajte ponovo."
+ oldPassError.setTextColor(Color.RED)
+
+ }
+ else if(done==-2){
+ Toast.makeText(this@ActivityChangePassword, "Lozinka nije promenjena. Pokušajte ponovo", Toast.LENGTH_LONG).show();
+ }
+ }else{
+ if(response.errorBody()!=null)
+ Toast.makeText(this@ActivityChangePassword, response.errorBody()!!.string(), Toast.LENGTH_LONG).show();
+ }
+ }
+ override fun onFailure(call: Call<Int>, t: Throwable) {
+ Toast.makeText(
+ activity, t.toString(), Toast.LENGTH_LONG
+ ).show();
+ }
+ })
+ }
+ else{
+ confirmPassError.isVisible=true
+ confirmPassError.text="Lozinke se ne podudaraju."
+ confirmPassError.setTextColor(Color.RED)
+ }
+ }
+ }
+
+
+
+
}
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt
index d6e345b..23de46e 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt
@@ -9,6 +9,7 @@ import android.widget.Button
import androidx.core.content.ContextCompat.startActivity
import androidx.fragment.app.Fragment
import com.exam.DBHelper
+import com.example.brzodolokacije.Activities.ActivityChangePassword
import com.example.brzodolokacije.Activities.ActivityChangeUserData
import com.example.brzodolokacije.Activities.ActivityForgottenPassword
import com.example.brzodolokacije.Activities.ActivityLoginRegister
@@ -19,6 +20,7 @@ import com.example.brzodolokacije.Services.SharedPreferencesHelper
class FragmentMyProfileInfo : Fragment() {
private lateinit var logout:Button
private lateinit var changeAccount:Button
+ private lateinit var changePassword:Button
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
@@ -29,6 +31,7 @@ class FragmentMyProfileInfo : Fragment() {
logout=view.findViewById<View>(R.id.buttonLogOut) as Button
changeAccount=view.findViewById(R.id.changeAccountData)
+ changePassword=view.findViewById(R.id.ChangePassword)
logout.setOnClickListener{
logOut()
@@ -38,6 +41,10 @@ class FragmentMyProfileInfo : Fragment() {
val intent = Intent (getActivity(), ActivityChangeUserData::class.java)
getActivity()?.startActivity(intent)
}
+ changePassword.setOnClickListener {
+ val intent = Intent (getActivity(), ActivityChangePassword::class.java)
+ getActivity()?.startActivity(intent)
+ }
return view
}
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt
index 19b1bb5..960c56d 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt
@@ -121,4 +121,8 @@ interface IBackendApi {
@GET("/api/user/{newName}/changeMyName")
fun changeMyName(@Header("Authorization") authHeader:String,@Path("newName") newName:String):Call<Boolean>
+
+ @POST("/api/user/changePass")
+ fun changePass(@Header("Authorization") authHeader:String):Call<Int>
+
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_change_password.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_change_password.xml
index a7a1d5f..dc8243e 100644
--- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_change_password.xml
+++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_change_password.xml
@@ -154,7 +154,6 @@
android:hint="Unesi novu lozinku"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/changeDataNewPasswordConfirmInputt" />