Commit 7c8d1760 authored by Marlon Ulloa Amaya's avatar Marlon Ulloa Amaya

cliente - api sistemas de consejerias

parent a138aee1
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var db = require('./server/models');
var crudOperations = require('./crud')(db);
var apiV1 = require('./routes/api/v1/')(crudOperations,db);
var index = require('./routes');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(function(req, res, next) {
var oneof = false;
if(req.headers.origin) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
oneof = true;
}
if(req.headers['access-control-request-method']) {
res.header('Access-Control-Allow-Methods', req.headers['access-control-request-method']);
oneof = true;
}
if(req.headers['access-control-request-headers']) {
res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']);
oneof = true;
}
if(oneof) {
res.header('Access-Control-Max-Age', 60 * 60 * 24 * 365);
}
// intercept OPTIONS method
if (oneof && req.method == 'OPTIONS') {
res.send(200);
}
else {
next();
}
});
app.use(express.static(path.join(__dirname, 'public')));
app.use('/api', index);
app.use('/api/v1',apiV1);
var apiOptions = {
context: '/api2',
logger:{ file: 'mochaTest.log', level: 'debug' },
discover: { path: 'discover', secure: true },
// proto: { path: 'proto', secure: true }
}
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('api:server');
var http = require('http');
var https = require('https');
var fs = require("fs");
/*var options = {
key: fs.readFileSync("cert/selfsigned.key"),
cert: fs.readFileSync("cert/selfsigned.crt")
};
*/
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
//var server = https.createServer(options,app);
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
Aquí se colocaran los archivos necesarios para una implementación bajo https
const request = require('request-promise')
const btoa = require('btoa')
const ISSUER = 'https://dev-878998.oktapreview.com/oauth2/ausj08qk5vYaB8HWc0h7';
const TEST_CLIENT_ID = '0oaj19qfa1c2F66WD0h7';
const TEST_CLIENT_SECRET = 'LxhIkvex-1Z1JAx7vhW9LL4VhSYb-yuSlvUGUPlp';
const DEFAULT_SCOPE = '';
//const ENDPOINT = 'http://localhost:3000/api/v1/students/00918df7-5843-c53e-eec9-1595af6fdcd9?program=223';
//const ENDPOINT = 'http://localhost:3000/api/v1/students/E26?program=1';
//const ENDPOINT = 'http://localhost:3000/api/v1/students2/'; //toda la malla
//const ENDPOINT = 'http://localhost:3000/api/v1/studentacademicsbycurriculum/?studentid=1&curriculumid=1'; //el historico academico del estudiante
const ENDPOINT = 'http://localhost:3000/api/v1/studentpartners/?studentid=1&curriculumid=1&courseid=14&termid=3&group=A'; //los companeros de aula que aprobaron
const test = async () => {
const token = btoa(`${TEST_CLIENT_ID}:${TEST_CLIENT_SECRET}`)
try {
const { token_type, access_token } = await request({
uri: `${ISSUER}/v1/token`,
json: true,
method: 'POST',
headers: {
authorization: `Basic ${token}`,
},
form: {
grant_type: 'client_credentials',
scope: DEFAULT_SCOPE,
},
})
const response = await request({
uri: ENDPOINT,
json: true,
rejectUnauthorized: false,
headers: {
authorization: [token_type, access_token].join(' '),
},
})
//console.log(response[0].student_curriculums[0].curriculum.program_terms[0].program_courses[0].me);
console.log(response);
//console.log(JSON.parse(response).student_curriculum.curriculum.program_term.program_course,access_token);
//console.log(response[0].student_curriculum[0].curriculum.program_term[0].program_course);
//console.log(JSON.parse(JSON.parse(response).student_curriculum));
//console.log(JSON.parse(response).student_curriculum);
//console.log(JSON.parse(response)[0].student_curriculum[0].curriculum.program_term[0].program_course);
} catch (error) {
console.log(`Error: ${error.message}`)
}
}
test()
This diff is collapsed.
This diff is collapsed.
{
"name": "api",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "export NODE_ENV=development && node ./bin/www",
"devStart": "nodemon ./bin/www",
"testRequest": "concurrently \"nodemon ./bin/www\" \"node clientRequestExample.js\"",
"sequelizeAuto": "sequelize-auto -o './server/models' -d <database> -h <ip> -u <username> -p 5432 -x '<password>' -e postgres",
"sequelizeCreateMigration": "sequelize migration:generate --name $NAME",
"sequelizeMigrate": "sequelize db:migrate",
"sequelizeMigrateUndo": "sequelize db:migrate:undo"
},
"dependencies": {
"@okta/jwt-verifier": "0.0.14",
"body-parser": "^1.18.3",
"btoa": "^1.2.1",
"connect-rest": "^3.0.26",
"cookie-parser": "~1.4.3",
"d3": "^5.7.0",
"debug": "~2.2.0",
"express": "^4.16.4",
"express-validator": "^5.3.0",
"jade": "~1.11.0",
"morgan": "^1.9.1",
"pg": "^7.5.0",
"pg-hstore": "^2.3.2",
"request-promise": "^4.2.2",
"sequelize": "^5.0.0-beta.14",
"serve-favicon": "^2.5.0",
"wagner-core": "^0.2.0"
},
"devDependencies": {
"nodemon": "^1.18.4",
"concurrently": "^4.0.1"
}
}
This diff is collapsed.
This diff is collapsed.
define({
"name": "LALA API",
"version": "0.1.0",
"description": "The LALA API REST documentation.",
"title": "LALA API",
"url": "https://localhost:3000/api/v1",
"sampleUrl": false,
"defaultVersion": "0.0.0",
"apidoc": "0.3.0",
"generator": {
"name": "apidoc",
"time": "2019-01-11T15:52:25.258Z",
"url": "http://apidocjs.com",
"version": "0.17.6"
}
});
{
"name": "LALA API",
"version": "0.1.0",
"description": "The LALA API REST documentation.",
"title": "LALA API",
"url": "https://localhost:3000/api/v1",
"sampleUrl": false,
"defaultVersion": "0.0.0",
"apidoc": "0.3.0",
"generator": {
"name": "apidoc",
"time": "2019-01-11T15:52:25.258Z",
"url": "http://apidocjs.com",
"version": "0.17.6"
}
}
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
define({
ca: {
'Allowed values:' : 'Valors permesos:',
'Compare all with predecessor': 'Comparar tot amb versió anterior',
'compare changes to:' : 'comparar canvis amb:',
'compared to' : 'comparat amb',
'Default value:' : 'Valor per defecte:',
'Description' : 'Descripció',
'Field' : 'Camp',
'General' : 'General',
'Generated with' : 'Generat amb',
'Name' : 'Nom',
'No response values.' : 'Sense valors en la resposta.',
'optional' : 'opcional',
'Parameter' : 'Paràmetre',
'Permission:' : 'Permisos:',
'Response' : 'Resposta',
'Send' : 'Enviar',
'Send a Sample Request' : 'Enviar una petició d\'exemple',
'show up to version:' : 'mostrar versió:',
'Size range:' : 'Tamany de rang:',
'Type' : 'Tipus',
'url' : 'url'
}
});
define({
de: {
'Allowed values:' : 'Erlaubte Werte:',
'Compare all with predecessor': 'Vergleiche alle mit ihren Vorgängern',
'compare changes to:' : 'vergleiche Änderungen mit:',
'compared to' : 'verglichen mit',
'Default value:' : 'Standardwert:',
'Description' : 'Beschreibung',
'Field' : 'Feld',
'General' : 'Allgemein',
'Generated with' : 'Erstellt mit',
'Name' : 'Name',
'No response values.' : 'Keine Rückgabewerte.',
'optional' : 'optional',
'Parameter' : 'Parameter',
'Permission:' : 'Berechtigung:',
'Response' : 'Antwort',
'Send' : 'Senden',
'Send a Sample Request' : 'Eine Beispielanfrage senden',
'show up to version:' : 'zeige bis zur Version:',
'Size range:' : 'Größenbereich:',
'Type' : 'Typ',
'url' : 'url'
}
});
define({
es: {
'Allowed values:' : 'Valores permitidos:',
'Compare all with predecessor': 'Comparar todo con versión anterior',
'compare changes to:' : 'comparar cambios con:',
'compared to' : 'comparado con',
'Default value:' : 'Valor por defecto:',
'Description' : 'Descripción',
'Field' : 'Campo',
'General' : 'General',
'Generated with' : 'Generado con',
'Name' : 'Nombre',
'No response values.' : 'Sin valores en la respuesta.',
'optional' : 'opcional',
'Parameter' : 'Parámetro',
'Permission:' : 'Permisos:',
'Response' : 'Respuesta',
'Send' : 'Enviar',
'Send a Sample Request' : 'Enviar una petición de ejemplo',
'show up to version:' : 'mostrar a versión:',
'Size range:' : 'Tamaño de rango:',
'Type' : 'Tipo',
'url' : 'url'
}
});
define({
fr: {
'Allowed values:' : 'Valeurs autorisées :',
'Compare all with predecessor': 'Tout comparer avec ...',
'compare changes to:' : 'comparer les changements à :',
'compared to' : 'comparer à',
'Default value:' : 'Valeur par défaut :',
'Description' : 'Description',
'Field' : 'Champ',
'General' : 'Général',
'Generated with' : 'Généré avec',
'Name' : 'Nom',
'No response values.' : 'Aucune valeur de réponse.',
'optional' : 'optionnel',
'Parameter' : 'Paramètre',
'Permission:' : 'Permission :',
'Response' : 'Réponse',
'Send' : 'Envoyer',
'Send a Sample Request' : 'Envoyer une requête représentative',
'show up to version:' : 'Montrer à partir de la version :',
'Size range:' : 'Ordre de grandeur :',
'Type' : 'Type',
'url' : 'url'
}
});
define({
it: {
'Allowed values:' : 'Valori permessi:',
'Compare all with predecessor': 'Confronta tutto con versioni precedenti',
'compare changes to:' : 'confronta modifiche con:',
'compared to' : 'confrontato con',
'Default value:' : 'Valore predefinito:',
'Description' : 'Descrizione',
'Field' : 'Campo',
'General' : 'Generale',
'Generated with' : 'Creato con',
'Name' : 'Nome',
'No response values.' : 'Nessun valore di risposta.',
'optional' : 'opzionale',
'Parameter' : 'Parametro',
'Permission:' : 'Permessi:',
'Response' : 'Risposta',
'Send' : 'Invia',
'Send a Sample Request' : 'Invia una richiesta di esempio',
'show up to version:' : 'mostra alla versione:',
'Size range:' : 'Intervallo dimensione:',
'Type' : 'Tipo',
'url' : 'url'
}
});
define([
'./locales/ca.js',
'./locales/de.js',
'./locales/es.js',
'./locales/fr.js',
'./locales/it.js',
'./locales/nl.js',
'./locales/pl.js',
'./locales/pt_br.js',
'./locales/ro.js',
'./locales/ru.js',
'./locales/tr.js',
'./locales/vi.js',
'./locales/zh.js',
'./locales/zh_cn.js'
], function() {
var langId = (navigator.language || navigator.userLanguage).toLowerCase().replace('-', '_');
var language = langId.substr(0, 2);
var locales = {};
for (index in arguments) {
for (property in arguments[index])
locales[property] = arguments[index][property];
}
if ( ! locales['en'])
locales['en'] = {};
if ( ! locales[langId] && ! locales[language])
language = 'en';
var locale = (locales[langId] ? locales[langId] : locales[language]);
function __(text) {
var index = locale[text];
if (index === undefined)
return text;
return index;
};
function setLanguage(language) {
locale = locales[language];
}
return {
__ : __,
locales : locales,
locale : locale,
setLanguage: setLanguage
};
});
define({
nl: {
'Allowed values:' : 'Toegestane waarden:',
'Compare all with predecessor': 'Vergelijk alle met voorgaande versie',
'compare changes to:' : 'vergelijk veranderingen met:',
'compared to' : 'vergelijk met',
'Default value:' : 'Standaard waarde:',
'Description' : 'Omschrijving',
'Field' : 'Veld',
'General' : 'Algemeen',
'Generated with' : 'Gegenereerd met',
'Name' : 'Naam',
'No response values.' : 'Geen response waardes.',
'optional' : 'optioneel',
'Parameter' : 'Parameter',
'Permission:' : 'Permissie:',
'Response' : 'Antwoorden',
'Send' : 'Sturen',
'Send a Sample Request' : 'Stuur een sample aanvragen',
'show up to version:' : 'toon tot en met versie:',
'Size range:' : 'Maatbereik:',
'Type' : 'Type',
'url' : 'url'
}
});
define({
pl: {
'Allowed values:' : 'Dozwolone wartości:',
'Compare all with predecessor': 'Porównaj z poprzednimi wersjami',
'compare changes to:' : 'porównaj zmiany do:',
'compared to' : 'porównaj do:',
'Default value:' : 'Wartość domyślna:',
'Description' : 'Opis',
'Field' : 'Pole',
'General' : 'Generalnie',
'Generated with' : 'Wygenerowano z',
'Name' : 'Nazwa',
'No response values.' : 'Brak odpowiedzi.',
'optional' : 'opcjonalny',
'Parameter' : 'Parametr',
'Permission:' : 'Uprawnienia:',
'Response' : 'Odpowiedź',
'Send' : 'Wyślij',
'Send a Sample Request' : 'Wyślij przykładowe żądanie',
'show up to version:' : 'pokaż do wersji:',
'Size range:' : 'Zakres rozmiaru:',
'Type' : 'Typ',
'url' : 'url'
}
});
define({
'pt_br': {
'Allowed values:' : 'Valores permitidos:',
'Compare all with predecessor': 'Compare todos com antecessores',
'compare changes to:' : 'comparar alterações com:',
'compared to' : 'comparado com',
'Default value:' : 'Valor padrão:',
'Description' : 'Descrição',
'Field' : 'Campo',
'General' : 'Geral',
'Generated with' : 'Gerado com',
'Name' : 'Nome',
'No response values.' : 'Sem valores de resposta.',
'optional' : 'opcional',
'Parameter' : 'Parâmetro',
'Permission:' : 'Permissão:',
'Response' : 'Resposta',
'Send' : 'Enviar',
'Send a Sample Request' : 'Enviar um Exemplo de Pedido',
'show up to version:' : 'aparecer para a versão:',
'Size range:' : 'Faixa de tamanho:',
'Type' : 'Tipo',
'url' : 'url'
}
});
define({
ro: {
'Allowed values:' : 'Valori permise:',
'Compare all with predecessor': 'Compară toate cu versiunea precedentă',
'compare changes to:' : 'compară cu versiunea:',
'compared to' : 'comparat cu',
'Default value:' : 'Valoare implicită:',
'Description' : 'Descriere',
'Field' : 'Câmp',
'General' : 'General',
'Generated with' : 'Generat cu',
'Name' : 'Nume',
'No response values.' : 'Nici o valoare returnată.',
'optional' : 'opțional',
'Parameter' : 'Parametru',
'Permission:' : 'Permisiune:',
'Response' : 'Răspuns',
'Send' : 'Trimite',
'Send a Sample Request' : 'Trimite o cerere de probă',
'show up to version:' : 'arată până la versiunea:',
'Size range:' : 'Interval permis:',
'Type' : 'Tip',
'url' : 'url'
}
});