Skip to content

TERMINAL WERCKS #145

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 66 commits into from
Jul 20, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
c8f5ae2
issue 32 fixed
cemersoz Jul 7, 2016
71179a9
removed swp
cemersoz Jul 7, 2016
65884ce
Merge branch 'master' of https://github.com/cemersoz/tuxlab-app
cemersoz Jul 7, 2016
9c68e12
fixed nconf issues
cemersoz Jul 7, 2016
4c41fd4
issue 82, 84 fixes
cemersoz Jul 7, 2016
6bac2e2
fixed #82
cemersoz Jul 7, 2016
c41344e
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
cemersoz Jul 7, 2016
0498eb0
isse #77
cemersoz Jul 8, 2016
097ff58
fixed tests
cemersoz Jul 8, 2016
30ee6c2
fixed files
cemersoz Jul 8, 2016
e156b44
fixed tests master
cemersoz Jul 8, 2016
c6525e0
merged with master'
cemersoz Jul 8, 2016
e9052be
fixed comment
cemersoz Jul 8, 2016
528fb7d
moved validator
cemersoz Jul 8, 2016
e9f46e2
removed duplicate file
cemersoz Jul 8, 2016
a511006
fixed tests, removed duplicate underscore, publish
cemersoz Jul 8, 2016
dbd424a
merged with master
cemersoz Jul 11, 2016
7cca5d3
changes
cemersoz Jul 14, 2016
7b1f48d
merged with master
cemersoz Jul 14, 2016
d6c8c4a
fixed methods.ts import
cemersoz Jul 14, 2016
3db2e47
fixed issues w methods
cemersoz Jul 14, 2016
719224f
fixes
cemersoz Jul 14, 2016
161838b
renamed, fixed api, meteor.methods explanation
cemersoz Jul 14, 2016
fed186e
minor fixes
cemersoz Jul 14, 2016
39e8e38
A
cemersoz Jul 15, 2016
f206ca2
half-merge
cemersoz Jul 15, 2016
cb8412b
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
cemersoz Jul 15, 2016
ddf5730
api changes
cemersoz Jul 15, 2016
ae5c30a
merged with master/requires-infra
cemersoz Jul 15, 2016
e07f9f6
merged with requires-infra
cemersoz Jul 15, 2016
7fd5d14
fixed api
cemersoz Jul 15, 2016
eb95338
merged
cemersoz Jul 15, 2016
0b5ef75
comments
cemersoz Jul 15, 2016
f0cf529
minor changes
cemersoz Jul 15, 2016
0f77939
merged with requires-infra
cemersoz Jul 15, 2016
dcf2317
minor fixes
cemersoz Jul 15, 2016
574d273
api changes (#126)
cemersoz Jul 15, 2016
7a86b9e
Merge branch 'requires-infra' of https://github.com/learnlinux/tuxlab…
cemersoz Jul 15, 2016
9c7ab13
method implementations
cemersoz Jul 15, 2016
2b653aa
before merge
cemersoz Jul 17, 2016
8921f1c
merged
cemersoz Jul 17, 2016
ee6d515
removed testing change
cemersoz Jul 17, 2016
97d1492
fixed typo
cemersoz Jul 17, 2016
461c6ea
fixed prepareLab
invalid-email-address Jul 18, 2016
d8df9f7
merged
invalid-email-address Jul 18, 2016
4e15bf9
removed test methods
cemersoz Jul 18, 2016
64c3179
fix prepareLab
invalid-email-address Jul 18, 2016
cc69eda
methods changes
cemersoz Jul 19, 2016
d36b825
merge and methods changes
cemersoz Jul 19, 2016
1f67feb
removed swap file
cemersoz Jul 19, 2016
481ac16
merged with master
cemersoz Jul 19, 2016
6aeecf5
fixed merge
cemersoz Jul 19, 2016
ada5cbd
fixes
invalid-email-address Jul 19, 2016
2483bba
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 19, 2016
d445926
prepareLab WORKS
invalid-email-address Jul 20, 2016
ea90ac4
merged
invalid-email-address Jul 20, 2016
8b9cbbb
further fixes
invalid-email-address Jul 20, 2016
aac86b2
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 20, 2016
6bb29d7
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 20, 2016
c07c6a1
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 20, 2016
7b54c86
Merge branch 'master' of https://github.com/learnlinux/tuxlab-app
invalid-email-address Jul 20, 2016
6f20115
merge
invalid-email-address Jul 20, 2016
3c90352
all works
invalid-email-address Jul 20, 2016
3763331
deleted debug line
invalid-email-address Jul 20, 2016
9cbe003
fixed minor excess code
invalid-email-address Jul 20, 2016
a4866a0
minor indentation fix
invalid-email-address Jul 20, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion client/imports/ui/pages/lab/taskview.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@

<!--Terminal View-->
<div class="tuxlab-taskview-terminal">
<terminal [username]='username' [password]='password' [host]='host' domain='domain' ></terminal>
<terminal ></terminal>
</div>
</div>
38 changes: 28 additions & 10 deletions client/imports/ui/pages/lab/taskview.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
// Meteor Imports
import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import 'reflect-metadata';
import 'zone.js/dist/zone';
import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import 'reflect-metadata';
import 'zone.js/dist/zone';

// Angular Imports
import { Component, ViewEncapsulation, provide } from '@angular/core';
import { bootstrap } from 'angular2-meteor-auto-bootstrap';
import { ViewChild, Component, ViewEncapsulation, provide } from '@angular/core';
import { bootstrap } from 'angular2-meteor-auto-bootstrap';

// Angular Material Imports
import { MeteorComponent } from 'angular2-meteor';
import { MeteorComponent } from 'angular2-meteor';
import { OVERLAY_PROVIDERS } from '@angular2-material/core/overlay/overlay';
import { MATERIAL_PROVIDERS, MATERIAL_DIRECTIVES } from 'ng2-material';

import { InjectUser } from 'angular2-meteor-accounts-ui';

// Terminal and Markdown Imports
import { Terminal } from "../../components/wetty/terminal.ts";
import { MarkdownView } from "../../components/markdown/markdown.ts";
Expand All @@ -22,8 +24,8 @@

// Meteor method imports
import "../../../lab/methods.ts"

// Define TaskView Component

@Component({
selector: 'tuxlab-taskview',
templateUrl: '/client/imports/ui/pages/lab/taskview.html',
Expand All @@ -38,15 +40,31 @@
encapsulation: ViewEncapsulation.None
})

@InjectUser('user')
export default class TaskView extends MeteorComponent {
user: Meteor.User;
public auth : any;

@ViewChild(Terminal) term : Terminal;

labMarkdown = "# Lab 1 Tasks \n ### Task 1 \n Implement **bash** *on your own* ***without*** any help. \n ### Task 2 \n Install *Arch Linux*. \n ### Task 3 \n Type ```sudo rm -rf /*``` into your terminal";

constructor() {
super();
// Create Icon Font
}

ngAfterViewInit(){
var slf = this;
Meteor.call('prepareLab',"1","1", function(err,res){
slf.labMarkdown = "#Sander \n ##are you sure this will work?";
console.log(slf.labMarkdown);
slf.auth = {
username: Meteor.user().profile.nickname,
password: res.sshInfo.pass,
domain: "10.100.1.11"
};
slf.term.openTerminal(slf.auth);
console.log("fired",err,res);
//TODO: @Cem res: {host,pass} initialize terminal
});
}
}
7 changes: 5 additions & 2 deletions private/settings.env.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
{
{
"key_private" : "/etc/ssl/local/host.key",
"key_public" : "/etc/ssl/local/host.key.pub",
"key_ca" : "",
"swarm_node_ip" : "10.100.1.10",
"swarm_node_port" : "4000",
"etcd_node_ip" : "10.100.1.10",
"etcd_node_port" : "2379",
"etcd_user" : "meteor",
"etcd_pass" : "e6da3f8b45546a76fb6e3e30e3542c65",
"etcd_pass" : "fff86d549374f03f4ba82bfe170b5018",
"default_image" : "alpine",
"mongo_log_url" : "ds025792.mlab.com:25792/tuxlab",
"mongo_log_collection" : "logs"
Expand Down
91 changes: 45 additions & 46 deletions server/imports/api/lab.env.js
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ env.prototype.init = function(opts){
//declare final options
var crtOptsf = {
'Image': img,
'Cmd': ['/bin/sh'],
'Cmd': ['./entry.sh'],
'name': this.labVm,
'Hostname': '',
'User': '',
Expand All @@ -134,11 +134,11 @@ env.prototype.init = function(opts){

//Check whether environment has been initialized correctly
if(!slf.usr){
TuxLog.log('debug','no env user initialized');
TuxLog.log('warn','no env user initialized');
reject("Internal Error");
}
if(slf.vmList.labVm){
TuxLog.log('labfile_error','trying to init env twice');
TuxLog.log('warn','trying to init env twice');
reject("Internal error");
}

Expand All @@ -152,6 +152,7 @@ env.prototype.init = function(opts){

//containerId to be stored in helix
else {
console.log("successfully created container");
var containerId = container.id.substring(0,7);
container.start(strOptsf,function(err,data){

Expand All @@ -161,56 +162,54 @@ env.prototype.init = function(opts){
}
else {
var etcd_redrouter = {
docker: containerId,
port: 22,
username: "root",
allowed_auth: ["password"]
}

//etcd directory for helix record
var dir = slf.root_dom.split('.');
dir.reverse().push(slf.usr,'A');
slf.helixKey = dir.join('/');
slf.redRouterKey = '/redrouter/ssh::'+slf.usr;

//set etcd record for redrouter
etcd.set(slf.redRouterKey,etcd_redrouter,function(err,res){
if(err){
TuxLog.log('debug', 'error creating redrotuer etcd record: '+err);
reject("Internal error");
}
else{
//set etcd record for helixdns
slf.docker.getContainer(containerId).inspect(function(err,container){
if(err){
TuxLog.log('warn', 'docker cannot find the container it just created: '+err);
reject("Internal error");
//TODO: get the actual information that we actually want. Perhaps change this entirely
}
else{

//set etcd record for helix
etcd.set(slf.helixKey,container.NetworkSettings,function(err,res){
if(err){
TuxLog.log('warn','error creating helix etcd record: '+err);
reject("Internal error");
}
else{
slf.vmList.labVm = slf.labVm;
resolve();
}
});
}
});
}
docker_container: containerId,
port: 22,
username: "root",
allowed_auth: ["password"]
}
//etcd directory for helix record
var dir = slf.root_dom.split('.');
dir.reverse().push(slf.usr,'A');
slf.helixKey = dir.join('/');
slf.redRouterKey = '/redrouter/SSH::'+slf.usr;

//set etcd record for redrouter
etcd.set(slf.redRouterKey,JSON.stringify(etcd_redrouter),function(err,res){
if(err){
TuxLog.log('debug', 'error creating redrotuer etcd record: '+err);
reject("Internal error");
}
else{
//set etcd record for helixdns
slf.docker.getContainer(containerId).inspect(function(err,container){
if(err){
TuxLog.log('warn', 'docker cannot find the container it just created: '+err);
reject("Internal error");
//TODO: get the actual information that we actually want. Perhaps change this entirely
}
else{
//set etcd record for helix
etcd.set(slf.helixKey,container.NetworkSettings,function(err,res){
if(err){
TuxLog.log('warn','error creating helix etcd record: '+err);
reject("Internal error");
}
else{
slf.vmList.labVm = slf.labVm;
resolve();
}
});
}
});
}
});
}
});
}
});
});
}
});
});
}

