Merge remote-tracking branch 'NARKOZ/master'

# Conflicts:
#	php/composer.json
#	php/hangover.php
This commit is contained in:
Aminu Ibrahim Bakori 2015-12-06 00:50:04 +01:00
parent 4f82d32365
commit ad0ca8b7e0
22 changed files with 770 additions and 457 deletions

34
R/smack_my_bitch_up.R Normal file
View File

@ -0,0 +1,34 @@
library(httr)
today = Sys.Date()
# skip weekends
if( weekdays(today) %in% c('Saturday','Sunday') ){
quit()
}
# exit if no sessions with my username are found
output = system("who", intern = TRUE)
if( !( grep('^my_user_name', output) ) ){
quit()
}
# returns 'None' if the key doesn't exist
TWILIO_ACCOUNT_SID = Sys.getenv('TWILIO_ACCOUNT_SID')
TWILIO_AUTH_TOKEN = Sys.getenv('TWILIO_AUTH_TOKEN')
# Phone numbers
my_number = '+xxx'
her_number = '+xxx'
reasons = c(
'Working hard',
'Gotta ship this feature',
'Someone fucked the system again'
)
POST(paste("https://api.twilio.com/2010-04-01/Accounts/",TWILIO_ACCOUNT_SID,"/Messages.json",sep=""),
body = list(From=my_number,To=her_number,Body=sample(reasons,1) ),
authenticate(TWILIO_ACCOUNT_SID,TWILIO_AUTH_TOKEN) )
print( paste("Message sent at",Sys.time()) )

View File

@ -14,15 +14,15 @@ process.exit 0 if new Date().getDay() in [6, 0]
# no sessions
process.exit 0 unless new RegExp(username).test sh('who -q').toString()
conn = require('net').createConnection(port, host)
conn = require('net').createConnection port, host
setTimeout ->
conn.write "#{pass}\nsys brew\n"
setTimeout ->
conn.end 'sys pour'
process.exit(0)
process.exit 0
, 2 * 1000
, 1 * 1000
# alert
sh('say come here and take your fucking coffee')
sh 'say come here and take your fucking coffee'

47
go/hangover.go Normal file
View File

@ -0,0 +1,47 @@
package main
import (
"fmt"
"log"
"math/rand"
"os"
"github.com/codeskyblue/go-sh"
"github.com/subosito/twilio"
)
const my_number string = "+xxxxx"
const boss_number string = "+yyyyy"
func main() {
//exit if sessions with my username are found
_, err := sh.Command("who").Command("grep", "my_username").Output()
if err != nil {
os.Exit(1)
}
//Grab Twilio ID and token from environment variables
Account_Sid := os.Getenv("TWILIO_ACCOUNT_SID")
Auth_Token := os.Getenv("TWILIO_AUTH_TOKEN")
//create the reasons slice and append reasons to it
reasons := make([]string, 0)
reasons = append(reasons,
"Locked out",
"Pipes broke",
"Food poisoning",
"Not feeling well")
// Initialize Twilio client and send message
client := twilio.NewClient(Account_Sid, Auth_Token, nil)
message := fmt.Sprint("Gonna work from home...", reasons[rand.Intn(len(reasons))])
params := twilio.MessageParams{
Body: message,
}
s, resp, err := client.Messages.Send(my_number, boss_number, params)
if err == nil {
log.Fatal(s, resp, err)
}
}

39
go/smack_my_bitch_up.go Executable file
View File

@ -0,0 +1,39 @@
package main
import(
"os/exec"
"fmt"
"strings"
"os"
"math/rand"
"time"
)
func main(){
output1,err := exec.Command("who").Output()
output2 := os.Getenv("USER")
users := string(output1[:])
current_user := string(output2[:])
if(!strings.Contains(users,current_user)){
return
}
reasons := []string {"Working hard","Gotta ship this feature","Someone fucked the system again"}
rand.Seed(time.Now().UTC().UnixNano())
message := "Late at work. " + reasons[rand.Intn(len(reasons))]
TWILIO_ACCOUNT_SID := string(os.Getenv("TWILIO_ACCOUNT_SID"))
TWILIO_AUTH_TOKEN := string(os.Getenv("TWILIO_AUTH_TOKEN"))
MY_NUMBER := string(os.Getenv("MY_NUMBER"))
HER_NUMBER := string(os.Getenv("HER_NUMBER"))
response,err := exec.Command("curl","-fSs","-u",TWILIO_ACCOUNT_SID + ":" + TWILIO_AUTH_TOKEN, "-d", "From=" + MY_NUMBER, "-d", "To=" + HER_NUMBER, "-d" , "Body=" + message, "https://api.twilio.com/2010-04-01/Accounts/" + TWILIO_ACCOUNT_SID + "/Messages").Output()
if(err != nil){
fmt.Printf("Failed to send SMS: ",err)
return
}
fmt.Printf("Message Sent Successfully with response: %s ",response)
}

