feat: Added logic for work with support API and removed mocks.

This commit is contained in:
Назар Гольченко 2025-10-17 16:38:48 +03:00
parent d4d0f46b99
commit de940a6e05
2 changed files with 42 additions and 79 deletions

View File

@ -3,7 +3,6 @@ package profileHandler
import (
"fmt"
"runtime/debug"
"strings"
"gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService/internal/application/constants"
"gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService/internal/application/types"
@ -210,11 +209,22 @@ func (t *handler) universalTextHandler(ctx tele.Context) error {
} else if len(vacancies) == 0 {
return ctx.Send(constants.NoVacanciesBotMessage)
}
needUpdateUser = false
// Set menu
mainKeys = &tele.ReplyMarkup{RemoveKeyboard: true}
msg = strings.Join(vacancies, "\n")
for _, vacancy := range vacancies {
_, err = t.bot.Send(
&tele.Chat{ID: user.ID},
vacancy,
&tele.SendOptions{
ParseMode: tele.ModeHTML,
},
)
if err != nil {
t.logger.Error(fmt.Sprintf("%v: %v", op, err.Error()))
}
}
return nil
} else {
needUpdateUser = false
msg = constants.UnknownCommandBotMessage

View File

@ -4,102 +4,55 @@ import (
"context"
pbVC "gitea.cybertalant.ru/VisionCareerMiniapp/DataManagement/pb/golang"
"gitea.cybertalant.ru/VisionCareerMiniapp/MiniappGoService/internal/application/constants"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/metadata"
)
type grpcClient struct {
apiKey string
// conn *grpc.ClientConn
// vсClient pbVC.VisionCareerApiServiceV1Client
apiKey string
conn *grpc.ClientConn
vсClient pbVC.VisionCareerApiServiceV1Client
}
func (t *grpcClient) Close() error {
// return t.conn.Close()
return nil
return t.conn.Close()
}
func (t *grpcClient) GetUserVacancies(ctx context.Context, in *pbVC.GetUserVacanciesRequest, opts ...grpc.CallOption) (*pbVC.GetUserVacanciesResponse, error) {
// // Append api key to Meta-data
// md := metadata.Pairs(constants.APIKey.String(), t.apiKey)
// ctx = metadata.NewOutgoingContext(ctx, md)
// Append api key to Meta-data
md := metadata.Pairs(constants.APIKey.String(), t.apiKey)
ctx = metadata.NewOutgoingContext(ctx, md)
// return t.vсClient.GetUserVacancies(ctx, in, opts...)
return &pbVC.GetUserVacanciesResponse{
Status: "success",
Items: []string{
"<b>THIS IS MOCKS</b>",
`
ЗП: до 500 000 рублей net
Penetration Tester Red Team, Wildberries & Russ 💜
Уровень: Middle/Senior
Формат: удаленка или гибрид
📭 Вместе с масштабным развитием IT направления Wildberries и Russ развивает информационную безопасность. Мы решаем сложные и разнообразные задачи: от повышения защищенности каждого сервиса до развития безопасности в рамках всей нашей инфраструктуры. Сейчас мы в поиске опытного Penetration Tester в Red Team. Команда занимается проведением аудитов безопасности инфраструктуры, продуктов и сервисов в различных форматах (тестирования на проникновение, анализ защищенности, кибер-учения).
📝 Ключевые задачи:
Проведение аудитов в формате тестирования на проникновение (внешняя и внутренняя инфраструктура, социалка)
Проведение аудитов в формате анализа защищенности (веб и мобильные приложения)
Проведение аудитов в формате Red/Purple Teaming
Поиск и эксплуатация уязвимостей веб и мобильных приложений
Поиск и эксплуатация уязвимостей и недостатков конфигурации ОС Linux а также специфичных для нее сервисов
Поиск и эксплуатация уязвимостей OC Windows и недостатков конфигурации Active Directory
Поиск и эксплуатация уязвимостей и недостатков конфигурации СУБД, систем виртуализации и контейнеризации
Оформление найденных уязвимостей для отчетов по итогам проектов
💫 Основные требования:
Опыт проведения проектов по анализу защищенности веб и мобильных приложений
Опыт проведения проектов по тестированию на проникновение (внешняя и внутренняя инфраструктура)
Опыт поиска и эксплуатации уязвимостей веб и мобильных приложений
Опыт поиска и эксплуатации уязвимостей ОС Linux
Опыт поиска и эксплуатации уязвимостей OC Windows и недостатков конфигурации AD
Опыт поиска и эксплуатации уязвимостей и недостатков конфигурации систем виртуализации и контейнеризации
Знание любого языка программирования на уровне достаточном для понимания/создания эксплойтов и автоматизации задач по поиску уязвимостей
Будет плюсом:
Образование (бакалавр, магистр) в одном из технических вузов РФ (МИФИ, МГТУ им. Баумана, МГУ)
Наличие профильных сертификатов (OSCP, OSWE, OSEP, CRTO)
Выступления на крупных конференциях и митапах, например PHDays, OffZone, Standoff и других
Участие в CTF и Bug Bounty
🔥 Что мы предлагаем:
Полная удаленка или гибрид с офисами в Москве и Санкт-Петербурге
IT-ипотека и оформление в аккредитованную IT-компанию
Бесплатное питание в офисах, ДМС со стоматологией (после испытательного срока)
Корпоративное обучение и IT-мероприятия
💘 Контакты: @alina_velbik
`,
},
}, nil
return t.vсClient.GetUserVacancies(ctx, in, opts...)
}
func (t *grpcClient) UpsertUserData(ctx context.Context, in *pbVC.UpsertUserDataRequest, opts ...grpc.CallOption) (*pbVC.UpsertUserDataResponse, error) {
// // Append api key to Meta-data
// md := metadata.Pairs(constants.APIKey.String(), t.apiKey)
// ctx = metadata.NewOutgoingContext(ctx, md)
// Append api key to Meta-data
md := metadata.Pairs(constants.APIKey.String(), t.apiKey)
ctx = metadata.NewOutgoingContext(ctx, md)
// return t.vсClient.UpsertUserData(ctx, in, opts...)
return &pbVC.UpsertUserDataResponse{
Status: "success",
}, nil
return t.vсClient.UpsertUserData(ctx, in, opts...)
}
// Init : Инициализирует общий gRPC клиент
func Init(addr, apiKey string) (*grpcClient, error) {
// Открытие соединения
// conn, err := grpc.Dial(
// addr,
// grpc.WithTransportCredentials(insecure.NewCredentials()),
// grpc.WithBlock(),
// )
conn, err := grpc.Dial(
addr,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithBlock(),
)
if err != nil {
return nil, err
}
// if err != nil {
// return nil, err
// }
// Инициализация gRPC клиентов
return &grpcClient{
apiKey: apiKey,
// conn: conn,
// vсClient: pbVC.NewVisionCareerApiServiceV1Client(conn),
apiKey: apiKey,
conn: conn,
vсClient: pbVC.NewVisionCareerApiServiceV1Client(conn),
}, nil
}