Skip to content

Commit 9aa622e

Browse files
committed
UI changes & CodeView optimize
1 parent bf36c13 commit 9aa622e

37 files changed

+442
-60
lines changed

.idea/misc.xml

Lines changed: 21 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/dev/wolf/exploit_db/core/database/DatabaseModule.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.dev.wolf.exploit_db.core.database
22

33
import androidx.room.Room
44
import com.dev.wolf.exploit_db.core.database.migrations.Migration1To2
5+
import com.dev.wolf.exploit_db.core.database.migrations.Migration2To3
56
import org.koin.android.ext.koin.androidContext
67
import org.koin.dsl.module
78

@@ -13,7 +14,8 @@ val databaseModule
1314
ExploitDatabase::class.java,
1415
"exploit-db"
1516
).addMigrations(
16-
Migration1To2()
17+
Migration1To2(),
18+
Migration2To3()
1719
).build()
1820
}
1921
}

app/src/main/java/com/dev/wolf/exploit_db/core/database/ExploitDatabase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import com.dev.wolf.exploit_db.core.database.entity.*
1212
entities = [
1313
ExploitEntity::class, TagEntity::class, CveEntity::class, ExploitTagsEntity::class,
1414
ExploitCvesEntity::class, SuggestionEntity::class, TrackEntity::class
15-
], version = 2
15+
], version = 3
1616
)
1717
abstract class ExploitDatabase : RoomDatabase() {
1818

app/src/main/java/com/dev/wolf/exploit_db/core/database/entity/ExploitEntity.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ data class ExploitEntity(
2727
@ColumnInfo(name = "port") val port: String?,
2828
@ColumnInfo(name = "edb_id") val edb_id: String,
2929
@ColumnInfo(name = "code") val code: String?,
30+
@ColumnInfo(name = "code_lang") val codeLang: String?,
3031
) {
3132

3233
fun toExploit(tags: Set<Tag> = emptySet(),cve: Set<CVE> = emptySet()) = Exploit(
@@ -49,7 +50,8 @@ data class ExploitEntity(
4950
edb_id = this.edb_id,
5051
code = this.code,
5152
tags = tags,
52-
cve = cve
53+
cve = cve,
54+
code_lang = this.codeLang
5355
)
5456

5557
companion object {
@@ -70,7 +72,8 @@ data class ExploitEntity(
7072
portId = exploit.type?.key,
7173
port = exploit.port?.title,
7274
edb_id = exploit.edb_id,
73-
code = exploit.code
75+
code = exploit.code,
76+
codeLang = exploit.code_lang
7477
)
7578
}
7679
}

app/src/main/java/com/dev/wolf/exploit_db/core/database/entity/TrackEntity.kt

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package com.dev.wolf.exploit_db.core.database.entity
33
import androidx.room.ColumnInfo
44
import androidx.room.Entity
55
import androidx.room.PrimaryKey
6+
import com.dev.wolf.exploit_db.core.model.*
7+
import com.dev.wolf.exploit_db.utils.ext.toLocalDate
8+
import java.util.*
69

710
@Entity(tableName = "tracks")
811
data class TrackEntity(
@@ -23,4 +26,29 @@ data class TrackEntity(
2326
@ColumnInfo(name = "port") val port: String?,
2427
@ColumnInfo(name = "edb_id") val edb_id: String,
2528
@ColumnInfo(name = "code") val code: String?,
26-
)
29+
@ColumnInfo(name = "code_lang") val codeLang: String?,
30+
) {
31+
fun toExploit(tags: Set<Tag> = emptySet(), cve: Set<CVE> = emptySet()) = Exploit(
32+
id = this.id,
33+
title = this.title,
34+
url = this.url,
35+
isVerified = this.isVerified,
36+
author = this.author,
37+
createdAt = this.createdAt.toLocalDate() ?: Date(),
38+
isApplication = Pair(this.isApplication, this.isApplicationUrl),
39+
type = if (!this.type.isNullOrEmpty()) Type(
40+
title = this.type.orEmpty(),
41+
key = this.typeId.orEmpty()) else null,
42+
platform = if (!this.platform.isNullOrEmpty()) Platform(
43+
title = this.platform.orEmpty(),
44+
key = this.platformId.orEmpty()) else null,
45+
port = if (!this.port.isNullOrEmpty()) Port(
46+
title = this.port.orEmpty(),
47+
key = this.portId.orEmpty()) else null,
48+
edb_id = this.edb_id,
49+
code = this.code,
50+
tags = tags,
51+
cve = cve,
52+
code_lang = this.codeLang
53+
)
54+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.dev.wolf.exploit_db.core.database.migrations
2+
3+
import androidx.room.migration.Migration
4+
import androidx.sqlite.db.SupportSQLiteDatabase
5+
6+
class Migration2To3 : Migration(2, 3) {
7+
override fun migrate(database: SupportSQLiteDatabase) {
8+
database.execSQL("ALTER TABLE exploit ADD COLUMN code_lang TEXT DEFAULT ''")
9+
database.execSQL("ALTER TABLE tracks ADD COLUMN code_lang TEXT DEFAULT ''")
10+
}
11+
}

app/src/main/java/com/dev/wolf/exploit_db/core/model/Exploit.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ data class Exploit(
1919
val port: Port? = null,
2020
val edb_id : String,
2121
val cve : Set<CVE> = emptySet(),
22+
val code_lang : String? = null,
2223
val code : String? = null //HTML
2324
) : Parcelable {
2425

app/src/main/java/com/dev/wolf/exploit_db/core/parser/ExploitDbWebsite.kt

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package com.dev.wolf.exploit_db.core.parser
22

3-
import android.util.Log
43
import com.dev.wolf.exploit_db.base.domain.LoaderContext
54
import com.dev.wolf.exploit_db.core.model.*
65
import com.dev.wolf.exploit_db.utils.ext.*
76
import okhttp3.Headers
8-
import java.util.*
9-
import kotlin.collections.ArrayList
107

118
class ExploitDbWebsite(loaderContext: LoaderContext) : RemoteRepository(loaderContext) {
129

@@ -53,7 +50,7 @@ class ExploitDbWebsite(loaderContext: LoaderContext) : RemoteRepository(loaderCo
5350
if (tag.key.isNotEmpty())
5451
append("&tag=${tag.key}")
5552
}
56-
Log.d("Exploit_db_site", "url list : $url")
53+
//Log.d("Exploit_db_site", "url list : $url")
5754
val json = loaderContext.httpGet(url, PREDEFINED_HEADERS).parseJson().getJSONArray("data") ?: parseFailed("Invalid response")
5855
val total = json.length()
5956
val list = ArrayList<Exploit>(total)
@@ -92,15 +89,12 @@ class ExploitDbWebsite(loaderContext: LoaderContext) : RemoteRepository(loaderCo
9289
}
9390

9491
override suspend fun getDetails(exploit: Exploit): Exploit {
95-
val rowUrl = buildString {
96-
append("https://")
97-
append(defaultDomain)
98-
append("/raw/${exploit.edb_id}")
99-
}
100-
val code = loaderContext.httpGet(rowUrl).parseText()
101-
Log.d("Exploit_db_site", "code : $code")
92+
val code = loaderContext.httpGet(exploit.codeUrl()).parseText()
93+
val fileExtension = loaderContext.httpGet(exploit.downloadUrl())
94+
.headers["content-disposition"]?.substringAfterLast(".").orEmpty()
10295
return exploit.copy(
103-
code = code
96+
code = code,
97+
code_lang = fileExtension
10498
)
10599
}
106100

app/src/main/java/com/dev/wolf/exploit_db/core/prefs/AppSettings.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,22 @@ class AppSettings private constructor(private val prefs: SharedPreferences) :
4646

4747
val notificationLight by BoolPreferenceDelegate(KEY_NOTIFICATIONS_LIGHT, true)
4848

49+
val codeViewZoom by BoolPreferenceDelegate(KEY_CODEVIEW_ZOOM, true)
50+
51+
val codeViewWrapLine by BoolPreferenceDelegate(KEY_CODEVIEW_WRAP_LINE, true)
52+
53+
val codeViewLineNumber by BoolPreferenceDelegate(KEY_CODEVIEW_LINE_NUMBER, true)
54+
55+
var codeViewLightTheme by StringPreferenceDelegate(
56+
KEY_CODEVIEW_LIGHT_THEME,
57+
defValue = "github"
58+
)
59+
60+
var codeViewDarkTheme by StringPreferenceDelegate(
61+
KEY_CODEVIEW_DARK_THEME,
62+
defValue = "atom-one-dark"
63+
)
64+
4965

5066
@Deprecated("Use observe()")
5167
fun subscribe(listener: SharedPreferences.OnSharedPreferenceChangeListener) {
@@ -88,5 +104,10 @@ class AppSettings private constructor(private val prefs: SharedPreferences) :
88104
const val KEY_APP_VERSION = "app_version"
89105
const val PREFERRED_DNS_CLIENT = "preferred_dns_client"
90106
const val KEY_FEEDBACK_GITHUB = "about_feedback_github"
107+
const val KEY_CODEVIEW_LIGHT_THEME = "code_view_light_theme"
108+
const val KEY_CODEVIEW_DARK_THEME = "code_view_dark_theme"
109+
const val KEY_CODEVIEW_ZOOM = "code_view_zoom"
110+
const val KEY_CODEVIEW_WRAP_LINE = "code_view_wrap"
111+
const val KEY_CODEVIEW_LINE_NUMBER = "code_view_line_number"
91112
}
92113
}

app/src/main/java/com/dev/wolf/exploit_db/tracker/TrackWorker.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@ class TrackWorker(context: Context, workerParams: WorkerParameters) :
5656
return Result.success()
5757
}
5858
val workData = Data.Builder().putInt(DATA_TOTAL, listExploits.size)
59+
val notifiedList = repository.getTrackedList()
5960
listExploits.mapIndexed { index, it ->
6061
workData.putInt(DATA_PROGRESS, index)
6162
setProgress(workData.build())
62-
if (it.createdAt.isToday()){
63+
if (it.createdAt.isToday() && !notifiedList.contains(it)){
6364
repository.storeTrackResult(it)
6465
showNotification(it)
6566
success++

app/src/main/java/com/dev/wolf/exploit_db/tracker/TrackingRepository.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ class TrackingRepository(private val db: ExploitDatabase) {
1212
suspend fun getNewExploitCount(): Int {
1313
return db.tracksDao.findAll().count()
1414
}
15+
16+
suspend fun getTrackedList(): List<Exploit> {
17+
return db.tracksDao.findAll().map { it.toExploit() }
18+
}
19+
1520
suspend fun cleanup() {
1621
db.withTransaction { db.tracksDao.cleanup(Date().toLocalDate().orEmpty()) }
1722
}
@@ -34,7 +39,8 @@ class TrackingRepository(private val db: ExploitDatabase) {
3439
portId = trackedExploit.port?.key,
3540
port = trackedExploit.port?.title,
3641
edb_id = trackedExploit.edb_id,
37-
code = trackedExploit.code
42+
code = trackedExploit.code,
43+
codeLang = trackedExploit.code_lang
3844
)
3945
db.tracksDao.upsert(entity)
4046
}

app/src/main/java/com/dev/wolf/exploit_db/ui/detail/ui/DetailsActivity.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ import com.dev.wolf.exploit_db.base.widgets.ChipsView
2020
import com.dev.wolf.exploit_db.core.model.Exploit
2121
import com.dev.wolf.exploit_db.databinding.ActivityDetailsBinding
2222
import com.dev.wolf.exploit_db.utils.ShareHelper
23-
import com.dev.wolf.exploit_db.utils.ext.fromHTML
24-
import com.dev.wolf.exploit_db.utils.ext.getDisplayMessage
25-
import com.dev.wolf.exploit_db.utils.ext.textAndVisible
26-
import com.dev.wolf.exploit_db.utils.ext.toLocalDate
23+
import com.dev.wolf.exploit_db.utils.ext.*
2724
import com.google.android.material.snackbar.Snackbar
2825
import org.koin.androidx.viewmodel.ext.android.viewModel
2926
import org.koin.core.parameter.parametersOf
@@ -56,6 +53,9 @@ class DetailsActivity : BaseActivity<ActivityDetailsBinding>() {
5653
textViewAuthor.text = exploit.author
5754
textViewEdbId.text = exploit.edb_id
5855
textViewPlatform.textAndVisible = exploit.platform?.title
56+
namePlatform.setCompoundDrawablesWithIntrinsicBounds(
57+
exploit.platform?.key?.getPlatformDrawable() ?: R.drawable.ic_platform,
58+
0,0,0)
5959
textViewType.textAndVisible = exploit.type?.title
6060

6161
if (exploit.port != null)

0 commit comments

Comments
 (0)