34
java/fucking_coffee.java Normal file
View File

@ -0,0 +1,34 @@
import java.net.*;
import java.io.*;
public class fucking_coffee{
private static final String MY_USERNAME = "my_username";
private static final String PASSWORD_PROMPT = "Password: ";
private static final String PASSWORD = "1234";
private static final String COFFEE_MACHINE_IP = "10.10.42.42";
private static int DELAY_BEFORE_BREW = 17;
private static int DELAY = 24;
public static void main(String[] args)throws Exception{
for(int i = 1; i< args.length ; i++){
if(!args[i].contains(MY_USERNAME)){
return;
}
}
Socket telnet = new Socket(COFFEE_MACHINE_IP, 23);
PrintWriter out = new PrintWriter(telnet.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(telnet.getInputStream()));
Thread.sleep(DELAY_BEFORE_BREW*1000);
if(in.readLine() != PASSWORD_PROMPT){
return ;
}
out.println(PASSWORD);
out.println("sys brew");
Thread.sleep(DELAY*1000);
out.println("sys pour");
out.close();
in.close();
telnet.close();
}
}

View File

@ -8,21 +8,21 @@ Dotenv.load
GMAIL_USERNAME = ENV['GMAIL_USERNAME']
GMAIL_PASSWORD = ENV['GMAIL_PASSWORD']
gmail = Gmail.connect(GMAIL_USERNAME, GMAIL_PASSWORD)
kumars_email = 'kumar.a@example.com'
GMAIL = Gmail.connect(GMAIL_USERNAME, GMAIL_PASSWORD)
KUMARS_EMAIL = 'kumar.a@example.com'
DB_NAME_REGEX = /\S+_staging/
KEYWORDS_REGEX = /sorry|help|wrong/i
def create_reply(subject)
gmail.compose do
to kumars_email
GMAIL.compose do
to KUMARS_EMAIL
subject "RE: #{subject}"
body "No problem. I've fixed it. \n\n Please be careful next time."
end
end
gmail.inbox.find(:unread, from: kumars_email).each do |email|
GMAIL.inbox.find(:unread, from: KUMARS_EMAIL).each do |email|
if email.body.raw_source[KEYWORDS_REGEX] && (db_name = email.body.raw_source[DB_NAME_REGEX])
backup_file = "/home/backups/databases/#{db_name}-" + (Date.today - 1).strftime('%Y%m%d') + '.gz'
abort 'ERROR: Backup file not found' unless File.exist?(backup_file)
@ -34,6 +34,6 @@ gmail.inbox.find(:unread, from: kumars_email).each do |email|
email.read!
email.label('Database fixes')
reply = create_reply(email.subject)
gmail.deliver(reply)
GMAIL.deliver(reply)
end
end

41
nodejs/fucking_coffee.js Normal file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env node
/* Before running:
npm install telnet-client
*/
var exec = require('child_process').exec;
var telnet = require('telnet-client');
var me = 'my_username';
exec("who", function(error, stdout, stderr) {
// Exit if no sessions with my username are found
if(stdout.indexOf(me) == -1)
process.exit(/*1*/);
var coffee_machine_ip = 'xxx.xxx.xxx.xxx';
var password = 'xxxx';
var con = new telnet();
con.on('ready', function(prompt) {
con.exec('Password: ' + password, function(error, res) {
// Brew Coffee!
con.exec('sys brew', function(error, res) {
// Wait for 24s
setTimeout(function() {
// Pour Coffee!
con.exec('sys pour', function(error, res) {
con.end();
});
}, 24000);
});
});
});
con.connect({host: coffee_machine_ip});
});

View File

