Задать вопрос
  • Как сделать запросы к api синхронными?

    IgorPI
    @IgorPI
    Недавно такая же проблема была.
    Всё тот же await, но только конкретная реализация.

    Фишка в том, что запросы будут оставаться асинхронными, но только после того как будет выполнено условие

    Выдернул непосредственно из проекта

    spoiler

    import { app } from '@/main'
    import { Cookie } from '@/plugins/cookie'
    import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'
    import Vue from 'vue'
    import { sleep } from '@/Utils'
    
    // Full config:  https://github.com/axios/axios#request-config
    // axios.defaults.baseURL = process.env.baseURL || process.env.apiUrl || '';
    // axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
    // axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
    
    /* eslint-disable */
    const config = {
      baseURL: process.env.VUE_APP_API,
      timeout: 30000,
      validateStatus (status: number) {
        return status < 500 // Resolve only if the status code is less than 500
      }
    }
    /* eslint-enable */
    
    const _axios: AxiosInstance = axios.create(config)
    const cookie: Cookie = new Cookie()
    let isRefreshTokenProcess = false
    const promises: any[] = []
    /* eslint-disable */
    // @ts-ignore
    _axios.interceptors.request.use(async (config: AxiosRequestConfig): AxiosRequestConfig | Promise<AxiosRequestConfig> => {
    
      // todo: set locale optional
      config.headers.Language = 'ru'
    
      if (isRefreshTokenProcess) {
        console.log('%c%s', 'color: red;', `Запрос ${config.url} ожидает обновление токена...`)
        promises.push(new Promise(async (resolve) => {
          while (isRefreshTokenProcess) {
            await sleep(500)
          }
          console.log('%c%s', 'color: green;', `Запрос ${config.url} разрешён!`)
          resolve()
        }))
        // This is process update token
        await Promise.all(promises)
      }
    
      if (cookie.has('access_token')) {
          config.headers.Authorization = `Bearer ${cookie.get('access_token')}`
          return config
        } else {
          if (cookie.has('refresh_token')) {
            console.log('%c%s', 'color: blue;', 'Обновление токена...')
            isRefreshTokenProcess = true
            await axios.post(`${process.env.VUE_APP_API}/account/authorization/refresh-token`, {
              refresh_token: cookie.get('refresh_token')
            }).then((response: AxiosResponse) => {
              if (response.status === 200) {
                cookie.set('access_token', response.data.access_token, { 'max-age': 600, 'path': '/' })
                cookie.set('refresh_token', response.data.refresh_token, { path: '/' })
                config.headers.Authorization = `Bearer ${cookie.get('access_token')}`
              }
            }).catch(() => {
              app.$router.replace({ name: 'login' }).then()
            })
          }
          isRefreshTokenProcess = false
          return Promise.resolve(config)
        }
      },
      function (error) {
        // Do something with request error
        return Promise.reject(error)
      }
    )
    /* eslint-disable */
    /*
      Array of patterns to ignore status checks.
     */
    
    // Add a response interceptor
    _axios.interceptors.response.use(
      (response): Promise<AxiosResponse> | any => {
        if (response.status === 401) {
          return app.$router.replace({ name: 'login' }).finally(() => Promise.reject(response))
        } else {
          return response
        }
      },
      function (error) {
        // Do something with response error
        return Promise.reject(error)
      }
    )
    
    class AxiosPlugin {
      public install () {
        Object.defineProperties(Vue.prototype, {
          axios: {
            get () {
              return _axios
            }
          },
          $axios: {
            get () {
              return _axios
            }
          }
        })
      }
    }
    
    const axiosPlugin: AxiosPlugin = new AxiosPlugin()
    
    Vue.use(axiosPlugin)
    
    export default axiosPlugin
    export const $axios: AxiosInstance = _axios



    Работает следующим образом.
    Токен хранится в куках, с меньшим временем хранения, то есть с куков будет удалён раньше чем протухнет на сервере.

    Перед выполнением запроса, мы проверяем, есть ли токен в куках, если нет то обновляем с помощью refresh_token.
    Так же выставляется флаг, мол в процессе обновления токена и все последующие запросы помещаются в массив промисов.
    Далее в цикле проверяем, можно ли разрешить промис если да то выдыхаем и запросы ушли на сервер.
    Ответ написан
    4 комментария
  • Какие существует IDE для создания оконных приложений на разных языках программирования?

    Stalker_RED
    @Stalker_RED
    Вообще список IDE легко найти https://en.wikipedia.org/wiki/Comparison_of_integr...
    Но в нем нет разделения на те что могут в GUI, и те что не могут.
    Вы может для начала выберите платформу/язык/фреймворк на котором хотите создать GUI, а потому же IDE под эту платформу подбирайте?
    Ответ написан
    Комментировать
  • Какой хостинг выбрать для web проектов на java?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Придется научиться все делать ручками!
    Поставить томкат и nginx например. В томкате есть админ-панелька, но с ней тоже нужно разобраться. В ней можно war-файлы публиковать...
    Поставить letsencrypt или вместо nginx поставить caddy, или haproxy.
    Ну и я вообще не понимаю, зачем все эти панельки нужны, они все делают из рук вон плохо. Причем, один раз разобравшись, эти панельки нафиг не нужны!
    Да и смысла большого в war-файлах не вижу уже лет 10! Есть и spring, и vertx, и sparkjava, и с десяток всего другого, вместо толстых контейнеров.
    Есть даже OSGI типа apache karaf и eclipse equinox!
    Ответ написан
    5 комментариев
  • Не получается загрузить видео на VK через REST API и httpclient (java) - на POST сервер возвращает HTTP 406 Not Acceptable. В чем может быть проблема?

    @sherlock342342 Автор вопроса
    Проблема в неполной документации VK REST API. В ней ничего не сказано про то-что по каким-то причинам сервису по загрузке видео не нравится Transfer-Encoding: chunked

    Аналогичные сервисы VK по загрузке фото, аудио или документов пока не замечены в подобном.

    После модификации кода использующего java httpclient и указанием конкретного Content-Length (что выключает chunked режим) - все заработало.

    Надеюсь кому-то будет полезно.
    Ответ написан
    Комментировать
  • Как организовать юзер-сервис в виде микросервиса?

    отдельный микросервис чтобы он раздавал токены, авторизовал, следил за ролями и пр.

    Это работа для сервера авторизации, есть достаточно хороших готовых решений типа Keycloak которые достаточно легко интегрировать.

    Взаимодействие фронт-бэк происходит так:
    1. Фронт перенаправляет пользователя в Keycloak для авторизации
    2. Пользователь авторизовывается
    3. Keycloak возвращает пользователя обратно на фронт с токеном в JWT формате и подписью (JWS)
    4. Фронт делает авторизованные запросы в бэк с помощью этого токена
    5. Бэк, используя публичный ключ из Keycloak, валидирует подпись токена и убеждается, что он не просрочен
    6. Базовая информация о пользователе, Scope и его Roles находятся в токене, их можно использовать для валидации доступа к эндпойнтам бэка и понимать, кто авторизован
    Ответ написан
    5 комментариев
  • Почему scanner пропускает некоторые строчки в коде?

    Дело в том, что Scanner#nextInt считывает только цифровое значение без перехода на новую строку. Таким образом выходит, что последующий вызов Scanner#nextLine видит новую строку за счёт того, что ты нажал Enter вводя число.

    Используй для всех инпутов Scanner#nextLine и конвертируй полученную строку в нужный тип.
    System.out.println("Введите код путевки");
    l[p].code = Integer.parseInt(scanner.nextLine());
    Ответ написан
    2 комментария
  • Как добавить в массив в мапе?

    libalex
    @libalex
    Backend & Android Developer (Java / Kotlin)
    Ну, например так
    if (mapa1.containsKey(assigneeMail)) {
        ArrayList<Payload1> payloads = mapa1.get(assigneeMail);
        payloads.add(new Payload1(it.getSummary(), it.getKey(), it.getDescription(), it.getAssignee().getDisplayName()));
        mapa1.replace(assigneeMail, payloads);
    } else {
        mapa1.put(assigneeMail, new ArrayList<>(List.of(new Payload1(it.getSummary(), it.getKey(), it.getDescription(), it.getAssignee().getDisplayName()))));
    }

    С Java 8 в Map появился метод merge ещё.
    Ответ написан
    1 комментарий
  • Как лучше\проще реализовать работу с серийными номерами\лицензиями чтобы не особо пиратили?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Единственный способ запретить нелецинзионное копирование вашей программы - это вынести что-то важное в серверную часть. Там логин/пароль пользователя, плюс проверки на отсутствие параллельных сессий.

    Все остальное ломается.

    Следующий плохой вариант: делать слепок системной информации, при активации лицензии подписывать его на сервере приватным ключем. Программа открытым ключем проверяет, что файл лицензии корректен (расшифровывает и смотрит, что системная информация совпадает).
    Ответ написан
    Комментировать
  • Почему может блокироваться и выключаться MacBook Pro 2020 m1?

    @Drno
    глючит кабель
    глючит монитор \ вход
    не хватает напряжения

    если запитать мак отдельно - проблема исчезает?
    Ответ написан
    1 комментарий
  • Зачем нужна учётная запись в Microsoft Visual Studio?

    john33332
    @john33332
    Web -Designer
    Для того чтобы большой брат следил за вами.
    На самом деле полезного немного:
    Автоматическое подключение к серверам Azure и синхронизация некоторых параметров
    Ответ написан
    1 комментарий
  • Как клиенту самостоятельно менять фотографии в документе PDF?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Попробуйте PDF24. По-моему, этот комбайн умеет всё - ну разве что за пивом не бегает...
    Ответ написан
    Комментировать
  • Как клиенту самостоятельно менять фотографии в документе PDF?

    pozZzitiv
    @pozZzitiv
    Дизайнер и перфекционист
    1. Если вопрос именно в том чтобы менять содержимое уже сделанного PDF-шаблона, то менять вставленные изображения можно в любом ПДФ-редакторе, который поддерживает эту функцию. Например, родной Adobe Acrobat Pro.
    Вариант А. В Acrobat Pro (напомню, что это платная версия) можно нажать "Редактировать текст и изображения/Редактировать PDF", затем выделить картинку, нажать ПКМ и выбрать "Редактировать с помощью - Adobe Photoshop (если установлен)/MS Paint или выбрать другое ПО. Обновить там картинку, сохранить, закрыть редактор и вернуться к Acrobat — в нём картинка уже изменится на новую. Но тоже нужно иметь какой-то из графических редакторов и следить чтобы все было ОК, не съехало и т.п. Плюс в том, что изображение открывается точно по размеру как в PDF. Минус: маски, увы, при этом способе игнорируются и открывается для редактирования оригинальное изображение во весь размер. Нужно в первом шаблоне обрезать картинку под конечный формат, слив маску. Вот тогда при замене размер холста сохранится и внутри него можно вставлять новое изображение, масштабировать под границы артборда желаемую область и сохранять.
    Делал так лично с редактированием в Photoshop, удобно.

    Вариант Б. В открытом файле также перейти к редактированию PDF и: нажать ПКМ на картинке - выбрать "Заменить изображение" - выбрать новую картинку и она заменит прежнюю. Минус: картинка должна быть такого же соотношения сторон и размера, иначе она просто встанет по центру предыдущей со своими оригинальными пропорциями. Если заранее подгонять картинки под один формат, то способ рабочий и даже проще предыдущего.

    Знаю, что есть и другие PDF-редакторы, но вот об их функционале уже не могу ничего сказать. Когда-то пробовал некоторые из них, но не для замены картинок.

    2. Если же вопрос в том, в какой бы программе клиенту редактировать макет и уже потом экспортировать в PDF, то тут все равно чему ему учиться пользоваться: от предлагаемого Word или PowerPoint (оба распространены в офисах, чаще всего ими умеют пользоваться и они умеют экспортировать в PDF) до классических графических редакторов (Photoshop, Illustrator, Corel, Figma, Canva и прочие-прочие). Но не знаю как типография отнесется к PDF, сделанным в офисных приложениях)))

    Резюмируя, если клиент хочет себе конструктор для развлечений, то придётся ему либо обучиться базовой работе в какой-то из программ, либо делегировать тому, кто умеет, либо доплатить за разработку плагинов/экшенов/ скриптов/сервиса по автоматизации процесса.

    PS Сталкивался с подобными запросами тоже. Даже просили делать заполняемые шаблоны и чтобы потом печатать. Благо, для офисных принтеров хватало шаблонов в Word/PP. В остальных случаях — PDF для типографии + исходник и аргументированное объяснение сказанного выше, что волшебных кнопок нет и либо учитесь работать с файлами, либо пусть это делает тот, кто умеет.
    Ответ написан
    Комментировать
  • В каком виде, хранятся записи в БД, подобные постам в соц.сетях?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Современная соц-сеть - это уникальная софтварная архитектура которая строилась индивидуально.
    Вряд-ли вы сможете ее просто повторить имея mysql/php/nginx.

    VK/Facebook имеют свои технологии кеширования контента в основном построенные на материализации
    страниц. Базы данных обычно - не-реляционные. Модель проектируется так чтобы не было joins между
    таблицами. И активно используются очереди сообщений. Вот в соц-сети Linked-In это было настолько
    важно что даже был создан отдельный программный продукт который сейчас называют Apache Kafka.

    Активно используются горизонтальное масштабирование. Сеть наращивает мощности просто путем подключения
    новых адресов в dns с балансом по географии, и запуска новых web-nodes и новых дисковых реплик хранилищ для картинок и текстов постов.

    Поэтому вопрос в каком виде хранятся записи - тут не важен. Тут важно чтоб кеши обновились синхронно с событием поста например.
    Ответ написан
    7 комментариев
  • Как вычислить программу, которая пытается подобрать пароль администратора?

    @d-stream
    Готовые решения - не подаю, но...
    Можно воспользоваться "методом сантехника":
    - ставим какую-нибудь тулзу типа rdp defender
    - устанавливаем бан после 3 неудачных попыток
    - носитель зловреда вскоре сам обратится с проблемой "не могу подключиться"

    ну или поглядев в лог можно будет оценить массовость явления

    p/s/ на время акции желательно свой комп внести в белый список
    Ответ написан
    Комментировать
  • Есть какие нибудь инструменты для работы с VBA?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Писать и исполнять код VBA можно только в IDE Office.
    Если у Вас большой проект, посмотрите в сторону реализации проекта на базе VSTO.
    VBA и VB.NET очень похожи, адаптация пройдёт быстро (если есть время, лучше изучить c#).
    Из плюсов - практически неограниченные возможности новой платформы (VBA очень ограничен).
    В VSTO есть неочевидные особенности (обращение к книге, deploy и т.д.), но конечный результат вполне быстр и user frendly.
    Ответ написан
    4 комментария
  • Нужно ли вынимать зарядное из розетки, если ноутбук не питается от него?

    vovka3003
    @vovka3003
    Фрилансер. Инженер систем безопасности.
    Вообще вынимать (гы) всегда желательно (или отключать иным способом) по двум причинам:
    1. Ресурс БП будет более долгим, т.к. находясь в сети он собирает высоковольтные микроимпульсы и это пагубно сказывается на конденсаторах.
    2. Выключенный из розетки БП гарантирует, что пожар начнется не с него)
    Ответ написан
    3 комментария
  • Как стать специалистом по информационной безопасности (кибербезопасность)?

    @dmshar
    Вот за что я люблю этот форум. За то, что тут можно отвечать на "уникальные" вопросы даже не напрягаясь. Правда спрашивающие напрягаются еще меньше.
    https://qna.habr.com/q/944247
    https://qna.habr.com/q/911555
    https://qna.habr.com/q/788547
    https://qna.habr.com/q/797949
    https://qna.habr.com/q/772603
    https://qna.habr.com/q/530392
    https://qna.habr.com/q/688576
    https://qna.habr.com/q/676974

    Начните с того, что освойте сложнейшую науку самостоятельно поиска ответов на элементарные вопросы. Ограничьтесь для начала Google или хотя-бы сайтом, на котором вы задаете свой вопрос. Или вы всерьез считаете, что такой вопрос вам первому в голову пришел?
    Ответ написан
    Комментировать
  • Как стать специалистом по информационной безопасности (кибербезопасность)?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    Дома с переломом ноги
    Ить, да вас прорвало, что ли? Вроде не конец учебного года, чего все так кинулись в ИБ?

    Если ты думаешь, что вот стану ИБ-шником и буду только тестить сайты и ломать вирусню - ты ошибаешься. Нет, этим ИБ тоже занимается. Но - в крупных конторах типа Касперского. А в конторах помельче - ИБ-шник, как админ - как правило один штука (редко два - это уже достаточно большая контора должна быть).

    И задачи у него могут быть ... специфические.

    Нет, там конечно много и обычной админской работы - прокси, файрволлы, VPN, права доступа, сертификаты, разрешение на установку ПО, туда не хади - сюда хади (СКУД и видеонаблюдение). Но я уже тут пальцы стер писать, что ИБ не только про компы. ИБ это еще и про людей, и вот это "про людей" может быть сильно неприятным - СМП, чтение почты, отсмотр чем человек занимался...

    Я уже неоднократно сравнивал ИБ-шника с гинекологом - те, кто не в теме - думают, что это прикольная работа - постоянно на голых баб смотреть :) те же, кто в теме - знают, что это просто работа и в ней очень много грязи и вони, потому что связана она с человеческим организмом и его метаболизмом...

    Ну и еще - желательно знание законодательной базы и умение писать документацию... На самом деле, романтики в ИБ - микроскопическое количество. Это просто работа, иногда скучная и нудная, иногда даже грязная и неприятная...
    Ответ написан
  • Как делать PDF по шаблону?

    kraso4niy
    @kraso4niy
    fullstack
    Использовать chromium headless -> html -> pdf конвертирование. HTML шаблоны можно пиксель-в-пиксель сделать. Далее скормить их хрому и конвертнуть. Гуглится всё это https://habr.com/ru/post/459112/
    Ответ написан
    Комментировать
  • Как в Bootstrap поместить иконку на поле ввода?

    delphinpro
    @delphinpro
    frontend developer
    <div>
      <input className="form-control" id="inputFilter" />
      <icon>
    </div>


    div {
      position: relative;
    }
    
    icon {
      position: absolute;  
      right: 0;
      top: 0;
      pointer-events: none;
    }
    Ответ написан
    Комментировать