Fi1osof

Fi1osof

С нами с 05 мая 2014; Место в рейтинге пользователей: #5
Отправить деньги
Fi1osof
15 августа 2019, 10:52
0
Во-первых, я не отрицал наличие ошибки, я говорил, что меня это не волнует, я занят другими задачами.
Во-вторых, ты ведешь себя как всякая учка в школе, которая считает, что ее предмет важнее других (чел увлекается химией, но учка по ИЗО ругается на него, что он плохо рисует). Еще раз повторяю: клал я на твою безопасность, ровно как на SEO и т.п. Тебе нравится заниматься ей? Занимайся. Но не думай, что все обязаны ей заниматься. И то, что ты в ней шаришь, это еще не много значит (примерно как всякую птицу не особо парит, что какая-то обезьяна лучше по деревьям прыгает).

Да, могу.
Как-то так...

Что ты можешь? Ты даже еще не осознал что там вообще происходит, а уже может… Посмотри на свой профиль в гитхабе и на мой. Хотя бы просто по активности. Я вижу, что ты можешь копировать чужие репозитории. Ровно с тем же успехом ты можешь скопировать мои и сказать «Я смог». А наделе ты даже близко не занимаешься такими вещами, у тебя другой профиль.
Fi1osof
15 августа 2019, 08:50
0
Во-первых, статья была написана на modxclub.ru изначально, и кому надо было, тот отследил и увидел.
Во-вторых, про перебор паролей (и емейлов и телефонов), я знаю. Но уровень безопасности должен соответствовать ценности информации. Даже если ты там все сломаешь, пофигу. Сейчас задачи другие — нарабатывать функционал. Скажем так, я дико сомневаюсь, что ты можешь разработать такой фронт-редактор. Получается, все буду делать я, а безопасность будем делать мы? Нет. До безопасности доберусь, когда действительно понадобится (самые важные я заткнул дыры, а шифрованный пароль даже если ты получишь, тебе его еще надо будет дешифровать, тоже не простая задача).
И если вдруг движок станет популярным (хоть и не факт), он open-source, найдутся и другие умельцы по безопасности, кто сделает свой вклад.

P.S. Кстати, если получится все-таки подобрать пароль, покажи. А то пока что 9 символов подобрал, а там их 60…
Fi1osof
14 августа 2019, 19:56
0
Хотя, если бы мы обсуждали не абстрактную вещь в стиле «смотрите какая крутая штука есть. на ней можно делать то и се», а разбирали реализацию GraphQL хотя бы для modx_site_content + TV, то такой материал вызвал бы
— намного больше интереса в сообществе
— позволил бы углубиться в тонкости технологии с пользой для CMS и т.п.
Нифига бы он не вызвал. Давно замечено, что чем проще, тем шире аудитория. А тем трем, кому реально интересно и захотел бы попытаться вникнуть, я вот еще почти год назад писал: prisma-cms.com/topics/izmenennaya-versiya-modxclub.ru-na-prisma-cms-poka-chto-eshhe-v-svyazke-s-modx-2817.html
Там много материала для изучения и форвардинга запросов на MODX вместе с кукисами (для авторизации), и работа с БД напрямую (не только modx_site_content). Если кому интересно, здесь частично схема: github.com/prisma-cms/boilerplate-modx/tree/master/src/server/modules/modx/schema/api

В общем, наработки были, но развивать их не стал за отсутствием надобности.
Fi1osof
14 августа 2019, 17:59
0
P.P.S. Жизнь-боль… Здесь, на мегапрофильном MODX-проекте (потому что MODX сам по себе офигенный, а все сторонние технологии от лукавого), нет даже автосохранения черновиков для комментариев. Писал-писал, а потом оп, сохраняю, а мне 404… При чем вот такая дичь: www.youtube.com/watch?v=kVENZ3DhR08&feature=youtu.be

Хорошо хоть получилось вытащить коммент из запроса в дубле вкладки, переписывать бы поленился.
Fi1osof
14 августа 2019, 17:55
+1
Местами повторюсь, потому что большую часть описал выше.

За весь GraphQL не скажу, давно уже не работал напрямую с ним (ибо без дополнительных инструментов работать с ним тяжеловато местами). Но в призме есть возможность защитить эндпоинт, указан managementApiSecret в конфигурации docker-инстанса. www.prisma.io/docs/prisma-server/authentication-and-security-kke4/#prisma-server
В таком случае для работой по АПИ придется указывать токен доступа.

На счет данных внутри, тут хитрее задача (имеется ввиду, когда, к примеру, пользователю надо ограничить доступ к отдельным полям объектов в результатах запроса). Я пока универсального средства не нашел. Но пара моментов, которые я использую:

1. Резолверы на отдельные поля объектов.
К примеру, такая схема:
type Query {
  users: [User!]!
}