@ -0,0 +1,83 @@
#!/usr/bin/env node
/* Before running:
Setup Yo Callback URL and Yo username for coffee machine:
http://docs.justyo.co/docs/receiving-a-yo-with-the-api
*/
var exec = require('child_process').exec;
var telnet = require('telnet-client');
var ME = 'my_username';
var AUTHORIZED_YO_NAMES = [ME];
var COFFEE_MACHINE_YO_NAME = 'coffeemachine';
// These should be same as what you set up in the Yo API
var CALLBACK_URL = 'http://xxx.com';
var CALLBACK_ENDPOINT = '/coffeemachine';
var PORT = '3000';
exec("who -q", function(error, stdout, stderr) {
var express = require('express');
var coffeeApp = express();
// Exit if no sessions with my username are found
if(stdout.indexOf(ME) == -1)
process.exit(1);
// Got a Yo!
coffeeApp.get(CALLBACK_ENDPOINT, function (req, res) {
if(req.query.username === undefined) {
// Not a Yo, don't make coffee.
res.sendStatus(401);
}
else if(AUTHORIZED_YO_NAMES.indexOf(req.query.username) == -1) {
// If authorized users didn't Yo, don't make coffee.
res.sendStatus(401);
console.log(req.query.username + ' YO\'d.')
}
else {
res.sendStatus(200);
var coffee_machine_ip = 'xxx.xxx.xxx.xxx';
var password = 'xxxx';
var con = new telnet();
con.on('ready', function(prompt) {
con.exec('Password: ' + password, function(error, res) {
// Brew Coffee!
con.exec('sys brew', function(error, res) {
// Wait for 24s
setTimeout(function() {
// Pour Coffee!
con.exec('sys pour', function(error, res) {
con.end();
});
}, 24000);
});
});
});
con.connect({host: coffee_machine_ip});
}
});
// Not Callback endpoint
coffeeApp.get('/*', function (req, res) {
res.sendStatus(404);
});
var coffeeServer = coffeeApp.listen(PORT, CALLBACK_URL, function() {
console.log('Coffee Server listening at %s:%s',
CALLBACK_URL, PORT);
console.log('\nYo Callback URL: %s:%s/%s',
CALLBACK_URL, PORT, CALLBACK_ENDPOINT);
});
});

57
nodejs/hangover.js Executable file
View File

@ -0,0 +1,57 @@
#!/usr/bin/env node
/* Before running:
npm install twilio
*/
var exec = require('child_process').exec;
var me = 'my_username';
exec("who -q", function(error, stdout, stderr) {
// Exit if sessions with my username are found
if(stdout.indexOf(me) > -1)
process.exit(1);
var TWILIO_ACCOUNT_SID = process.env['TWILIO_ACCOUNT_SID'];
var TWILIO_AUTH_TOKEN = process.env['TWILIO_AUTH_TOKEN'];
// Phone numbers
var MY_NUMBER = '+xxx';
var BOSS_NUMBER = '+xxx';
// Excuses
var excuses = [
'Locked out',
'Pipes broke',
'Food poisoning',
'Not feeling well'
];
// Generate BS message
var excuse = excuses[Math.floor(Math.random() * excuses.length)];
var textMessage = 'Gonna work from home. ' + excuse;
var client = require('twilio')(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN);
// Shoot text
client.messages.create({
body: textMessage,
to: BOSS_NUMBER,
from: MY_NUMBER
}, function(error, message) {
if(error)
console.log('Failed to send SMS: ' + error.message);
else {
var currentdate = new Date();
console.log('Message sent at: '+ (currentdate.getMonth() + 1) + '/'
+ currentdate.getDate() + '/'
+ currentdate.getFullYear() + ' '
+ currentdate.getHours() + ':'
+ currentdate.getMinutes() + ':'
+ currentdate.getSeconds() + '| Excuse: ' + excuse);
}
});
});

113
nodejs/kumar_asshole.js Executable file
View File

