2022-07-28 15:00:43 +00:00
|
|
|
package amo
|
|
|
|
|
2022-08-10 13:53:34 +00:00
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"github.com/dgrijalva/jwt-go"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
2022-07-28 15:00:43 +00:00
|
|
|
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"`
|
|
|
|
}
|
2022-08-10 13:53:34 +00:00
|
|
|
|
|
|
|
// 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")
|
|
|
|
}
|