type User {
  id: ID!
  username: String!
  password: String!
  email: String!
}
Мы можем прописать отдельные резолверы для каждого поля. К примеру:
const resolvers = {

  /**
   * Получение списка пользователей
   */
  users: (source, args, ctx, info) => {

    return ctx.db.query.users(args, info);
  },

  /**
   * Резолверы для полей объекта Пользователь
   */
  User: {

    password: (source, args, ctx, info) => {

      /**
       * Пароль всегда пустой возвращаем
       */
      return null;
    },

    email: (source, args, ctx, info) => {

      const {
        id,
        email,
      } = source || {};

      const {
        id: currentUserId,
      } = ctx.currentUser || {}

      /**
       * Возвращаем емейл, только если это объект текущего пользователя
       */
      return currentUserId && id && currentUserId === id ? email : null;
    },

  },

}
Самое приятное в этом способе то, что это распространяется на любые выборки в любой части запроса/подзапроса. То есть даже если запросят Топики->Комментарии->КемСоздано(User)->{email, password}, даже в этом случае поля будут прогоняться через эти резолверы. И даже в мутациях и подписках.

Вот реальный код: github.com/prisma-cms/user-module/blob/7fc769cbf1635799442fdd798f6c2f209fa7a8c2/src/modules/index.mjs#L1203-L1295

2. Чистка лишних типов.
Пример выше годится тогда, когда права разграничиваются, а не просто исключаются (как в случае с емейлами, которые могут видеть сами пользователи, если это их емейл, и админы). Но бывают случаи, когда поля вообще надо исключить из схемы, чтобы их даже запрашивать не могли, чтобы даже не знали о их существовании. Вот тогда вообще приходится чистить схему.
К примеру, вот здесь я перечисляю те объекты, которые надо вычистить из схемы: github.com/prisma-cms/boilerplate/blob/05ace079c039c48fac5a936967a40297692001fa/src/server/modules/index.mjs#L99-L180
Сама чистка выполняется здесь.

А здесь я удаляю из схемы те методы, для которых резолверы не описаны. Это не совсем за секурность, но все же так и схема меньше получается, и видишь ты только то, для чего есть резолверы. А то намержишь кучу модулей, схема огромная, а реально резолверов десяток только.

Ну и самая дыра по безопасности, это мутации вложенные. К примеру для запросов
mutation {
    updateTopic (
            data: {
                user: {
                    create: {
                        id: '...',
                        ...
                        sudo: true,
                    },
                }
            }
        ){
        id
    }
}


Вот такое, в отличие от резолверов на чтение, где объявил в одном месте и везде это прогоняется, просто так не заткнешь. Поэтому я на автомате вычищаю все create/update/upsert из связанных моделей. Но все равно еще есть узкие места. Вот эта задача до сих пор для меня не полностью разрешенная. Хотя на горизонте начинают маячить варианты.

P.S. В Go не силен пока, но эти приемы должны одинаково работать на любых имплементациях.
Fi1osof
14 августа 2019, 11:21
0
github.com/VadimDez/Counter-Strike-JS
Спасибо!
Fi1osof
14 августа 2019, 11:15
-1
Фраза агрегирование нескольких API в один — это описание задачи. А forwardTo — это конкретное средство решение данной задачи.
Fi1osof
14 августа 2019, 11:06
0
Одно и то же разными словами.
Нет, в данном случае не одно и то же. Уточню.

Посмотри внимательно код по ссылке.
const {forwardTo} = require('prisma-binding')

const resolvers = {
  Query: {
    posts: forwardTo('db')
  }
}

const server = new GraphQLServer({
  typeDefs: './src/schema.graphql',
  resolvers,
  context: req => ({
    ...req,
    db: new Prisma({
      typeDefs: 'src/generated/prisma.graphql',
      endpoint: '...',
      secret: 'mysecret123',
    }),
    debug: true,
  }),
})

server.start(
  () => console.log(`Server is running on http://localhost:4000`),
)
Вот мы объявляем новый GraphQL-сервер:
db: new Prisma({
      typeDefs: 'src/generated/prisma.graphql',
      endpoint: '...',
      secret: 'mysecret123',
    }),
Это наш сервер, и схема наша, то есть полноценный сервер. Мы можем создать несколько таких отдельных серверов, каждый со своим эндпоином.