@ -0,0 +1,113 @@
#!/usr/bin/env node
/* Before running:
npm install nodemailer
npm install imap
I realize this is long. IMAP can only fetch emails and nodemailer can only
send. Could try implementing with Gmail Node API later.
*/
var GMAIL_USERNAME = process.env['GMAIL_USERNAME'];
var GMAIL_PASSWORD = process.env['GMAIL_PASSWORD'];
var KUMAR_EMAIL = 'kumar.asshole@example.com';
var EMAIL = 'No worries mate, be careful next time';
// Scan for unread email from Kumar
var Imap = require('imap');
var imap = new Imap({
user: GMAIL_USERNAME,
password: GMAIL_PASSWORD,
host: 'imap.gmail.com',
port: 993,
tls: true,
tlsOptions: { rejectUnauthorized: false }
});
function openInbox(cb) {
imap.openBox('INBOX', false, cb);
}
imap.once('ready', function() {
openInbox(function(err, box) {
if (err)
process.exit(1);
imap.search(['UNSEEN', ['FROM', KUMAR_EMAIL]],
function(err, results) {
if (err)
process.exit(1);
// RegEx search for keywords; ignore case
var kumarPattern = new RegExp(/sorry|help|wrong/i);
// IMAP dumps all headers, so need to parse and get email body
var MailParser = require("mailparser").MailParser;
var f = imap.fetch(results, {bodies: ''});
f.on('message', function(msg, seqno) {
msg.on('body', function(stream, info) {
var kumarEmail = "";
stream.on('data', function(chunk) {
kumarEmail += chunk.toString('utf8');
});
stream.once('end', function() {
var mailparser = new MailParser();
mailparser.on("end", function(mail_object){
// If the RegEx matches
if(mail_object.text.match(kumarPattern)) {
// Shoot email to Kumar!
var nodemailer = require('nodemailer');
// create reusable transporter object using SMTP transport
var transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
user: GMAIL_USERNAME,
pass: GMAIL_PASSWORD
}
});
// setup e-mail data
var mailOptions = {
from: GMAIL_USERNAME,
to: KUMAR_EMAIL,
subject: 'Database Fixes',
text: EMAIL
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function(error, info) {
if(error)
process.exit(1)
});
}
});
mailparser.write(kumarEmail);
mailparser.end();
});
});
msg.once('end', function() {
// Fetched all unread from kumar
});
});
f.once('error', function(err) {
process.exit(1);
});
f.once('end', function() {
imap.end();
});
});
});
});
imap.connect();

56
nodejs/smack_my_bitch_up.js Executable file
View File

@ -0,0 +1,56 @@
#!/usr/bin/env node
/* Before running:
npm install twilio
*/
var exec = require('child_process').exec;
var me = 'my_username';
exec("who -q", function(error, stdout, stderr) {
// Exit if no sessions with my username are found
if(stdout.indexOf(me) == -1)
process.exit(1);
var TWILIO_ACCOUNT_SID = process.env['TWILIO_ACCOUNT_SID'];
var TWILIO_AUTH_TOKEN = process.env['TWILIO_AUTH_TOKEN'];
// Phone numbers
var MY_NUMBER = '+xxx';
var HER_NUMBER = '+xxx';
// Reasons
var reasons = [
'Working hard',
'Gotta ship this feature',
'Someone fucked the system again'
];
// Generate BS message
var reason = reasons[Math.floor(Math.random() * reasons.length)];
var textMessage = 'Late at work. ' + reason;
var client = require('twilio')(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN);
// Shoot text
client.messages.create({
body: textMessage,
to: HER_NUMBER,
from: MY_NUMBER
}, function(error, message) {
if(error)
console.log('Failed to send SMS: ' + error.message);
else {
var currentdate = new Date();
console.log('Message sent at: '+ (currentdate.getMonth() + 1) + '/'
+ currentdate.getDate() + '/'
+ currentdate.getFullYear() + ' '
+ currentdate.getHours() + ':'
+ currentdate.getMinutes() + ':'
+ currentdate.getSeconds() + '| Excuse: ' + reason);
}
});
});

View File

@ -10,7 +10,7 @@ use Mail::Webmail::Gmail;
# Config
my $conf = Load( <<'...' );
---
kumar_mail: kumar.a@examle.com
kumar_mail: kumar.a@example.com
database_regex: \S+_staging
keywords_regex: sorry|help|wrong
backup_path: /home/backups/databases/

View File

