Basic Authentication logout Issues

A quite interesting bit of work I am doing at the moment is building an AngularJS app running on an IBM ISeries, this has presented a whole series of odd little challenges but the one that bit us hard by corporate standards was logout and session expiring, The system and its sessions are on an Apache box sitting on an ISeries, it has turned out that not only was the Apache logout URL not present but that the Apache session expiry did not take effect{{ but even if it had, it would have screwed up the Internal application that most people use to have an Iseries Session via a browser.}}.

So what to do….

I have done a nasty little JavaScript solution but one I think fits the circumstances.

  1. As this is for an AngularJs app, no jquery or such
  2. I did not want this solution to actually be built into the angularjs app, as in a perfect world the underling issues will be fixed and I want it easily ripped out, also I don’t want the code mentioned in each controller etc etc.
  3. The server that the app is running on has no facility to handle log off and does not have session based authentication (or even a login page)

Basic authentication does not really handle log off very well. For everything but Internet explorer you basically have to perform a fake login.

function detectIE() {
    var ua = window.navigator.userAgent;
    console.log('In detectIE');
    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {
        console.log('IE 10 or older');
        // IE 10 or older => return version number, but I just want true
        //return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
        return true;
    }
    var trident = ua.indexOf('Trident/');
    if (trident > 0) {
        console.log('IE 11');
        // IE 11 => return version number, but I just want true
        var rv = ua.indexOf('rv:');
        //return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
        return true;
    }
    var edge = ua.indexOf('Edge/');
    if (edge > 0) {
        console.log('Edge (IE 12+)');
        // Edge (IE 12+) => return version number, but I just want true
        //return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
        return true;
    }
    // other browser
    return false;
}
function ClearAuthentication(LogOffPage)
{
    if (!LogOffPage) {
        LogOffPage = location.pathname;
    }
    if (detectIE() == true)
    {
        console.log('In IE');
        // Logoff Internet Explorer
        document.execCommand("ClearAuthenticationCache");
        window.location = LogOffPage;
    }
    else
    {
        console.log('Not IE');
        var xhr = new XMLHttpRequest();
        xhr.open('GET', location.pathname);
        xhr.setRequestHeader('Authorization','Basic XXXXXXXXXXXXXXXX');
        xhr.onload = function() {
            if (xhr.status === 200) {
                console.log('did not log you off');
            }
            else {
                console.log('should be logged out')
                window.location = LogOffPage;
            }
        };
        xhr.send();
    }
}

Followed by a very iffy 30 min log off timer, that surprising works rather well

var inactivityTime = function () {
    var t;
    window.onload = resetTimer;
    // DOM Events
    document.onmousemove = resetTimer;
    document.onkeypress = resetTimer;
    function logout() {
        ClearAuthentication();
    }
    function resetTimer() {
        clearTimeout(t);
        t = setTimeout(logout, 1800000)
        // 30 min till logout
    }
};
(function() {
    inactivityTime();
})();

 

New Laptop 2017

So it was time to get a new laptop…

My current one had given sterling service for the last two and a bit years, but there are a couple of broken bits on it, it was starting to make distressing overheating beeping noises and hard drives would often cut out, meaning I had to get a replacement before it gave out completely (and also before its warranty expired as I want it fixed to be my backup machine)

