allinssl/backend/internal/access/access.go

149 lines
3.0 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package access
import (
"ALLinSSL/backend/public"
"fmt"
"strings"
"time"
)
func GetSqlite() (*public.Sqlite, error) {
s, err := public.NewSqlite("data/data.db", "")
if err != nil {
return nil, err
}
s.TableName = "access"
return s, nil
}
func GetList(search string, p, limit int64) ([]map[string]any, int, error) {
var data []map[string]any
var count int64
s, err := GetSqlite()
if err != nil {
return data, 0, err
}
defer s.Close()
var limits []int64
if p >= 0 && limit >= 0 {
limits = []int64{0, limit}
if p > 1 {
limits[0] = (p - 1) * limit
limits[1] = limit
}
}
if search != "" {
count, err = s.Where("name like ? or type like ?", []interface{}{"%" + search + "%", "%" + search + "%"}).Count()
data, err = s.Where("name like ? or type like ?", []interface{}{"%" + search + "%", "%" + search + "%"}).Order("update_time", "desc").Limit(limits).Select()
} else {
count, err = s.Count()
data, err = s.Order("update_time", "desc").Limit(limits).Select()
}
if err != nil {
return data, 0, err
}
ATMap := GetAccessTypeMap("name", "type")
for _, v := range data {
v["access_type"] = ATMap[v["type"].(string)]
}
return data, int(count), nil
}
func GetAll(Type string) ([]map[string]any, error) {
var data []map[string]any
s, err := GetSqlite()
if err != nil {
return data, err
}
defer s.Close()
ATMap := GetAccessTypeMap("type", "name")
if Type != "" {
if Type == "dns" {
TypeL := strings.Join(ATMap["dns"], "','")
data, err = s.Where(fmt.Sprintf("type in ('%s')", TypeL), []interface{}{}).Select()
} else {
Type := strings.Split(strings.TrimPrefix(Type, "-"), "-")[0]
data, err = s.Where("type = ?", []interface{}{Type}).Select()
}
} else {
data, err = s.Select()
}
if err != nil {
return data, err
}
return data, nil
}
func GetAccess(ID string) (map[string]any, error) {
s, err := GetSqlite()
if err != nil {
return nil, err
}
defer s.Close()
data, err := s.Where("id = ?", []interface{}{ID}).Select()
if err != nil {
return nil, err
}
if len(data) == 0 {
return nil, fmt.Errorf("API授权不存在%s", ID)
}
return data[0], nil
}
func AddAccess(config, name, typ string) error {
s, err := GetSqlite()
if err != nil {
return err
}
defer s.Close()
now := time.Now().Format("2006-01-02 15:04:05")
_, err = s.Insert(map[string]any{
"name": name,
"type": typ,
"config": config,
"create_time": now,
"update_time": now,
})
if err != nil {
return err
}
return nil
}
func UpdateAccess(id, config, name string) error {
s, err := GetSqlite()
if err != nil {
return err
}
defer s.Close()
now := time.Now().Format("2006-01-02 15:04:05")
_, err = s.Where("id = ?", []interface{}{id}).Update(map[string]any{
"name": name,
"config": config,
"update_time": now,
})
if err != nil {
return err
}
return nil
}
func DelAccess(id string) error {
s, err := GetSqlite()
if err != nil {
return err
}
defer s.Close()
_, err = s.Where("id = ?", []interface{}{id}).Delete()
if err != nil {
return err
}
return nil
}