@ -1,264 +0,0 @@
<?php
namespace HackerScripts\Lib;
/**
* Telnet class
*
* Used to execute remote commands via telnet connection
* Usess sockets functions and fgetc() to process result
*
* All methods throw Exceptions on error
*
* Written by Dalibor Andzakovic <dali@swerve.co.nz>
* Based on the code originally written by Marc Ennaji and extended by
* Matthias Blaser <mb@adfinis.ch>
*
* Extended by Christian Hammers <chammers@netcologne.de>
* Modified by Frederik Sauer <fsa@dwarf.dk>
*
*/
class Telnet {
private $host;
private $port;
private $timeout;
private $stream_timeout_sec;
private $stream_timeout_usec;
private $socket = NULL;
private $buffer = NULL;
private $prompt;
private $errno;
private $errstr;
private $strip_prompt = TRUE;
private $NULL;
private $DC1;
private $WILL;
private $WONT;
private $DO;
private $DONT;
private $IAC;
private $global_buffer = '';
const TELNET_ERROR = FALSE;
const TELNET_OK = TRUE;
public function __construct($host = '127.0.0.1', $port = '23', $timeout = 10, $prompt = '$', $stream_timeout = 1) {
$this->host = $host;
$this->port = $port;
$this->timeout = $timeout;
$this->setPrompt($prompt);
$this->setStreamTimeout($stream_timeout);
// set some telnet special characters
$this->NULL = chr(0);
$this->DC1 = chr(17);
$this->WILL = chr(251);
$this->WONT = chr(252);
$this->DO = chr(253);
$this->DONT = chr(254);
$this->IAC = chr(255);
$this->connect();
}
public function __destruct() {
// clean up resources
$this->disconnect();
$this->buffer = NULL;
$this->global_buffer = NULL;
}
public function connect() {
// check if we need to convert host to IP
if (!preg_match('/([0-9]{1,3}\\.){3,3}[0-9]{1,3}/', $this->host)) {
$ip = gethostbyname($this->host);
if ($this->host == $ip) {
throw new Exception("Cannot resolve $this->host");
} else {
$this->host = $ip;
}
}
// attempt connection - suppress warnings
$this->socket = @fsockopen($this->host, $this->port, $this->errno, $this->errstr, $this->timeout);
if (!$this->socket) {
throw new Exception("Cannot connect to $this->host on port $this->port");
}
if (!empty($this->prompt)) {
$this->waitPrompt();
}
return self::TELNET_OK;
}
public function disconnect() {
if ($this->socket) {
if (! fclose($this->socket)) {
throw new Exception("Error while closing telnet socket");
}
$this->socket = NULL;
}
return self::TELNET_OK;
}
public function exec($command, $add_newline = TRUE) {
$this->write($command, $add_newline);
$this->waitPrompt();
return $this->getBuffer();
}
public function login($username, $password) {
try {
$this->setPrompt('login:');
$this->waitPrompt();
$this->write($username);
$this->setPrompt('Password:');
$this->waitPrompt();
$this->write($password);
$this->setPrompt();
$this->waitPrompt();
} catch (Exception $e) {
throw new Exception("Login failed.");
}
return self::TELNET_OK;
}
public function setPrompt($str = '$') {
return $this->setRegexPrompt(preg_quote($str, '/'));
}
public function setRegexPrompt($str = '\$') {
$this->prompt = $str;
return self::TELNET_OK;
}
public function setStreamTimeout($timeout) {
$this->stream_timeout_usec = (int)(fmod($timeout, 1) * 1000000);
$this->stream_timeout_sec = (int)$timeout;
}
public function stripPromptFromBuffer($strip) {
$this->strip_prompt = $strip;
} // function stripPromptFromBuffer
protected function getc() {
stream_set_timeout($this->socket, $this->stream_timeout_sec, $this->stream_timeout_usec);
$c = fgetc($this->socket);
$this->global_buffer .= $c;
return $c;
}
public function clearBuffer() {
$this->buffer = '';
}
public function readTo($prompt) {
if (!$this->socket) {
throw new Exception("Telnet connection closed");
}
// clear the buffer
$this->clearBuffer();
$until_t = time() + $this->timeout;
do {
// time's up (loop can be exited at end or through continue!)
if (time() > $until_t) {
throw new Exception("Couldn't find the requested : '$prompt' within {$this->timeout} seconds");
}
$c = $this->getc();
if ($c === FALSE) {
if (empty($prompt)) {
return self::TELNET_OK;
}
throw new Exception("Couldn't find the requested : '" . $prompt . "', it was not in the data returned from server: " . $this->buffer);
}
// Interpreted As Command
if ($c == $this->IAC) {
if ($this->negotiateTelnetOptions()) {
continue;
}
}
// append current char to global buffer
$this->buffer .= $c;
// we've encountered the prompt. Break out of the loop
if (!empty($prompt) && preg_match("/{$prompt}$/", $this->buffer)) {
return self::TELNET_OK;
}
} while ($c != $this->NULL || $c != $this->DC1);
}
public function write($buffer, $add_newline = TRUE) {
if (!$this->socket) {
throw new Exception("Telnet connection closed");
}
// clear buffer from last command
$this->clearBuffer();
if ($add_newline == TRUE) {
$buffer .= "\n";
}
$this->global_buffer .= $buffer;
if (!fwrite($this->socket, $buffer) < 0) {
throw new Exception("Error writing to socket");
}
return self::TELNET_OK;
}
protected function getBuffer() {
// Remove all carriage returns from line breaks
$buf = preg_replace('/\r\n|\r/', "\n", $this->buffer);
// Cut last line from buffer (almost always prompt)
if ($this->strip_prompt) {
$buf = explode("\n", $buf);
unset($buf[count($buf) - 1]);
$buf = implode("\n", $buf);
}
return trim($buf);
}
public function getGlobalBuffer() {
return $this->global_buffer;
}
protected function negotiateTelnetOptions() {
$c = $this->getc();
if ($c != $this->IAC) {
if (($c == $this->DO) || ($c == $this->DONT)) {
$opt = $this->getc();
fwrite($this->socket, $this->IAC . $this->WONT . $opt);
} else if (($c == $this->WILL) || ($c == $this->WONT)) {
$opt = $this->getc();
fwrite($this->socket, $this->IAC . $this->DONT . $opt);
} else {
throw new Exception('Error: unknown control character ' . ord($c));
}
} else {
throw new Exception('Error: Something Wicked Happened');
}
return self::TELNET_OK;
}
protected function waitPrompt() {
return $this->readTo($this->prompt);
}
}

