From d27973528d76a0816ed71eb47a001a0c23df78f3 Mon Sep 17 00:00:00 2001
From: DKaverznev <ikaverzneva@mail.ru (>
Date: Wed, 19 Feb 2025 11:07:59 +0300
Subject: [PATCH] =?UTF-8?q?code:=20=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?=
 =?UTF-8?q?BasicAuthInterceptor=20=D0=B0=D0=B2=D1=82=D0=BE=D1=80=D0=B8?=
 =?UTF-8?q?=D0=B7=D0=B0=D1=86=D0=B8=D1=8E=20(=D0=BD=D0=B0=D0=B2=D0=B5?=
 =?UTF-8?q?=D1=80=D0=BD=D0=BE=D0=B5)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../myitschool/work/api/BasicAuthInterceptor.kt  | 16 ++++++++++++++++
 .../java/ru/myitschool/work/api/NetworkModule.kt |  6 ++++--
 .../ru/myitschool/work/api/RetrofitClient.kt     | 12 +++++++++---
 .../java/ru/myitschool/work/core/Constants.kt    |  2 +-
 .../ru/myitschool/work/ui/login/LoginFragment.kt | 10 ++++++++--
 .../ru/myitschool/work/ui/main/MainViewModel.kt  |  1 -
 .../ru/myitschool/work/utils/AuthPreferences.kt  | 12 ++++++++++++
 7 files changed, 50 insertions(+), 9 deletions(-)
 create mode 100644 app/src/main/java/ru/myitschool/work/api/BasicAuthInterceptor.kt

diff --git a/app/src/main/java/ru/myitschool/work/api/BasicAuthInterceptor.kt b/app/src/main/java/ru/myitschool/work/api/BasicAuthInterceptor.kt
new file mode 100644
index 0000000..cc10015
--- /dev/null
+++ b/app/src/main/java/ru/myitschool/work/api/BasicAuthInterceptor.kt
@@ -0,0 +1,16 @@
+package ru.myitschool.work.api
+
+import okhttp3.Credentials
+import okhttp3.Interceptor
+import okhttp3.Response
+
+class BasicAuthInterceptor(private val username: String, private val password: String) :
+    Interceptor {
+    override fun intercept(chain: Interceptor.Chain): Response {
+        val credential = Credentials.basic(username, password)
+        val request = chain.request().newBuilder()
+            .header("Authorization", credential)
+            .build()
+        return chain.proceed(request)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/myitschool/work/api/NetworkModule.kt b/app/src/main/java/ru/myitschool/work/api/NetworkModule.kt
index 9d6ad25..715f06f 100644
--- a/app/src/main/java/ru/myitschool/work/api/NetworkModule.kt
+++ b/app/src/main/java/ru/myitschool/work/api/NetworkModule.kt
@@ -1,9 +1,11 @@
 package ru.myitschool.work.api
 
+import android.content.Context
 import dagger.Module
 import dagger.Provides
 import dagger.hilt.InstallIn
 import dagger.hilt.components.SingletonComponent
+import dagger.hilt.android.qualifiers.ApplicationContext
 import ru.myitschool.work.api.login.ApiServiceLogin
 import ru.myitschool.work.api.main.ApiServiceMain
 import ru.myitschool.work.api.scan.ApiServiceScan
@@ -15,8 +17,8 @@ object NetworkModule {
 
     @Provides
     @Singleton
-    fun provideRetrofitClient(): RetrofitClient {
-        return RetrofitClient()
+    fun provideRetrofitClient(@ApplicationContext context: Context): RetrofitClient {
+        return RetrofitClient(context)
     }
 
     @Provides
diff --git a/app/src/main/java/ru/myitschool/work/api/RetrofitClient.kt b/app/src/main/java/ru/myitschool/work/api/RetrofitClient.kt
index 81b4bbd..afe3f13 100644
--- a/app/src/main/java/ru/myitschool/work/api/RetrofitClient.kt
+++ b/app/src/main/java/ru/myitschool/work/api/RetrofitClient.kt
@@ -1,7 +1,7 @@
 package ru.myitschool.work.api
 
-import com.google.gson.Gson
-import com.google.gson.GsonBuilder
+import android.content.Context
+import androidx.core.content.ContentProviderCompat.requireContext
 import okhttp3.OkHttpClient
 import retrofit2.Retrofit
 import retrofit2.converter.gson.GsonConverterFactory
@@ -9,15 +9,21 @@ import ru.myitschool.work.api.login.ApiServiceLogin
 import ru.myitschool.work.api.main.ApiServiceMain
 import ru.myitschool.work.api.scan.ApiServiceScan
 import ru.myitschool.work.core.Constants.SERVER_ADDRESS
+import ru.myitschool.work.utils.AuthPreferences
 import java.util.concurrent.TimeUnit
 
 
-class RetrofitClient {
+class RetrofitClient(private val context: Context) {
 
     private val serverAddress = SERVER_ADDRESS
+    private var authPreferences: AuthPreferences = AuthPreferences(context)
 
     private val httpClient = OkHttpClient.Builder()
         .connectTimeout(30, TimeUnit.SECONDS)
+        .addInterceptor(BasicAuthInterceptor(
+            authPreferences.getLogin() ?: "",
+            authPreferences.getPassword() ?: ""
+        ))
         .readTimeout(30, TimeUnit.SECONDS)
         .build()
 
diff --git a/app/src/main/java/ru/myitschool/work/core/Constants.kt b/app/src/main/java/ru/myitschool/work/core/Constants.kt
index 8f8138d..9cabb89 100644
--- a/app/src/main/java/ru/myitschool/work/core/Constants.kt
+++ b/app/src/main/java/ru/myitschool/work/core/Constants.kt
@@ -1,5 +1,5 @@
 package ru.myitschool.work.core
 
 object Constants {
-    const val SERVER_ADDRESS = "http://localhost:8090"
+    const val SERVER_ADDRESS = "http://192.168.1.113:8080"
 }
\ No newline at end of file
diff --git a/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt b/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt
index b4abbd9..8e3ab00 100644
--- a/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt
+++ b/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt
@@ -51,6 +51,10 @@ class LoginFragment : Fragment(R.layout.fragment_login) {
             addTextChangedListener(object : TextWatcher {
                 override fun afterTextChanged(s: Editable?) {
                     val login = s.toString()
+
+                    authPreferences.saveLogin(binding.username.text.toString())
+                    authPreferences.savePassword(binding.password.text.toString())
+
                     binding.login.isEnabled = validateLogin(login)
                 }
                 override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
@@ -79,8 +83,7 @@ class LoginFragment : Fragment(R.layout.fragment_login) {
                     binding.error.visibleOrGone(false)
 
                     authPreferences.saveLoginState(true)
-                    authPreferences.saveLogin(binding.username.text.toString()) // Сохраняем логин
-                    Toast.makeText(context, "Авторизация прошла успешно", Toast.LENGTH_SHORT).show()
+
                     navigateToMainScreen()
                 }
                 is LoginViewModel.LoginState.InvalidCredentials -> {
@@ -96,6 +99,9 @@ class LoginFragment : Fragment(R.layout.fragment_login) {
                         visibleOrGone(true)
                         text = "Ошибка авторизации"
                     }
+
+                    authPreferences.clearLoginState()
+
                     Log.d("Authentication", "Ошибка авторизации")
                 }
 
diff --git a/app/src/main/java/ru/myitschool/work/ui/main/MainViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/main/MainViewModel.kt
index f28cf79..9333dd0 100644
--- a/app/src/main/java/ru/myitschool/work/ui/main/MainViewModel.kt
+++ b/app/src/main/java/ru/myitschool/work/ui/main/MainViewModel.kt
@@ -52,7 +52,6 @@ class MainViewModel @Inject constructor(
         }
     }
 
-    // Sealed класс для состояний
     sealed class MainState {
         data object Initial : MainState()
         data object Loading : MainState()
diff --git a/app/src/main/java/ru/myitschool/work/utils/AuthPreferences.kt b/app/src/main/java/ru/myitschool/work/utils/AuthPreferences.kt
index 7bee323..200ad7e 100644
--- a/app/src/main/java/ru/myitschool/work/utils/AuthPreferences.kt
+++ b/app/src/main/java/ru/myitschool/work/utils/AuthPreferences.kt
@@ -16,6 +16,7 @@ class AuthPreferences(context: Context) {
         }
     }
 
+
     fun isLoggedIn(): Boolean {
         return sharedPreferences.getBoolean(KEY_IS_LOGGED_IN, false)
     }
@@ -38,6 +39,17 @@ class AuthPreferences(context: Context) {
         return sharedPreferences.getString("user_login", null)
     }
 
+    fun savePassword(login: String) {
+        sharedPreferences.edit().apply {
+            putString("user_password", login)
+            apply()
+        }
+    }
+
+    fun getPassword(): String? {
+        return sharedPreferences.getString("user_password", null)
+    }
+
     companion object {
         private const val PREFS_NAME = "AuthPreferences"
         private const val KEY_IS_LOGGED_IN = "is_logged_in"