Giter VIP home page Giter VIP logo

itmoproctor's Introduction

ITMOproctor

Система дистанционного надзора ITMOproctor предназначена для сопровождения процесса территориально удаленного прохождения экзаменов, подтверждения личности испытуемого и подтверждения результатов его аттестации.

Система поддерживает интеграцию на уровне API со следующими LMS:

Клиентская часть

Системные требования:

Параметр Минимальные требования
Операционная система Windows 7+; macOS 10.12+; Linux
Процессор Intel i3 1.2 ГГц или эквивалент
Скорость сетевого соединения 1 Мбит/c
Свободное место на диске 500 МБ
Свободная оперативная память 1 ГБ
Разрешение веб-камеры 640x480
Частота кадров веб-камеры 15 кадров/с
Разрешение экрана монитора 1280x720

Инструкции:

Серверная часть

Системные требования:

Параметр Минимальные требования
Операционная система Ubuntu 18.04 (64 бита)
Процессор AMD Six-Core Opteron 2427 2.2 ГГц или эквивалент
Средняя нагрузка на процессор 5% / сессия
Оперативная память 2 ГБ + 100 МБ / сессия
Сетевое соединение 1.5 Мбит/c / сессия
Запись на диск 150 КБ/c / сессия
Дисковое пространство 500 МБ/час / сессия
Архивирование 100 МБ/час / сессия

Документация:

Развертывание системы

Установить Node.js:

apt-get update
apt-get install -y wget gnupg
wget -O - https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs git build-essential python-dev --no-install-recommends

Установить MongoDB:

wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [arch=amd64,arm64] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
apt-get update
apt-get install -y mongodb-org --no-install-recommends
systemctl enable mongod

Установить Kurento Media Server:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83
source /etc/lsb-release
sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <<EOF
# Kurento Media Server - Release packages
deb [arch=amd64] http://ubuntu.openvidu.io/6.16.0 $DISTRIB_CODENAME kms6
EOF
apt-get update
apt-get install -y kurento-media-server ffmpeg curl --no-install-recommends

Запустить сервер:

git clone https://github.com/meefik/ITMOproctor.git
cd ./ITMOproctor
npm install
cp config-example.json config.json
npm start

Собрать декстоп-приложение под все архитектуры:

apt-get install tar zip unzip wget upx-ucl
npm run build-app

Архивы для загрузки приложения будут размещены в public/dist. Изменить адрес страртовой страницы приложения можно в файле app-nw/package.json, поле homepage.

Вход в систему

По умолчанию сервер доступен по адресу localhost:3000.

Для администратора логин / пароль: admin / changeme

itmoproctor's People

Contributors

dependabot[bot] avatar elenacherepovskaya avatar meefik avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

itmoproctor's Issues

Подключение наблюдателей к экзамену

Несколько инспекторов могут наблюдать за экзаменом. Сейчас к экзамену подключиться можно, инспектор появится в списке участников. Он может оставлять сообщения в чате и оставлять заметки, однако функции видео не работают. Пытаться запустить видео другим инспектором не допускается, иначе сбросится сессия у первого. В дальнейшем либо попробуем реализовать механизм подключения к видео студента в режиме просмотра, либо запретим вход в экзамен другим участникам.

cannot run in wd [email protected]

node -v

v12.18.2

git clone https://github.com/meefik/ITMOproctor.git

...done.

cd ./ITMOproctor

npm install

[email protected] install /www/ITMOproctor/node_modules/bufferutil
node-gyp-build

[email protected] install /www/ITMOproctor/node_modules/websocket-stream/node_modules/ws
(node-gyp rebuild 2> builderror.log) || (exit 0)

make: Entering directory '/www/ITMOproctor/node_modules/websocket-stream/node_modules/ws/build'
CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
bufferutil.target.mk:113: recipe for target 'Release/obj.target/bufferutil/src/bufferutil.o' failed
make: Leaving directory '/www/ITMOproctor/node_modules/websocket-stream/node_modules/ws/build'

[email protected] postinstall /www/ITMOproctor/node_modules/ejs
node --harmony ./postinstall.js

Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)

