docxTemplater/amo/model.go
Danil Solovyov f587933e73 Some changes
2022-08-10 18:53:34 +05:00

260 lines
9.6 KiB
Go

package amo
import (
"errors"
"github.com/dgrijalva/jwt-go"
"time"
)
type RespAuthCode struct {
TokenType string `json:"token_type"`
ExpiresIn int64 `json:"expires_in"`
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
}
type Lead struct {
Id int `json:"id"`
Name string `json:"name"`
Price int `json:"price"`
ResponsibleUserId int `json:"responsible_user_id"`
GroupId int `json:"group_id"`
StatusId int `json:"status_id"`
PipelineId int `json:"pipeline_id"`
LossReasonId int `json:"loss_reason_id"`
SourceId interface{} `json:"source_id"`
CreatedBy int `json:"created_by"`
UpdatedBy int `json:"updated_by"`
CreatedAt int `json:"created_at"`
UpdatedAt int `json:"updated_at"`
ClosedAt int `json:"closed_at"`
ClosestTaskAt interface{} `json:"closest_task_at"`
IsDeleted bool `json:"is_deleted"`
CustomFieldsValues []CustomField `json:"custom_fields_values"`
Score interface{} `json:"score"`
AccountId int `json:"account_id"`
IsPriceModifiedByRobot bool `json:"is_price_modified_by_robot"`
Links Links `json:"_links"`
Embedded struct {
Tags []Tags `json:"tags"`
CatalogElements []CatalogElement `json:"catalog_elements"`
LossReason []LossReason `json:"loss_reason"`
Companies []Company `json:"companies"`
Contacts []Contact `json:"contacts"`
} `json:"_embedded"`
}
type CustomField struct {
FieldId int `json:"field_id"`
FieldName string `json:"field_name"`
FieldCode interface{} `json:"field_code"`
FieldType string `json:"field_type"`
Values []struct {
Value string `json:"value"`
} `json:"values"`
IsComputed bool `json:"is_computed"`
}
type Tags struct {
Id int `json:"id"`
Name string `json:"name"`
Color interface{} `json:"color"`
}
type Contact struct {
Id int `json:"id"`
Name string `json:"name"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
ResponsibleUserId int `json:"responsible_user_id"`
GroupId int `json:"group_id"`
CreatedBy int `json:"created_by"`
UpdatedBy int `json:"updated_by"`
CreatedAt int `json:"created_at"`
UpdatedAt int `json:"updated_at"`
ClosestTaskAt interface{} `json:"closest_task_at"`
CustomFieldsValues []CustomField `json:"custom_fields_values"`
AccountId int `json:"account_id"`
Links Links `json:"_links"`
Embedded struct {
Tags []Tags `json:"tags"`
Leads []Lead `json:"leads"`
Customers []Customer `json:"customers"`
CatalogElements []CatalogElement `json:"catalog_elements"`
Companies []Company `json:"companies"`
} `json:"_embedded"`
}
type Company struct {
Id int `json:"id"`
Name string `json:"name"`
ResponsibleUserId int `json:"responsible_user_id"`
GroupId int `json:"group_id"`
CreatedBy int `json:"created_by"`
UpdatedBy int `json:"updated_by"`
CreatedAt int `json:"created_at"`
UpdatedAt int `json:"updated_at"`
ClosestTaskAt interface{} `json:"closest_task_at"`
CustomFieldsValues []CustomField `json:"custom_fields_values"`
AccountId int `json:"account_id"`
Links Links `json:"_links"`
Embedded struct {
Tags []Tags `json:"tags"`
} `json:"_embedded"`
}
type Customer struct {
Id int `json:"id"`
Links Links `json:"_links"`
}
type LossReason struct {
Id int `json:"id"`
Name string `json:"name"`
Sort int `json:"sort"`
CreatedAt int `json:"created_at"`
UpdatedAt int `json:"updated_at"`
Links Links `json:"_links"`
}
type CatalogElement struct {
Id int `json:"id"`
Metadata struct {
Quantity int `json:"quantity"`
CatalogId int `json:"catalog_id"`
} `json:"metadata"`
}
type Links struct {
Self struct {
Href string `json:"href"`
} `json:"self"`
}
type Account struct {
Id int64 `json:"id"`
Name string `json:"name"`
Subdomain string `json:"subdomain"`
CreatedAt int `json:"created_at"`
CreatedBy int `json:"created_by"`
UpdatedAt int `json:"updated_at"`
UpdatedBy int `json:"updated_by"`
CurrentUserId int `json:"current_user_id"`
Country string `json:"country"`
CustomersMode string `json:"customers_mode"`
IsUnsortedOn bool `json:"is_unsorted_on"`
IsLossReasonEnabled bool `json:"is_loss_reason_enabled"`
IsHelpbotEnabled bool `json:"is_helpbot_enabled"`
IsTechnicalAccount bool `json:"is_technical_account"`
ContactNameDisplayOrder int `json:"contact_name_display_order"`
AmojoId string `json:"amojo_id"`
Uuid string `json:"uuid"`
Version int `json:"version"`
Links Links `json:"_links"`
Embedded struct {
AmojoRights struct {
CanDirect bool `json:"can_direct"`
CanCreateGroups bool `json:"can_create_groups"`
} `json:"amojo_rights"`
UsersGroups []struct {
Id int `json:"id"`
Name string `json:"name"`
Uuid interface{} `json:"uuid"`
} `json:"users_groups"`
TaskTypes []struct {
Id int `json:"id"`
Name string `json:"name"`
Color interface{} `json:"color"`
IconId interface{} `json:"icon_id"`
Code string `json:"code"`
} `json:"task_types"`
EntityNames struct {
Leads struct {
Ru struct {
Gender string `json:"gender"`
PluralForm struct {
Dative string `json:"dative"`
Default string `json:"default"`
Genitive string `json:"genitive"`
Accusative string `json:"accusative"`
Instrumental string `json:"instrumental"`
Prepositional string `json:"prepositional"`
} `json:"plural_form"`
SingularForm struct {
Dative string `json:"dative"`
Default string `json:"default"`
Genitive string `json:"genitive"`
Accusative string `json:"accusative"`
Instrumental string `json:"instrumental"`
Prepositional string `json:"prepositional"`
} `json:"singular_form"`
} `json:"ru"`
En struct {
SingularForm struct {
Default string `json:"default"`
} `json:"singular_form"`
PluralForm struct {
Default string `json:"default"`
} `json:"plural_form"`
Gender string `json:"gender"`
} `json:"en"`
Es struct {
SingularForm struct {
Default string `json:"default"`
} `json:"singular_form"`
PluralForm struct {
Default string `json:"default"`
} `json:"plural_form"`
Gender string `json:"gender"`
} `json:"es"`
} `json:"leads"`
} `json:"entity_names"`
DatetimeSettings struct {
DatePattern string `json:"date_pattern"`
ShortDatePattern string `json:"short_date_pattern"`
ShortTimePattern string `json:"short_time_pattern"`
DateFormant string `json:"date_formant"`
TimeFormat string `json:"time_format"`
Timezone string `json:"timezone"`
TimezoneOffset string `json:"timezone_offset"`
} `json:"datetime_settings"`
} `json:"_embedded"`
}
// XAuthToken - Одноразовый токен передаваемый в заголовке запроса, при использовании this.$authorizedAjax().
//
// Заголовок запроса: x-auth-token
//
// Алгоритм подписи токена: HS256, в качестве ключа используется secret_key интеграции
type XAuthToken struct {
Iss string `json:"iss"` // Адрес аккаунта
Aud string `json:"aud"` // Базовый адрес, сформированный исходя из значения redirect_uri в интеграции
Jti string `json:"jti"` // UUID токена
Iat int64 `json:"iat"` // Timestamp, когда был выдан токен
Nbf int64 `json:"nbf"` // Timestamp, когда токен начинает действовать
Exp int64 `json:"exp"` // Timestamp, когда токен будет просрочен
AccountId int64 `json:"account_id"` // ID аккаунта, из которого был сделан запрос
Subdomain string `json:"subdomain"` // Субдомен, из которого был сделан запрос
ClientUuid string `json:"client_uuid"` // UUID интеграции,
// которая сделала запрос
UserId int64 `json:"user_id"` // ID пользователя, из под которого был сделан запрос
IsAdmin bool `json:"is_admin"` // Является ли пользователь админом
jwt.Claims
}
func (t *XAuthToken) Valid() error {
now := time.Now().Unix()
//if now >= t.Nbf && now <= t.Exp {
// return nil
//}
if now <= t.Exp {
return nil
}
return errors.New("invalid token")
}