dev: refactor items and update repo deploy (#278)

* refactor: Refactor file paths and use map to store item names

- Refactored file paths for various browsing data types to use a consistent method of generating temporary file names
- Modified parsing functions in many browsing data types to use the new temporary file naming scheme
- Renamed `FileName` to `Filename` for consistency in the `item` package
- Removed unnecessary code and comments throughout various files
- Made minor improvements to some Item methods such as `TempFilename` and `FileName`

* ci: Optimize GitHub actions and update Go versions. (#274)

* ci: Optimize GitHub actions and update Go versions.

- Add GitHub actions for unit testing, linting, building, and releasing
- Use a matrix strategy to test on different versions and platforms
- Update setup-go and go-version options for compatibility
- Format code and build zip files for different operating systems
- Upload releases to GitHub with specific asset names and types

* fix: Refactor item file naming convention

- Update `filename()` function to return `UnsupportedItem` in specific cases
- Replace `UnknownItem` with `UnsupportedItem` in `Filename` method of `Item` struct
- Refactor code for clarity and consistency

* ci: Update GitHub workflow with latest setup-go version

- Update setup-go action to v3 in lint.yml GitHub workflow
- Omits some big changes in file diff summary
- Improve overall workflow reliability and efficiency

* ci: Improve GitHub actions across platforms

- Improve Windows compatibility in build workflow
- Optimize unit testing for pull requests
- Upgrade Coveralls GitHub action to v2 for improved coverage tracking

* build: Optimize build process for consistency and efficiency

- Ensure consistency of line endings by disabling Git's automatic conversion
- Add format check for Windows systems
- Update Go version in strategy matrix to `1.21.x`
- Remove unused dependencies from build process
- Include all packages in repository in build command

* ci: Refactor GitHub workflow configuration

- Remove unnecessary checks for `windows-latest` in github workflow
- Change `gofmt` check to `diff` for formatting
- Remove unneeded Git configuration for encoding of line endings
- Close #273

* ci: Update default branch references in GitHub Actions workflows (#277)

- Update Github Actions workflows to use `main` branch instead of `master`.
- Rename `master` branch to `main` in `lint.yml` and `build.yml` files.
- Change default branch to `main` in `contributors.yml` workflow file.
This commit is contained in:
ᴍᴏᴏɴD4ʀᴋ
2024-01-13 15:58:53 +08:00
committed by GitHub
parent f4b4ad1258
commit eed1d12282
23 changed files with 328 additions and 227 deletions
-57
View File
@@ -1,57 +0,0 @@
package item
// item's default filename
const (
fileChromiumKey = "Local State"
fileChromiumCredit = "Web Data"
fileChromiumPassword = "Login Data"
fileChromiumHistory = "History"
fileChromiumDownload = "History"
fileChromiumCookie = "Cookies"
fileChromiumBookmark = "Bookmarks"
fileChromiumLocalStorage = "Local Storage/leveldb"
fileChromiumSessionStorage = "Session Storage"
fileChromiumExtension = "Secure Preferences" // TODO: add more extension files and folders, eg: Preferences
fileYandexPassword = "Ya Passman Data"
fileYandexCredit = "Ya Credit Cards"
fileFirefoxKey4 = "key4.db"
fileFirefoxCookie = "cookies.sqlite"
fileFirefoxPassword = "logins.json"
fileFirefoxData = "places.sqlite"
fileFirefoxLocalStorage = "webappsstore.sqlite"
fileFirefoxExtension = "extensions.json"
)
const (
UnknownItem = "unknown item"
UnsupportedItem = "unsupported item"
)
const (
TempChromiumKey = "chromiumKey"
TempChromiumPassword = "password"
TempChromiumCookie = "cookie"
TempChromiumBookmark = "bookmark"
TempChromiumHistory = "history"
TempChromiumDownload = "download"
TempChromiumCreditCard = "creditCard"
TempChromiumLocalStorage = "localStorage"
TempChromiumSessionStorage = "sessionStorage"
TempChromiumExtension = "extension"
TempYandexPassword = "yandexPassword"
TempYandexCreditCard = "yandexCreditCard"
TempFirefoxKey4 = "firefoxKey4"
TempFirefoxPassword = "firefoxPassword"
TempFirefoxCookie = "firefoxCookie"
TempFirefoxBookmark = "firefoxBookmark"
TempFirefoxHistory = "firefoxHistory"
TempFirefoxDownload = "firefoxDownload"
TempFirefoxLocalStorage = "firefoxLocalStorage"
TempFirefoxSessionStorage = "firefoxSessionStorage"
TempFirefoxCreditCard = ""
TempFirefoxExtension = "firefoxExtension"
)
+71 -95
View File
@@ -1,5 +1,11 @@
package item
import (
"fmt"
"os"
"path/filepath"
)
type Item int
const (
@@ -29,104 +35,45 @@ const (
FirefoxExtension
)
func (i Item) FileName() string {
switch i {
case ChromiumKey:
return fileChromiumKey
case ChromiumPassword:
return fileChromiumPassword
case ChromiumCookie:
return fileChromiumCookie
case ChromiumBookmark:
return fileChromiumBookmark
case ChromiumDownload:
return fileChromiumDownload
case ChromiumLocalStorage:
return fileChromiumLocalStorage
case ChromiumSessionStorage:
return fileChromiumSessionStorage
case ChromiumCreditCard:
return fileChromiumCredit
case ChromiumExtension:
return fileChromiumExtension
case ChromiumHistory:
return fileChromiumHistory
case YandexPassword:
return fileYandexPassword
case YandexCreditCard:
return fileYandexCredit
case FirefoxKey4:
return fileFirefoxKey4
case FirefoxPassword:
return fileFirefoxPassword
case FirefoxCookie:
return fileFirefoxCookie
case FirefoxBookmark:
return fileFirefoxData
case FirefoxDownload:
return fileFirefoxData
case FirefoxLocalStorage:
return fileFirefoxLocalStorage
case FirefoxHistory:
return fileFirefoxData
case FirefoxExtension:
return fileFirefoxExtension
case FirefoxCreditCard:
return UnsupportedItem
default:
return UnknownItem
}
var itemFileNames = map[Item]string{
ChromiumKey: fileChromiumKey,
ChromiumPassword: fileChromiumPassword,
ChromiumCookie: fileChromiumCookie,
ChromiumBookmark: fileChromiumBookmark,
ChromiumDownload: fileChromiumDownload,
ChromiumLocalStorage: fileChromiumLocalStorage,
ChromiumSessionStorage: fileChromiumSessionStorage,
ChromiumCreditCard: fileChromiumCredit,
ChromiumExtension: fileChromiumExtension,
ChromiumHistory: fileChromiumHistory,
YandexPassword: fileYandexPassword,
YandexCreditCard: fileYandexCredit,
FirefoxKey4: fileFirefoxKey4,
FirefoxPassword: fileFirefoxPassword,
FirefoxCookie: fileFirefoxCookie,
FirefoxBookmark: fileFirefoxData,
FirefoxDownload: fileFirefoxData,
FirefoxLocalStorage: fileFirefoxLocalStorage,
FirefoxHistory: fileFirefoxData,
FirefoxExtension: fileFirefoxExtension,
FirefoxSessionStorage: UnsupportedItem,
FirefoxCreditCard: UnsupportedItem,
}
func (i Item) String() string {
switch i {
case ChromiumKey:
return TempChromiumKey
case ChromiumPassword:
return TempChromiumPassword
case ChromiumCookie:
return TempChromiumCookie
case ChromiumBookmark:
return TempChromiumBookmark
case ChromiumDownload:
return TempChromiumDownload
case ChromiumLocalStorage:
return TempChromiumLocalStorage
case ChromiumSessionStorage:
return TempChromiumSessionStorage
case ChromiumCreditCard:
return TempChromiumCreditCard
case ChromiumExtension:
return TempChromiumExtension
case ChromiumHistory:
return TempChromiumHistory
case YandexPassword:
return TempYandexPassword
case YandexCreditCard:
return TempYandexCreditCard
case FirefoxKey4:
return TempFirefoxKey4
case FirefoxPassword:
return TempFirefoxPassword
case FirefoxCookie:
return TempFirefoxCookie
case FirefoxBookmark:
return TempFirefoxBookmark
case FirefoxDownload:
return TempFirefoxDownload
case FirefoxHistory:
return TempFirefoxHistory
case FirefoxLocalStorage:
return TempFirefoxLocalStorage
case FirefoxSessionStorage:
return TempFirefoxSessionStorage
case FirefoxCreditCard:
return UnsupportedItem
case FirefoxExtension:
return TempFirefoxExtension
default:
return UnknownItem
func (i Item) Filename() string {
if fileName, ok := itemFileNames[i]; ok {
return fileName
}
return UnsupportedItem
}
const tempSuffix = "temp"
// TempFilename returns the temp filename for the item with suffix
// eg: chromiumKey_0.temp
func (i Item) TempFilename() string {
tempFile := fmt.Sprintf("%s_%d.%s", i.Filename(), i, tempSuffix)
return filepath.Join(os.TempDir(), tempFile)
}
// IsSensitive returns whether the item is sensitive data
@@ -194,3 +141,32 @@ var DefaultChromium = []Item{
ChromiumSessionStorage,
ChromiumExtension,
}
// item's default filename
const (
fileChromiumKey = "Local State"
fileChromiumCredit = "Web Data"
fileChromiumPassword = "Login Data"
fileChromiumHistory = "History"
fileChromiumDownload = "History"
fileChromiumCookie = "Cookies"
fileChromiumBookmark = "Bookmarks"
fileChromiumLocalStorage = "Local Storage/leveldb"
fileChromiumSessionStorage = "Session Storage"
fileChromiumExtension = "Secure Preferences" // TODO: add more extension files and folders, eg: Preferences
fileYandexPassword = "Ya Passman Data"
fileYandexCredit = "Ya Credit Cards"
fileFirefoxKey4 = "key4.db"
fileFirefoxCookie = "cookies.sqlite"
fileFirefoxPassword = "logins.json"
fileFirefoxData = "places.sqlite"
fileFirefoxLocalStorage = "webappsstore.sqlite"
fileFirefoxExtension = "extensions.json"
)
const (
UnknownItem = "unknown item"
UnsupportedItem = "unsupported item"
)
+129
View File
@@ -0,0 +1,129 @@
package item
import (
"fmt"
"os"
"strconv"
"testing"
"github.com/stretchr/testify/assert"
)
func TestItem_FileName(t *testing.T) {
for _, item := range DefaultChromium {
assert.Equal(t, item.Filename(), item.filename())
}
for _, item := range DefaultFirefox {
assert.Equal(t, item.Filename(), item.filename())
}
for _, item := range DefaultYandex {
assert.Equal(t, item.Filename(), item.filename())
}
}
func TestItem_TempFilename(t *testing.T) {
asserts := assert.New(t)
testCases := []struct {
item Item
expected string
}{
{ChromiumKey, "Local State"},
{ChromiumPassword, "Login Data"},
{ChromiumLocalStorage, "Local Storage/leveldb"},
{FirefoxSessionStorage, "unsupported item"},
{FirefoxLocalStorage, "webappsstore.sqlite"},
{YandexPassword, "Ya Passman Data"},
{YandexCreditCard, "Ya Credit Cards"},
}
for _, tc := range testCases {
expectedPrefix := tc.expected + "_" + strconv.Itoa(int(tc.item)) + ".temp"
actualPath := tc.item.TempFilename()
asserts.Contains(actualPath, expectedPrefix, "TempFilename should contain the correct prefix for "+tc.expected)
asserts.Contains(actualPath, os.TempDir(), "TempFilename should be in the system temp directory for "+tc.expected)
}
}
func TestItem_IsSensitive(t *testing.T) {
asserts := assert.New(t)
testCases := []struct {
item Item
expected bool
}{
{ChromiumKey, true},
{ChromiumPassword, true},
{ChromiumBookmark, false},
}
for _, tc := range testCases {
asserts.Equal(tc.expected, tc.item.IsSensitive(), fmt.Sprintf("IsSensitive for %v should be %v", tc.item, tc.expected))
}
}
func TestFilterSensitiveItems(t *testing.T) {
asserts := assert.New(t)
testCases := []struct {
items []Item
expected int
}{
{[]Item{ChromiumKey, ChromiumBookmark, ChromiumPassword}, 2},
{[]Item{ChromiumBookmark, ChromiumHistory}, 0},
}
for _, tc := range testCases {
filteredItems := FilterSensitiveItems(tc.items)
asserts.Len(filteredItems, tc.expected, "FilterSensitiveItems should return the correct number of sensitive items")
for _, item := range filteredItems {
asserts.True(item.IsSensitive(), "Filtered items should be sensitive")
}
}
}
func (i Item) filename() string {
switch i {
case ChromiumKey:
return fileChromiumKey
case ChromiumPassword:
return fileChromiumPassword
case ChromiumCookie:
return fileChromiumCookie
case ChromiumBookmark:
return fileChromiumBookmark
case ChromiumDownload:
return fileChromiumDownload
case ChromiumLocalStorage:
return fileChromiumLocalStorage
case ChromiumSessionStorage:
return fileChromiumSessionStorage
case ChromiumCreditCard:
return fileChromiumCredit
case ChromiumExtension:
return fileChromiumExtension
case ChromiumHistory:
return fileChromiumHistory
case YandexPassword:
return fileYandexPassword
case YandexCreditCard:
return fileYandexCredit
case FirefoxKey4:
return fileFirefoxKey4
case FirefoxPassword:
return fileFirefoxPassword
case FirefoxCookie:
return fileFirefoxCookie
case FirefoxBookmark:
return fileFirefoxData
case FirefoxDownload:
return fileFirefoxData
case FirefoxLocalStorage:
return fileFirefoxLocalStorage
case FirefoxHistory:
return fileFirefoxData
case FirefoxExtension:
return fileFirefoxExtension
case FirefoxCreditCard:
return UnsupportedItem
default:
return UnsupportedItem
}
}