mirror of
https://github.com/blacktop/ipsw.git
synced 2026-05-08 12:22:26 +00:00
115 lines
3.3 KiB
Go
115 lines
3.3 KiB
Go
// Package model contains the IPSW model for the database.
|
|
package model
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var (
|
|
ErrNotFound = errors.New("not found")
|
|
ErrSymExists = errors.New("symbol exists")
|
|
)
|
|
|
|
// Platform represents supported Apple platforms
|
|
type Platform string
|
|
|
|
const (
|
|
PlatformIOS Platform = "iOS"
|
|
PlatformMacOS Platform = "macOS"
|
|
PlatformWatchOS Platform = "watchOS"
|
|
PlatformTvOS Platform = "tvOS"
|
|
PlatformVisionOS Platform = "visionOS"
|
|
)
|
|
|
|
// Ipsw is the model for an Ipsw file.
|
|
type Ipsw struct {
|
|
ID string `gorm:"primaryKey" json:"id"`
|
|
Name string `json:"name,omitempty"`
|
|
Version string `gorm:"index:idx_platform_version,priority:2" json:"version,omitempty"`
|
|
BuildID string `gorm:"column:buildid" json:"buildid,omitempty"`
|
|
Platform Platform `gorm:"type:varchar(20);index:idx_platform_version,priority:1" json:"platform,omitempty"`
|
|
Devices []*Device `gorm:"many2many:ipsw_devices;" json:"devices,omitempty"`
|
|
Kernels []*Kernelcache `gorm:"many2many:ipsw_kernels;" json:"kernels,omitempty"`
|
|
DSCs []*DyldSharedCache `gorm:"many2many:ipsw_dscs;" json:"dscs,omitempty"`
|
|
FileSystem []*Macho `gorm:"many2many:ipsw_files;" json:"file_system,omitempty"`
|
|
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
DeletedAt gorm.DeletedAt `gorm:"index"`
|
|
}
|
|
|
|
type Device struct {
|
|
Name string `gorm:"primaryKey" json:"name"`
|
|
}
|
|
|
|
// Kernelcache is the model for a kernelcache.
|
|
type Kernelcache struct {
|
|
UUID string `gorm:"primaryKey" json:"uuid"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"`
|
|
|
|
Version string `json:"version,omitempty"`
|
|
Kexts []*Macho `gorm:"many2many:kernelcache_kexts;" json:"kexts,omitempty"`
|
|
}
|
|
|
|
// DyldSharedCache is the model for a dyld_shared_cache.
|
|
type DyldSharedCache struct {
|
|
UUID string `gorm:"primaryKey" json:"uuid"`
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
DeletedAt gorm.DeletedAt `gorm:"index"`
|
|
|
|
SharedRegionStart uint64 `json:"shared_region_start,omitempty"`
|
|
Images []*Macho `gorm:"many2many:dsc_images;" json:"images,omitempty"`
|
|
}
|
|
|
|
type Path struct {
|
|
// swagger:ignore
|
|
ID uint `gorm:"primaryKey" json:"id"`
|
|
Path string `gorm:"uniqueIndex;not null" json:"path"`
|
|
}
|
|
|
|
type Macho struct {
|
|
UUID string `gorm:"primaryKey" json:"uuid"`
|
|
// swagger:ignore
|
|
PathID uint
|
|
Path Path `gorm:"foreignKey:PathID"`
|
|
TextStart uint64 `gorm:"type:bigint" json:"text_start,omitempty"`
|
|
TextEnd uint64 `gorm:"type:bigint" json:"text_end,omitempty"`
|
|
Symbols []*Symbol `gorm:"many2many:macho_syms;"`
|
|
}
|
|
|
|
func (m Macho) GetPath() string {
|
|
return m.Path.Path
|
|
}
|
|
|
|
type Name struct {
|
|
// swagger:ignore
|
|
ID uint `gorm:"primaryKey"`
|
|
Name string `gorm:"uniqueIndex" json:"name,omitempty"`
|
|
}
|
|
|
|
// swagger:model
|
|
type Symbol struct {
|
|
// swagger:ignore
|
|
ID uint `gorm:"primaryKey"`
|
|
// swagger:ignore
|
|
NameID uint
|
|
Name Name `gorm:"foreignKey:NameID"`
|
|
Start uint64 `gorm:"type:bigint" json:"start"`
|
|
End uint64 `gorm:"type:bigint" json:"end"`
|
|
}
|
|
|
|
func (s Symbol) GetName() string {
|
|
return s.Name.Name
|
|
}
|
|
|
|
func (s Symbol) String() string {
|
|
return fmt.Sprintf("%#x: %s", s.Start, s.Name.Name)
|
|
}
|