123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- package ganserv
- import (
- "log"
- "net"
- "imuslab.com/zoraxy/mod/database"
- )
- type Node struct {
- Auth bool
- ClientID string
- MAC string
- Name string
- Description string
- ManagedIP net.IP
- LastSeen int64
- ClientVersion string
- PublicIP net.IP
- }
- type Network struct {
- UID string
- Name string
- Description string
- CIDR string
- Nodes []*Node
- }
- type NetworkManagerOptions struct {
- Database *database.Database
- AuthToken string
- ApiPort int
- }
- type NetworkMetaData struct {
- Desc string
- }
- type MemberMetaData struct {
- Name string
- }
- type NetworkManager struct {
- authToken string
- apiPort int
- ControllerID string
- option *NetworkManagerOptions
- networksMetadata map[string]NetworkMetaData
- }
- func NewNetworkManager(option *NetworkManagerOptions) *NetworkManager {
- option.Database.NewTable("ganserv")
-
- networkMeta := map[string]NetworkMetaData{}
- if option.Database.KeyExists("ganserv", "networkmeta") {
- option.Database.Read("ganserv", "networkmeta", &networkMeta)
- }
-
-
- instanceInfo, err := getControllerInfo(option.AuthToken, option.ApiPort)
- if err != nil {
- log.Println("ZeroTier connection failed: ", err.Error())
- return &NetworkManager{
- authToken: option.AuthToken,
- apiPort: option.ApiPort,
- ControllerID: "",
- option: option,
- networksMetadata: networkMeta,
- }
- }
- return &NetworkManager{
- authToken: option.AuthToken,
- apiPort: option.ApiPort,
- ControllerID: instanceInfo.Address,
- option: option,
- networksMetadata: networkMeta,
- }
- }
- func (m *NetworkManager) GetNetworkMetaData(netid string) *NetworkMetaData {
- md, ok := m.networksMetadata[netid]
- if !ok {
- return &NetworkMetaData{}
- }
- return &md
- }
- func (m *NetworkManager) WriteNetworkMetaData(netid string, meta *NetworkMetaData) {
- m.networksMetadata[netid] = *meta
- m.option.Database.Write("ganserv", "networkmeta", m.networksMetadata)
- }
- func (m *NetworkManager) GetMemberMetaData(netid string, memid string) *MemberMetaData {
- thisMemberData := MemberMetaData{}
- m.option.Database.Read("ganserv", "memberdata_"+netid+"_"+memid, &thisMemberData)
- return &thisMemberData
- }
- func (m *NetworkManager) WriteMemeberMetaData(netid string, memid string, meta *MemberMetaData) {
- m.option.Database.Write("ganserv", "memberdata_"+netid+"_"+memid, meta)
- }
|