[email protected] postinstall /www/ITMOproctor/node_modules/nodemailer
node -e "try{require('./postinstall')}catch(e){}"

=== Nodemailer 6.4.6 ===

Thank you for using Nodemailer for your email sending needs! While Nodemailer
itself is mostly meant to be a SMTP client there are other related projects in
the Nodemailer project as well.

For example:

IMAP API ( https://imapapi.com ) is a server application to easily access
IMAP accounts via REST API
NodemailerApp ( https://nodemailer.com/app/ ) is a cross platform GUI app to
debug emails

npm WARN lifecycle [email protected]~postinstall: cannot run in wd [email protected] cd ./public && bower install (wd=/www/ITMOproctor)
added 643 packages from 400 contributors and audited 643 packages in 28.497s

63 packages are looking for funding
run npm fund for details

found 53 vulnerabilities (51 low, 2 high)
run npm audit fix to fix them, or npm audit for details

Не появляется кнопка "Войти через OpenEDU" на Linux

При попытке залогиниться, не появляется кнопка кнопка "Войти через OpenEDU"
image

ОС: Arch Linux (x64, ядро 5.13.19-2-MANJARO) с KDE 5.23.4 (KDE frameworks 5.88.0), граф. подсистема X11
Установлен libgconf версии 3.2.6 (https://aur.archlinux.org/packages/gconf/)

В логах выводит вот такую штуку:

TypeError: Cannot read property 'options' of undefined
    at _23d (https://proctor.ifmo.ru/bower_components/jeasyui/jquery.easyui.min.js:3128:15)
    at HTMLDivElement.<anonymous> (https://proctor.ifmo.ru/bower_components/jeasyui/jquery.easyui.min.js:3309:1)
    at Function.each (https://proctor.ifmo.ru/bower_components/jquery/dist/jquery.min.js:2:2975)
    at m.fn.init.each (https://proctor.ifmo.ru/bower_components/jquery/dist/jquery.min.js:2:835)
    at Object.destroy (https://proctor.ifmo.ru/bower_components/jeasyui/jquery.easyui.min.js:3308:11)
    at m.fn.init.$.fn.panel (https://proctor.ifmo.ru/bower_components/jeasyui/jquery.easyui.min.js:3259:32)
    at m.fn.init.$.fn.window (https://proctor.ifmo.ru/bower_components/jeasyui/jquery.easyui.min.js:3614:13)
    at m.fn.init.$.fn.dialog (https://proctor.ifmo.ru/bower_components/jeasyui/jquery.easyui.min.js:3765:13)
    at https://proctor.ifmo.ru/bower_components/jeasyui/jquery.easyui.min.js:3870:5

Proctoring Client Side Apps

https://github.com/meefik/ITMOproctor

https://docs.google.com/document/d/15fsEL3sHCGuJ9_rSuFprQXP--WXb9Ct-PzayBXvxWp0/preview
https://docs.google.com/document/d/1EbW52RQLdgwkRwJa_HgzP-nqU_860bPQuMZZ-ns1Hmc/preview

Вопрос: как сконфигурировать это клиентское приложение на произвольный адрес сервера прокторинга.
Сервер прокторинга это локальный сервер из https://github.com/meefik/ITMOproctor.
Клиентское приложение по ссылке выше не имеет в архиве конфигурационных файлов для указания адреса сервера прокторинга. Само клиентское приложение не имеет интерфейса настроек для указания сервера прокторинга. Нет исходников клиентского приложения.
git links
client
VirtualBox_ubuntu16desktop_22_11_2020_16_09_33

Рахмет, Ермек.
https://github.com/jhd235
Telegram: @jhd235

Аутентификация через edx

Пытаемся припилить oauth2-аутентификацию от open.etu.ru (edx ginkgo.1) по примеру openedu.

InternalOAuthError: failed to fetch user profile
    at /home/eazaika/ITMOproctor/routes/profile.js:94:25
    at ClientRequest.<anonymous> (/path-to/ITMOproctor/node_modules/passport-oauth/node_modules/passport-oauth2/node_modules/oauth/lib/oauth2.js:162:5)
    at emitOne (events.js:77:13)
    at ClientRequest.emit (events.js:169:7)
    at TLSSocket.socketErrorListener (_http_client.js:269:9)
    at emitOne (events.js:77:13)
    at TLSSocket.emit (events.js:169:7)
    at connectErrorNT (net.js:1016:8)
    at nextTickCallbackWith2Args (node.js:511:9)
    at process._tickDomainCallback (node.js:466:17)

Заметили такое отличие: openedu в куках для proctor.ifmo.ru отправляет два поля (athenticated=1 и authenticated_user=username). Наш же open.etu.ru отдает поля edxloggedin=true и edx-user-info="вот тут большущий json с username и прочим".

Соответственно вопрос: где в коде проктора мы должны внести изменения в названии отслеживаемых полей и как же вытянуть пресловутый username из ответа? (grep по 'authenticated' находит просто уйму вхождений, а по 'authenticated_user' - ни одного)

Failed to query stereo recording.

Не включается веб-камера при проверке. Ubuntu 20 LTS.
Полный текст:

[320106:320106:1019/180031.133462:ERROR:sandbox_linux.cc(348)] InitializeSandbox() called with multiple threads in process gpu-process.
https://itmoproctor.openedu.ru/bower_components/jeasyui/jquery.easyui.min.js:3128
var opts=_240.options;
^

TypeError: Cannot read property 'options' of undefined
at _23d (https://itmoproctor.openedu.ru/bower_components/jeasyui/jquery.easyui.min.js:3128:15)
at HTMLDivElement. (https://itmoproctor.openedu.ru/bower_components/jeasyui/jquery.easyui.min.js:3309:1)
at Function.each (https://itmoproctor.openedu.ru/bower_components/jquery/dist/jquery.min.js:2:2975)
at m.fn.init.each (https://itmoproctor.openedu.ru/bower_components/jquery/dist/jquery.min.js:2:835)
at Object.destroy (https://itmoproctor.openedu.ru/bower_components/jeasyui/jquery.easyui.min.js:3308:11)
at m.fn.init.$.fn.panel (https://itmoproctor.openedu.ru/bower_components/jeasyui/jquery.easyui.min.js:3259:32)
at m.fn.init.$.fn.window (https://itmoproctor.openedu.ru/bower_components/jeasyui/jquery.easyui.min.js:3614:13)
at m.fn.init.$.fn.dialog (https://itmoproctor.openedu.ru/bower_components/jeasyui/jquery.easyui.min.js:3765:13)
at https://itmoproctor.openedu.ru/bower_components/jeasyui/jquery.easyui.min.js:3870:5
[320121:320219:1019/180056.595706:ERROR:adm_helpers.cc(62)] Failed to query stereo recording.
ALSA lib pcm_dsnoop.c:641:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dsnoop.c:641:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dsnoop.c:641:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dsnoop.c:641:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_usb_stream.c:508:(_snd_pcm_usb_stream_open) Unknown field hint

Переход на Kurento 6

В новой версии Kurento исправлены некоторые недочеты, а главное, улучшена скорость установления соединения (около 3 сек., против 16 сек.).

Реализовать форму идентификации студента

В интерфейсе приема экзамена у инспектора есть кнопка "Идентификация". По нажатию кнопки открывается диалог. В новом окне отображается изображением с камеры студента, отдельной кнопкой можно сделать снимок с камеры, и персональные данные студента. Инспектор проверяет данные и нажимает кнопку "Подтвердить", если данные верны, или "Отклонить", если возникли какие-то проблемы на этапе идентификации. После нажатия кнопки "Подтвердить" текущие данные студента попадают в заметки, а в экзамен записывается хешсумма этих данных. В LMS отправляется запрос на открытие доступа к экзамену.

add SSL udp-proxy problem

Добавив nginx с upstream-бэкэндом node.js, столкнулись с неожиданной проблемой: теряются udp-пакеты. Видео и рабочий стол отправляются на сервер, но вот получить их клиенту уже не удается. У nginx, по слухам, есть механизм проксирования udp-пакетов (через stream), однако чтобы пересобрать nginx с флагом --with-stream, включающим данный функционал, версия nginx должна быть 1.9+, тогда как на ubuntu 14.04, указанной в requirements, актуальная stable-версия 1.4.6.

Как эта проблема решена на https://proctor.ifmo.ru?

Возможность работы без UDP протокола

Рассмотреть возможность альтернативных вариантов работы без использования протокола UDP, а также оценить возможные проблемы маршрутизации трафика.

Possible EventEmitter memory leak detected

На сервере появляется предупреждение:

(node) warning: possible EventEmitter memory leak detected. 11 connected listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
    at MongoStore.addListener (events.js:239:17)
    at MongoStore.once (events.js:265:8)
    at MongoStore.getCollection (/home/ubuntu/workspace/node_modules/connect-mongo/lib/connect-mongo.js:219:16)
    at MongoStore.get (/home/ubuntu/workspace/node_modules/connect-mongo/lib/connect-mongo.js:285:10)
    at Array.<anonymous> (/home/ubuntu/workspace/node_modules/passport.socketio/lib/index.js:69:16)
    at run (/home/ubuntu/workspace/node_modules/socket.io/lib/namespace.js:114:11)
    at Namespace.run (/home/ubuntu/workspace/node_modules/socket.io/lib/namespace.js:126:3)
    at Namespace.add (/home/ubuntu/workspace/node_modules/socket.io/lib/namespace.js:155:8)
    at Client.connect (/home/ubuntu/workspace/node_modules/socket.io/lib/client.js:74:20)
    at Server.onconnection (/home/ubuntu/workspace/node_modules/socket.io/lib/index.js:315:10)
    at emitOne (events.js:77:13)
    at Server.emit (events.js:169:7)
    at Server.handshake (/home/ubuntu/workspace/node_modules/socket.io/node_modules/engine.io/lib/server.js:262:8)
    at /home/ubuntu/workspace/node_modules/socket.io/node_modules/engine.io/lib/server.js:184:12
    at Server.checkRequest (/home/ubuntu/workspace/node_modules/socket.io/lib/index.js:68:51)
    at Server.verify (/home/ubuntu/workspace/node_modules/socket.io/node_modules/engine.io/lib/server.js:127:17)

Error: Cannot find module 'error-tojson'

Добрый день!
Вот вывод терминала после запуска. Однако по адресу localhost:3000 ничего не появляется. Как понять, работает сервер или нет? В чем проблема?

admin1@proctor:~/ITMOproctor$ npm start

> [email protected] start /home/admin1/ITMOproctor
> node ./bin/www

`open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client
2017-08-11T12:14:16.307Z - error: uncaughtException: Cannot find module 'error-tojson' date=Fri Aug 11 2017 16:14:16 GMT+0400 (SAMT), pid=1803, uid=1000, gid=1000, cwd=/home/admin1/ITMOproctor, execPath=/usr/bin/nodejs, version=v0.12.18, argv=[node, /home/admin1/ITMOproctor/bin/www], rss=179945472, heapTotal=72151552, heapUsed=46921488, loadavg=[0.08642578125, 0.056640625, 0.05078125], uptime=921
# Error: Cannot find module 'error-tojson'
    at Function.Module._resolveFilename (module.js:336:15)
    at Function.Module._load (module.js:278:25)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/home/admin1/ITMOproctor/node_modules/kurento-client/lib/index.js:27:1)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at module.exports (/home/admin1/ITMOproctor/webrtc/webcall.js:3:15)
    at module.exports (/home/admin1/ITMOproctor/webrtc/index.js:3:5)
    at Object.<anonymous> (/home/admin1/ITMOproctor/server.js:105:20)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
2017-08-11T12:14:16.323Z - info: MongoDb is connected

Разрешить установку приложения на OS X

По умолчанию на Mac блокируется установка программного обеспечения от не идентифицированных разработчиков, чьи приложения не подписаны соответствующим Developer ID.

При заходе в экзамен продолжительность экзамена всегда подсвечивается красным

Продолжительность экзамена должна подсвечиваться следующим образом:

  • черный - до окончания экзамена осталось больше 15 мин.
  • желтый - до окончания экзамена осталось меньше 15 мин.
  • красный - до окончания экзамена осталось меньше 5 мин.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.