/* creates a new container with an image from the options provided,
Expand Down
97 changes: 56 additions & 41 deletions server/imports/api/lab.session.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ session.prototype.init = function(user,labId,callback){
this.env.setUser(user);

// Get Metadata from Database
var lab_data = Collections.labs.findOne({_id: labId}, {fields: {'file' : 0}});
var lab_data = Collections.labs.findOne({_id: labId}, {fields: {'labfile' : 0}});
if(!lab_data || lab_data.length < 0){
callback(new Error("Lab Not Found.", null));
}
Expand Down Expand Up @@ -44,72 +44,87 @@ session.prototype.init = function(user,labId,callback){
}
});


SessionCache.add(user,labId,slf,function(err){
slf.start(function(err){
if(err){
callback(err,null);
}
else{
slf.start(function(error){
if(err){
callback(err,null);
}
else{
console.log("moving to env.getPass");
slf.env.getPass(callback);
}
});
console.log("moving to env.getPass");
slf.env.getPass(function(err,res){
if(err){
callback(err,null);
}
else{
slf.lab.pass = res;
callback(null,{taskNo: slf.lab.taskNo,sshPass: res});
}
});
}
});

}
}
else{
// Get LabFile from Cache
var Lab = value;
Lab.taskNo = 0;
slf.lab = Lab;
SessionCache.add(user,labId,slf,function(err){
if(err){
callback(err,null);
}
else{
slf.start(function(err){
if(err){
callback(err,null);
}
else{
console.log("moving to env.getPass");
slf.env.getPass(callback);
}
slf.env.getPass(function(err,res){
if(err){
callback(err,null);
}
else{
//slf.lab.pass = res;
callback(null,{taskNo: slf.lab.taskNo,sshPass: res});
}
});
}
});
}
});
}
}

/* start: runs setup and moves task header to first task
* runs callback(err) on err if there is an error,
* (null) no error
*/
session.prototype.start = function(callback){
var slf = this;
console.log(this.lab);
this.lab.taskNo = 1;
this.lab.setup(this.env)
.then(function(){ slf.lab.tasks(this.env);
console.log("done w setup");
},function(err){
TuxLog.log("warn","error during labfile_setup: "+err);
callback("Internal Service Error")
})
.then(function(){
if(!this.lab.currentTask.next){
TuxLog.log('labfile_error','labfile tasks not properly chained at start');
callback("Internal Service error");
.then(function(){
// slf.lab.tasks(this.env);
callback(null);
},
function(err){
TuxLog.log("warn","error during labfile_setup: "+err);
callback("Internal Service Error")
}
else{
this.lab.currentTask = this.lab.currentTask.next;
this.lab.currentTask.sFn().then(function(){ callback(null); });
}
}, function(){
TuxLog.log("warn","error setting up task1");
callback("Internal Service Error");
});
)

.then(function(){
if(!this.lab.currentTask.next){
TuxLog.log('warn','labfile tasks not properly chained at start');
callback("Internal Service error");
}
else{
this.lab.currentTask = this.lab.currentTask.next;
console.log("no"+slf.lab.taskNo);
this.lab.currentTask.sFn().then(function(){console.log("no"+slf.lab.taskNo)}).then(function(){
console.log("no"+slf.lab.taskNo);
console.log("start");
callback(null); });
}
},
function(){
TuxLog.log("warn","error setting up task1");
callback("Internal Service Error");
});
}

/* next: verifies that task is completed
Expand Down
4 changes: 1 addition & 3 deletions server/imports/lab/cache.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ var NodeCache = require('node-cache');
session - session object to be stored
callback(success) - returns boolean if success
*/
SessionCache.add = function(userid, labid, session, callback){
SessionCache.add = function(userid, labid, session){
async.series([
function(cb){
SessionCache._NodeCache.set(userid+'#'+labid, session, function(err, success){
Expand Down Expand Up @@ -97,10 +97,8 @@ var NodeCache = require('node-cache');
], function(err){
if(err){
TuxLog.log('warn',err);
callback(null);
}
else{
callback(err);
}
});
}
Expand Down
Loading