View File

@ -1,5 +1,10 @@
{
"require": {
<<<<<<< HEAD
=======
"bestnetwork/telnet": "^1.0",
"vlucas/phpdotenv": "^2.0",
>>>>>>> NARKOZ/master
"twilio/sdk": "^4.6"
}
}

69
php/composer.lock generated Normal file
View File

@ -0,0 +1,69 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "ba2345d9958ec92d274d423597284494",
"content-hash": "448be28be374d66028c6713b61c15543",
"packages": [
{
"name": "twilio/sdk",
"version": "4.6.1",
"source": {
"type": "git",
"url": "https://github.com/twilio/twilio-php.git",
"reference": "f83a9f8db1cc29f42edb77c7c77382bf9769953a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twilio/twilio-php/zipball/f83a9f8db1cc29f42edb77c7c77382bf9769953a",
"reference": "f83a9f8db1cc29f42edb77c7c77382bf9769953a",
"shasum": ""
},
"require": {
"php": ">=5.2.1"
},
"require-dev": {
"mockery/mockery": ">=0.7.2",
"phpunit/phpunit": "4.5.*"
},
"type": "library",
"autoload": {
"files": [
"Services/Twilio.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kevin Burke",
"email": "kevin@twilio.com"
},
{
"name": "Kyle Conroy",
"email": "kyle+pear@twilio.com"
}
],
"description": "A PHP wrapper for Twilio's API",
"homepage": "http://github.com/twilio/twilio-php",
"keywords": [
"api",
"sms",
"twilio"
],
"time": "2015-11-10 00:40:41"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": []
}

View File

@ -1,170 +1,14 @@
#!/usr/bin/env php
<?php
namespace HackerScripts;
/**
* Class fucking_coffee
*
* @package HackerSripts
*
* Lewis Lancaster 2015
*/
require 'vendor/autoload.php';
use HackerScripts\Lib\Telnet;
use Bestnetwork\Telnet\TelnetClient;
class fucking_coffee
{
/**
* The telnet class
*
* @var HackerScripts\Lib\Telnet
*/
protected $telnet;
/**
* The password for this coffee machine
*
* @var string
*/
protected $password = "";
/**
* The host of this coffee machine
*
* @var string
*/
protected $host = "";
/**
* The port of this coffee machine
*
* @var string
*/
protected $port = "";
/**
* Delay for 24 seconds.
*
* @var int
*/
protected $delay = 24;
/**
* What we do when we construct this class
*/
public function __construct()
{
/**
* Lets not run this on the weekends
*/
if( $this->IsWeekend( date('m.d.y') ) == false )
{
return false;
}
/**
* Create a new telnet class
*/
$this->telnet = new Telnet( $this->host, $this->port );
/**
* Once we have completed this, we can brew our coffee!
*/
$this->BrewCoffee( function(){
/**
* Echo out a message
*/
echo "coffee has been poured";
/**
* Unset
*/
unset( $this->telnet );
});
/**
* Return tue
*/
return true;
}
/**
* Brews our coffee
*
* @param $callback
*/
public function BrewCoffee( $callback )
{
if( $this->telnet != null )
{
/**
* Execute and enter the password
*/
$this->telnet->exec('Password: ' . $this->password);
/**
* Brew the coffee
*/
$this->telnet->exec('sys brew');
/**
* Wait
*/
sleep( $this->delay );
/**
* Pour the coffee
*/
$this->telnet->exec('sys pour');
/**
* Execute our callback
*/
call_user_func( $callback );
}
}
/**
* Is this currently the weekend?
*
* @param $date
*
* @return bool
*/
public function IsWeekend( $date )
{
if( date('N', strtotime( $date ) ) >= 6 )
{
return true;
}
return false;
}
}
(strpos(exec('who'), getenv('USER')) !== false) or exit('no session');
sleep(17);
$con = new TelnetClient('10.10.42.42');
$con->execute('1234', 'Password: ');
$con->execute('sys brew');
sleep(24);
$con->execute('sys pour');

View File

@ -1,3 +1,4 @@
<<<<<<< HEAD
<?php
/**
@ -134,4 +135,27 @@ class hangover
call_user_func( $callback );
}
}
}
}
=======
#!/usr/bin/env php
<?php
require 'vendor/autoload.php';
(new Dotenv\Dotenv(__DIR__))->load();
(strpos(exec('who'), getenv('USER')) === false) or exit('session found');
$my_number = '+xxx';
$number_of_boss = '+xxx';
$excuse = ['Locked out', 'Pipes broke', 'Food poisoning', 'Not feeling well'];
$excuse = $excuse[array_rand($excuse)];
$twilio = new Services_Twilio(getenv('TWILIO_ACCOUNT_SID'), getenv('TWILIO_AUTH_TOKEN'));
$twilio->account->messages->sendMessage(
$my_number,
$number_of_boss,
"Gonna work from home. {$excuse}"
);
echo "Message sent at: #".date('Y-m-d')." | Excuse: {$excuse}";
>>>>>>> NARKOZ/master

6
php/test.php Normal file
View File

@ -0,0 +1,6 @@
<?php
require 'vendor/autoload.php';
require 'smack_my_bitch_up.php';
new smack_my_bitch_up();
?>

View File

@ -0,0 +1,62 @@
<#
.SYNOPSIS
Simple script to connect to a coffee part using TelNet then issue specific commands that
brew and pourt a cup of coffee for the user.
.DESCRIPTION
This script was converted using the ruby version of the fucking_coffee script. In this script,
I left the use of environment variables since its only use was to determine if the user was
still logged in to the system. Per issue #42 (https://github.com/NARKOZ/hacker-scripts/issues/42)
I left the password string hard coded until a decision is made by NARKOZ, the project owner, as
to how the information should be stored.
.OUTPUT
None
.NOTES
Author: Tyler Hughes
Twitter: @thughesIT
Blog: http://tylerhughes.info/
Changelog:
1.0 Initial Release
#>
Function Fucking-Coffee
{
# Exit early if no sessions with my username are found
if ($env:Username.Count > 0) {
return
}
$coffee_machine_ip = '10.10.42.42'
$password = '1234'
Start-Sleep -s 17
$socket = New-Object System.Net.Sockets.TcpClient($coffee_machine_ip)
if ($socket) {
$stream = $connection.GetStream()
$Writer = New-Object System.IO.StreamWriter($Stream)
$Buffer = New-Object System.Byte[] 1024
$Encoding = New-Object System.Text.AsciiEncoding
# Start issuing the commands
Send-TelNetCommands($Writer, $password, 1)
Send-TelNetCommands($Writer, "sys brew", 24)
Send-TelNetCommands($Writer, "sys pour", 4)
$socket.Close()
}
}
Function Send-TelNetCommands
{
Param (
[Parameter(ValueFromPipeline=$false)]
[System.IO.StreamWriter]$writer,
[String]$command,
[int]$WaitTime
)
$writer.WriteLine($command)
$writer.Flush()
Start-Sleep -Milliseconds $WaitTime
}

64
powershell/hangover.psm1 Normal file
View File

@ -0,0 +1,64 @@
<#
.SYNOPSIS
Simple script to SMS a supervisor informing them you will be working from home
on the day this script is used.
.DESCRIPTION
This script was converted using the ruby version of the hangover script. However, the ruby
version used environment variables to hold the user's account information. Due to issue #42
(https://github.com/NARKOZ/hacker-scripts/issues/42) I opted to hard code the strings at
this time until a decision is made by NARKOZ, the project owner, as the how the information
should be stored.
This script also uses Twilio to send the SMS messages. The from number MUST be a valid Twilio
phone number. The to number can be any outgoing number.
.OUTPUT
This script will output an error message to the PowerShell window if it fails
to send the message.
.NOTES
Author: Tyler Hughes
Twitter: @thughesIT
Blog: http://tylerhughes.info/
Changelog:
1.0 Initial Release
#>
Function Hangover
{
# Phone numbers (Must include country code and area code)
$from = '+XXXXXXXXXXX'
$to = '+XXXXXXXXXXX'
# Twilio API Information
$twilio_base_url = 'https://api.twilio.com/2010-04-01'
$twilio_account_sid = 'XXXXXXXXXXXXXXXXXXX'
$twilio_auth_token = 'XXXXXXXXXXXXXXXXXX'
$password = ConvertTo-SecureString -AsPlainText $twilio_auth_token -Force
$credentials = New-Object System.Management.Automation.PSCredential($twilio_account_sid, $password)
# Get the message to send
$excuses =
'Locked out',
'Pipes broke',
'Food poisoning',
'Not feeling well'
$excuse = $excuses | Get-Random
$message = "$excuse. Going to work from home today."
$body = @{
From = $from;
To = $to;
Body = $message;
}
# Send the message and log any errors
$uri = "$twilio_base_url/Accounts/" + $credentials.UserName + "/SMS/Messages"
try {
$response = Invoke-RestMethod -Method Post -Uri $uri -Body $body -Credential $credentials
}
catch {
$time = Get-Date -format u
Write-Host $time " - Failed to send message: " $message
}
}

View File

@ -6,7 +6,7 @@ if ($DAYOFWEEK -eq 6 -or $DAYOFWEEK -eq 7) {
}
# Exit early if no sessions with my username are found
if ((QWINSTA $env:USERNAME | measure).Count -gt 0){
if (-not (QWINSTA | FINDSTR $env:USERNAME)) {
return
}
@ -14,26 +14,25 @@ if ((QWINSTA $env:USERNAME | measure).Count -gt 0){
$MY_NUMBER='+xxx'
$HER_NUMBER='+xxx'
$TWILIO_ACCOUNT_SID = 'xxx'
$TWILIO_AUTH_TOKEN = 'xxx'
$REASONS=
$REASONS =
'Working hard',
'Gotta ship this feature',
'Someone fucked the system again'
$reason = $REASONS | Get-Random
$message = "Late at work. $reason."
$RAND = Get-Random -Maximum $REASONS.Count
$API_URL = "https://api.twilio.com/2010-04-01/Accounts/$env:TWILIO_ACCOUNT_SID/Messages"
$BASE64AUTHINFO = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $env:TWILIO_ACCOUNT_SID,$env:TWILIO_AUTH_TOKEN)))
$body = @{
From = $MY_NUMBER;
To = $HER_NUMBER;
Body = $message;
}
$MSG="Late at work. $REASONS[$RAND]"
$BASE64AUTHINFO = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $TWILIO_ACCOUNT_SID,$TWILIO_AUTH_TOKEN)))
#Send a text messag and Log errors
#Send a text message and Log errors
try{
Invoke-RestMethod -Method Post -Headers @{Authorization=("Basic {0}" -f $BASE64AUTHINFO)} "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Messages" -Body "From=$MY_NUMBER&To=$HER_NUMBER&Body=$MSG" > $null
Invoke-RestMethod -Method Post -Headers @{Authorization=("Basic {0}" -f $BASE64AUTHINFO)} $API_URL -Body $body > $null
}
catch{
Write-Host "Failed to send SMS: $_"
}

View File

@ -17,7 +17,7 @@ TWILIO_ACCOUNT_SID = os.environ.get('TWILIO_ACCOUNT_SID')
TWILIO_AUTH_TOKEN = os.environ.get('TWILIO_AUTH_TOKEN')
# Phone numbers
my_number = '+xxx'
my_number = '+xxx'
her_number = '+xxx'
reasons = [
@ -30,7 +30,7 @@ client = TwilioRestClient(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
client.messages.create(
to=her_number,
from=my_number,
from_=my_number,
body="Late at work. " + random.choice(reasons)
)