Time to start the hunt, but what are my requirements:

  • At Least 3 storage bay slots: I don’t need optical, but I do need:
    • An OS and home drive.
    • Dedicated drive for client VM’s.
    • Slow big drive for downloads and general none secure storage.
  • Loads of RAM, in this case looking at 64Gig for running multiple VM’s at the same time.
  • 15-inch screen (just the size I am used it)
  • A none cra**y power supply connector{{This was the main reason that I did not get another laptop from https://www.pcspecialist.co.uk/ all their new laptops have these rubbish 4 pin power connectors which I have had problems with in the past, I phoned up and asked but the guy said that they were stuck with them for the next round of laptops.}}: it needs to be simple and hardy (like a standard barrel plug) or able to cope with being yanked out (like an apple plug)
  • As plain as possible: I think that all electronics should be a plain matte black but I am aware that I’m in the minority in this

So basically a portable server, I have a separate VM for every client I work with (that includes clients of clients when I am subcontracting), I find that it just makes things cleaner, not only does it mean I can adhere to the desktop standards of each client but there is zero chance of leakage of any client details to another client and lastly, sometimes there is a long period between work for a given client and this way I can just archive a VM till its needed again.

Contenders were:

  • One of the high-end machines from https://www.pcspecialist.co.uk/ they are cheap for their specs and I have had their machines twice before, but I don’t like any of the new models and when the current one had an issue they were very unresponsive when it came to getting it fixed under warranty.
  • The latest high-end Lenovo workstation, 2 laptops ago I got a W510 and the darn thing is still going strong, sometimes I don’t get them if their current spec is not very up to date.
  • Apple Macbook there is no denying the quality of these, and they are used by people whose opinions I put a lot of faith in, but but I just can’t, they don’t run Linux very well, they are very much “we do things awesomely so you must do as we want” and they fecking solder their HDD’s in for goodness sake.
  • Razer Blade Pro a newcomer and the nicest looking machine I think I have ever seen, but just too much money for something that I won’t be using for gaming.

After asking around, the decision was obvious, the P50 series from Lenovo was the only one that matched all the requirements this time round.

I ordered the machine plus various components for it and all had arrived in roughly a week, this time I had splashed out on a docking station as I always buy 2 power supplies anyway and I had drooled over them for years.

Up and Going

I still use Mint Linux (currently version 18.1) as my host OS, and it installed straight away, all standard hardware was detected and function keys worked so that was a nice none event, boot time was 6 seconds cold to login which was a bit jaw-dropping, the docking station worked perfectly with Linux, in fact, nothing went wrong and it was all in all a 10-20 min job, a quick copy over of my existing data and I was done.

Even though the keyboard was one of the new island types, the spacing is the same as the old Thinkpads, so my fingers settled in nicely, an added benefit that I was not expecting is the size and weight reduction, the laptop its self is both lighter and smaller than my current one as is the power brick, nice!

Two changes I did have to make were in the BIOS, Vmware had a little grumble at my 64bit VMs meaning that I had to go into the BIOS and enable “Intel VT-x” as show below


Also when when I was testing using multiple monitors I got a load of terrible screen tearing, even after installing the Nvidia drivers, Linux is know for being a bit poop when it comes to video drivers but in the end it turned out to be the integrated Intel Video, as the dedicated video card is only a 4Gig one, I just turned it on in the BIOS and will live the with slight battery hit (however the quality is so much better that I don’t think I would go back to the Intel one anyway)

Storage

Storage seems to be the issue I always have to do the most faffing around with as no laptop producer seems to have the options I want in their customization

In this case my budget would strech to 2 x 1TB M.2. SSD and 1 x 2TB Sata Spindle Drive (basically M.2. replaces mSATA which replaced the old IDE connectors)

Now I did not know that M.2. is just a name for a socket, its not actually a name for the new transport mechanism, it can support mSATA and NVMe, OK, what is the difference, turns out a huge amount, there are hundred of articles and videos on the difference but basically mSATA (the mobile form of SATA) was designed for spindle disks and so is designed around their speed limitation whereas NVMe behaves far more like RAM and so can access SSD’s very very fast

How the feck is this a TB Drive!!!!

fully populated and running like a dream. 🙂

Niggles

Nothing is perfect, but in this case, I am happy to report that the minor faults I have found are nothing to do with the engineering of the Laptop and everything to do with me being a minor idiot and a little bit of disconnect on Lenovo’s side.

  • Backlit keyboard: Early morning I sit down at the laptop and squint at the keyboard, why is the keyboard not backlit?, <tut>, I have just not turned it on, <moment of squinting at the keyboard> where the feck is the backlight?, quick visit to google, then a shamed visit to the Lenovo order page, a backlit keyboard is an OPTIONAL EXTRA, and like a numpty I had only glanced at the keyboard option to make sure that it was set to the UK, I did not notice that there was a none backlight option, it can be fixed by buying a a replacement keyboard, but seems odd to have an £20 option that has been standard on high end laptops for years set to off.. oh well RTFS
  • Installing SSd’s: as mentioned above I installed my own SSD, but you can’t just install the M.2. stick of gum, you need a plastic adaptor which is not supplied either with the laptop or with the SSD, these are not hard to find and the ones for the P50 look like this

  • Well that is NEARLY true, the adaptor above LOOKS like it is for all SSD (it even has the icons for both types) but if you are installing an NVMe, then you need one with the insulation pad at the back (see below), yes this info is in the detailed technical manual but part sellers do not make it obvious.

Conclusion

Very very happy, I feel I have picked the right laptop for the next couple of years, it has the same tank like build that is the hallmark of Thinkpads, and with features like USB-C and NVMe I don’t think I will find it wanting during its life span, it is also claimed that it has a full day battery which is something I have not had in a laptop EVER but anything more than a couple hours will really make my year.

Now if I can just stop it getting greasy and dirty, and get some good stickers for the lid.

Fitness the long road back Week 1

Got to get fit , GOT TO GET FIT, want to go back to fencing but I would be an embarrassment at the moment, so I have set my self a baseline first

23/04/2017

Run 2.4 Miles (3.9 KM) to the Park and back {{So the passing score for the Army 2 miles run (I have no idea which Army the US one I expect is 19:30 for an old fart like me I have no idea if that is carrying pack or what but its a good start, the park I will be using for fitness is 1.2 miles away, Sooooo 19.30 which equals 1170 Seconds, Pro-rata that: ( 1170 Seconds / 2 ) * 2.4 = 1404 seconds = 23.24, that will be my baseline the end goal will be the top mark in the old fart chart of 13:36 which Pro-ratas to 16.20 (hahahahahaha)}} : 33:45 Fail

1 x Complete 7 Min Workout : 4 out of 12 Fail

25/04/2017

1 x Run 2.4 Miles (3.9 KM) to the Park and back : 31:22 Fail

Complete 7 Min Workout : 5 out of 12 Fail

27/04/2017

1 x Run 2.4 Miles (3.9 KM) to the Park and back : FAIL WORKING LATE

Complete 7 Min Workout : FAIL WORKING LATE

Modern Web Dev on Iseries

I have recently been merging very old tech (RPG on ISeries) with modern tech (angulaJS 1.6) and it has brought a whole bundle of fun little issues on the ISeries side that I thought I would just note down.

I am NOT an RPG programmer (and never will be), but if you are ever having to deal with REST services (or Web Services) being hand cranked{{Yes hand cranked, The ISeries is very good at dealing with text formats and handles REST/MarkDown and its developers have had lots of practice at coding to such, this combined with the extreme pricing of bolt on features <cough> gouging </cough> mean that its most likely your client will drop the bundle of fun on a developer.}} for you by a Iseries Dev, there are some of the issues that you may hit

  • Truncation: JSON data can quite easily pop the string limit on ISeries, so your Iseries Dev will have to do this “write to file” thing to get round it, if your JSON is over about the 6Meg limit then you are really going to cause some speed issues.
  • Inconsistent data types: Given that the PUT/GET/POST services are all coded separately, you will get field formatting issues especially if changes are made retrospectively, a Field that is a string in the GET may be a numeric on the PUT, you just have to keep a grip on it and try not to go for the easy option of “we will get it working then come back and fix it later”
  • Leading zeros on numerics: If you are passing decimals less that 1 then the Iseries is going to want to send them as “.000” rather than “0.000” thus invalidating the JSON, don’t be tempted to turn these numbers into strings, they CAN be formatted correctly.
  • Character sets: A lot of the activity seems to be UTF-8, and you may get a fair amount of issues revolving extended character sets, if you are getting errors that are simply baffling when you send stuff to the ISeries, check the formatting of the characters that you are sending.
  • Alternating Parameters: You may be used to REST services in the format “NameParmeterName2Parmeter2” well this causes problems apparently, so you have to deal with them in the format “NameName2ParmeterParmeter2”

A lot of RPG Programmers will not have done this kind of programming before, so testing the results will be a pain to them, may I suggest that you get chrome and https://client.restlet.com/ installed on their machine so they can test and https://jsonformatter.curiousconcept.com/ so they can test the results they are getting.

Coming Up For Air

Well that was a hell of a first quarter, a crazy mix of stuff that all HAD to be done, just surfacing on the Easter weekend

so what did I miss:

Connect 2017

First year in what seems forever that I was not pounding off to the US in Jan for the yearly pep conference on all that is IBM, alas a thousand things conspired to stop me this year but mainly just too many client deliverables to take the time off, though it seemed I got on the big screen.




From what I could see from other peoples blogs the conference was a good one, and that we are finally shaking off the older stale parts of what we do and getting on with the new stuff.

what with UKLug/ICON not being on this year looks like my only conference will be Engage, where I will be speaking, this years dodgy session is: “Choose your own adventure: Update/Convert/Replace” at 13:30 on Tuesday in Room C (Gorilla 3).

IBM Champion stuff

Not spent any time in the chat and even missed the yearly swag frenzy (but thanks to Amanda she is going to bring me some stuff over), but I have been doing lots of IBM champion things in that I have been upgrading a variety of IBM tech as well as integrating it with other modern stuff, just not been very visible.

Qualifications

Hmmm I was supposed have got a s**t load of Salesforce qualifications by now, I have had opportunity enough, free training (thanks to bluewave) and what not, but still spend all my time DOING stuff rather than learning stuff, must MUST get a grip on that. also on the radar is docker and the other platform support bits we are looking at for LDC Via

 

On the plus side I have solved a huge number of client crises in these last few months and made a number of clients very happy, so that is a excellent thing 🙂

Onwards!