И все это мы оборачиваем в единый сервер:
const server = new GraphQLServer({
  typeDefs: './src/schema.graphql',
  resolvers,
Что это дает?
1. При желании, мы можем эндпоинты подсерверов скрыть за фаервол или типа того, то есть не давать прямого доступа к подсерверу.
2. Не дублировать в резолверах функционал этих подсерверов. В резолвере, вместо того, чтобы переписывать код, мы просто переводим запрос на подсервер.
const resolvers = {
  Query: {
    posts: forwardTo('db')
  }
}
То есть это полезно, когда делал несколько отдельных проектов, и решил их все объединить в единое АПИ, но не переписывать код.

Можно я рядом создам топик про сервера для Counter Strike?
Если будет на js, я бы почитал.
Fi1osof
14 августа 2019, 09:43
+1
Тема еще не до конца раскрыта. Еще не рассказывалось толком ничего про подписки (Subscription), но это уже отдельная тема и отдельный топик.

P.S. А еще не раскрыта возможность использования forwardTo запросов, что позволяет как бы строить сеть микросервисов. Несколько отдельных API-серверов могут взаимодействовать друг с другом. Шлешь запрос на один сервер, а тот собирает информацию с разных серверов и возвращает все в одном ответе. Но это уже не совсем ядро. а различные реализации поверх.
Fi1osof
13 августа 2019, 19:41
0
Вывел информацию о созданных мирах: prisma-cms.com/minecraft/
К мирам, в которых есть игроки в режиме CREATIVE можно подключаться (в качестве имени мира указывается выведенный ай-ди (не я это придумал, но позже наверняка исправится)), и там можно увидеть других пользователей, если кто есть. Где кто есть, можно ориентироваться по координатам из таблицы. Свои координаты можно увидеть, нажав X (отладочную информацию выводить будет).
Fi1osof
13 августа 2019, 14:35
0
Это не важно, так, мысли вслух, и очень субъективно.
Fi1osof
13 августа 2019, 14:32
0
Я видел эту статью и изучал ее, но в итоге отказался от предложенного пути. Более интересны показались примеры типа этого: react-imago3d.alessiodicrescenzo.com/
Но это было полгода назад, сейчас много новых интересных наработок появилось.
Fi1osof
13 августа 2019, 09:55
+2
Посмеялся))) Так действительно лучше. Поправил :)
Fi1osof
13 августа 2019, 09:33
0
Не за что.

a-frame хорош тем, что под него есть реакт-обертки (наверняка vue тоже). Во всяком случае я делал, работает, и даже на телефоне 3D получается. У меня вот отдельная ветка задач по нему есть: prisma-cms.com/projects/issledovaniya
Там если зеленые покликать, в них более подробное описания есть и ссылки на статьи. Например, вот эта довольно интересная: modxclub.ru/topics/a-frame.-sobytiya.html
Fi1osof
13 августа 2019, 09:29
0
Через некоторое время поймешь, как MODX не ограничен собой, и как все больше и больше приходится интегрироваться с другими технологиями.
К слову, тот же MODX состоит в том числе и из технологий, которые вообще не для него создавались (phpThumb, smarty, phpMailer, ExtJS и т.п.). По одному только ExtJS заметок сколько: modx.pro/search?query=extjs
А если почитать эти заметки, то бОльшая их часть сопровождается болью. Но «ежики плакали и кололись, но продолжали жрать кактус».

У меня было бы желание, я мог бы полностью переписать админку MODX-а, и это было бы во много раз удобней и перспективней. Вот пример более удобного управления контентом: www.youtube.com/watch?v=jeDCUtkNgL0

При этом MODX не перестал бы при этом быть MODX-ом. (Если ExtJS заменить на Vue/React или типа того, MODX же не поменяется по своей сути).
Василий наверняка мог бы переписать. Может еще пара человек. Кто-то еще? Нет, потому что знаний не хватит. При этом знаний типа хватает говорить «эти технологии MODX не касаются», вообще не понимая где что чего касается.

P.S. MODX уже 10 лет не пишется MODx.
Fi1osof
13 августа 2019, 09:16
0
Каждый раз надеюсь на лучшее, но опять все зря.

P.S. обрати внимание, я только раз сказал, что ухожу насовсем. В другие разы (как и сейчас), я говорю "Пока что не буду".
Fi1osof
13 августа 2019, 08:56
0
Т.е. высказывать свою точку зрения можно только после года регистрации? :)
Конечно можно. Но вот это заявление слишком категоричное:
modx.pro сейчас узконаправленный проект, никогда не против чего-то нового, но это новое должно либо пересекаться в modx, либо нужно менять структуру сайта, например делать новый раздел.
Как будто это твой ресурс.
Свое мнение нужно сопровождать словами «Как мне кажется… Лично для меня и т.п.», а не выносить приговор за всех. Как мне кажется.

хоть блог тут свой заводи
Вот жешь незадача, здесь нельзя завести свой блог…
Fi1osof
13 августа 2019, 08:40
0
iWatchYouFromAfar
С нами с 29 сентября 2018;
Может хоть до годика дотянешь? Потом будешь решать что здесь и для кого в каком виде?
Fi1osof
13 августа 2019, 08:25
0
Разве не хорошо, что на modx.pro начали появляться публикации любой направленности? По-моему, это круто!
Основная масса уже выразила свое мнение (как «вслух», так и звездочками к топикам). Я пока умываю руки, пишите без меня.
Fi1osof
13 августа 2019, 07:36
0
Пожалуйста.