Thursday, December 22, 2016

`help_crack.py` Debian init script

Startup init script for the Distributed WPA PSK strength auditor python script

Turning the `help_crack.py` utility into a system daemon can be achieved by utilizing the `screen` utility, below is my first attempt at it - feel free to comment with improvements or questions.

#!/bin/sh
### BEGIN INIT INFO
# Provides:
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

# Symbolic link this file into your `/etc/init.d`, then run `rcconf` and select the script to start, note the file name must be alphanumeric only
# example: `root@sh1:/etc/init.d# ln -s /usr/local/wpa-sec.stanev.org-help_crack.py/help_crack.py.init.sh help_crack`


dir="/usr/local/wpa-sec.stanev.org-help_crack.py"
cmd="screen -d -m -S help_crack.py ./help_crack.py"
user=""
#!/bin/sh
### BEGIN INIT INFO
# Provides:
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

# Symbolic link this file into your `/etc/init.d`, then run `rcconf` and select the script to start, note the file name must be alphanumeric only
# example: `root@sh1:/etc/init.d# ln -s /usr/local/wpa-sec.stanev.org-help_crack.py/help_crack.py.init.sh help_crack`


dir="/usr/local/wpa-sec.stanev.org-help_crack.py"
cmd="screen -d -m -S help_crack.py ./help_crack.py"
user=""

name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"

get_pid() {
        cat "$pid_file"
}

is_running() {
    [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}

case "$1" in
    start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        cd "$dir"
        if [ -z "$user" ]; then
            #sudo $cmd >> "$stdout_log" 2>> "$stderr_log" & # start it in the background which we don't want so that we can get the right PID
            sudo $cmd >> "$stdout_log" 2>> "$stderr_log"
        else
            # sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" & # start it in the background which we don't want so that we can get the right PID
            sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log"
        fi
        #echo $! > "$pid_file"
        # IMPRV: make the session name a variable or extract it from the `cmd`
        screen -ls | grep -Po '(?<=\t)(\d+)(?=.help_crack.py)' > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see $stdout_log and $stderr_log"
            exit 1
        fi

        echo "Started, you can reconnect by typing \`screen -r `get_pid`\`"

    fi
    ;;
    stop)
    if is_running; then
        echo -n "Stopping $name.."
        # killin Screen PID is not enough, so we gather all children and kill them too
        pids_to_kill=""
        current_pid=`get_pid`
        #echo "current_pid=$current_pid"
        while [ -n "$current_pid" ] # if not empty execute loop
        do
          pids_to_kill="$current_pid $pids_to_kill"
          current_pid=`pgrep -P $current_pid`
        done
        #echo $pids_to_kill
        kill $pids_to_kill
        for i in {1..10}
        do
            if ! is_running; then
                break
            fi

            echo -n "."
            sleep 1
        done
        echo

        if is_running; then
            echo "Not stopped; may still be shutting down or shutdown may have failed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file" ]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
    ;;
    restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will not attempt to start"
        exit 1
    fi
    $0 start
    ;;
    status)
    if is_running; then
        echo "Running, you can reconnect by typing \`screen -r `get_pid`\`"
    else
        echo "Stopped"
        exit 1
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0

Thursday, December 8, 2016

Lightning Out off Platform Example

Due to the limited documentation out there for the BETA Lightning Out functionality I am posting my code for others to benefit.

Please note that after extensive research I have come to the conclusion that off platform functionality is broken, but executing the code from within a naked VF page should work. The issue is that the bootstrapping process does not adjust the URLs for the dynamically loaded scripts and styles sheets - the JS assumes it is still run from within a SF org domain. A case with SF has been filled but if I am incorrect on my conclusion please comment.

Even if one patches the script/style URLs loading at runtime further errors manifest from withing aura_prod.js

Salesforce's 'Lighting Out' Example

Prior to using the below code ensure you have wrapped your lighting component into an App, setup a connected App, and CORS whitelisted your domain - afterwards copy and paste the below into your HTML file to be served from a server.

...
<div id='lightning'></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://<REMOVED>.lightning.force.com/lightning/lightning.out.js"></script>
<script>
sAccessToken = location.hash.match(/access_token=([^&]*)/) ? location.hash.match(/access_token=([^d]*)/)[1] : null;
sInstanceURL = location.hash.match(/instance_url=([^&]*)/) ? decodeURIComponent(location.hash.match(/instance_url=([^&]*)/)[1]) : null;
if (sAccessToken ==  null) {
  window.location.href = 'https://login.salesforce.com/services/oauth2/authorize?display=popup&response_type=token&client_id=<YOUR CONNECTED APP'S SECRET KEY>&redirect_uri=https://localhost'
}
//debugger;
$Lightning.use(
  "c:LightningOutTaxonomyLoader"
  ,function() {
    $Lightning.createComponent(
      "c:OrchestraCMS_Sample_Multi_Content_By_Taxonomy_Loader"
      ,{
        ComponentHeading: 'Header',
        <MORE ATTRIBUTES HERE>
      }
      ,"lightning"
      ,function(cmp) {
        //do some stuff
        debugger
      }
    );
  }
  ,sInstanceURL
  ,sAccessToken
);
</script>
......

Thursday, December 1, 2016

Windows Error: "Source Path Too Long"

Unable to delete folder due to 'path too long' error

Windows dinosaur 256(?) path limitation weirdness prevented me from deleting a backup recovery folder, the solution to that is to use a utility called Unlocker - it also allows deletion/moving of locked files. If you found this useful feel free to follow me on twitter @danielsokolows or comment, also do donate the author of the program.