rovided by the application to uniquely identify it. * @type string $name The name of the application password. * @type string $password A one-way hash of the password. * @type int $created Unix timestamp of when the password was created. * @type null $last_used Null. * @type null $last_ip Null. * } * @param string $new_password The generated application password in plain text. * @param array $args { * Arguments used to create the application password. * * @type string $name The name of the application password. * @type string $app_id A UUID provided by the application to uniquely identify it. * } */ do_action( 'wp_create_application_password', $user_id, $new_item, $new_password, $args ); return array( $new_password, $new_item ); } /** * Gets a user's application passwords. * * @since 5.6.0 * * @param int $user_id User ID. * @return array { * The list of application passwords. * * @type array ...$0 { * @type string $uuid The unique identifier for the application password. * @type string $app_id A UUID provided by the application to uniquely identify it. * @type string $name The name of the application password. * @type string $password A one-way hash of the password. * @type int $created Unix timestamp of when the password was created. * @type int|null $last_used The Unix timestamp of the GMT date the application password was last used. * @type string|null $last_ip The IP address the application password was last used by. * } * } */ public static function get_user_application_passwords( $user_id ) { $passwords = get_user_meta( $user_id, static::USERMETA_KEY_APPLICATION_PASSWORDS, true ); if ( ! is_array( $passwords ) ) { return array(); } $save = false; foreach ( $passwords as $i => $password ) { if ( ! isset( $password['uuid'] ) ) { $passwords[ $i ]['uuid'] = wp_generate_uuid4(); $save = true; } } if ( $save ) { static::set_user_application_passwords( $user_id, $passwords ); } return $passwords; } /** * Gets a user's application password with the given UUID. * * @since 5.6.0 * * @param int $user_id User ID. * @param string $uuid The password's UUID. * @return array|null { * The application password if found, null otherwise. * * @type string $uuid The unique identifier for the application password. * @type string $app_id A UUID provided by the application to uniquely identify it. * @type string $name The name of the application password. * @type string $password A one-way hash of the password. * @type int $created Unix timestamp of when the password was created. * @type int|null $last_used The Unix timestamp of the GMT date the application password was last used. * @type string|null $last_ip The IP address the application password was last used by. * } */ public static function get_user_application_password( $user_id, $uuid ) { $passwords = static::get_user_application_passwords( $user_id ); foreach ( $passwords as $password ) { if ( $password['uuid'] === $uuid ) { return $password; } } return null; } /** * Checks if an application password with the given name exists for this user. * * @since 5.7.0 * * @param int $user_id User ID. * @param string $name Application name. * @return bool Whether the provided application name exists. */ public static function application_name_exists_for_user( $user_id, $name ) { $passwords = static::get_user_application_passwords( $user_id ); foreach ( $passwords as $password ) { if ( strtolower( $password['name'] ) === strtolower( $name ) ) { return true; } } return false; } /** * Updates an application password. * * @since 5.6.0 * @since 6.8.0 The actual password should now be hashed using wp_fast_hash(). * * @param int $user_id User ID. * @param string $uuid The password's UUID. * @param array $update { * Information about the application password to update. * * @type string $uuid The unique identifier for the application password. * @type string $app_id A UUID provided by the application to uniquely identify it. * @type string $name The name of the application password. * @type string $password A one-way hash of the password. * @type int $created Unix timestamp of when the password was created. * @type int|null $last_used The Unix timestamp of the GMT date the application password was last used. * @type string|null $last_ip The IP address the application password was last used by. * } * @return true|WP_Error True if successful, otherwise a WP_Error instance is returned on error. */ public static function update_application_password( $user_id, $uuid, $update = array() ) { $passwords = static::get_user_application_passwords( $user_id ); foreach ( $passwords as &$item ) { if ( $item['uuid'] !== $uuid ) { continue; } if ( ! empty( $update['name'] ) ) { $update['name'] = sanitize_text_field( $update['name'] ); } $save = false; if ( ! empty( $update['name'] ) && $item['name'] !== $update['name'] ) { $item['name'] = $update['name']; $save = true; } if ( $save ) { $saved = static::set_user_application_passwords( $user_id, $passwords ); if ( ! $saved ) { return new WP_Error( 'db_error', __( 'Could not save application password.' ) ); } } /** * Fires when an application password is updated. * * @since 5.6.0 * @since 6.8.0 The password is now hashed using wp_fast_hash() instead of phpass. * Existing passwords may still be hashed using phpass. * * @param int $user_id The user ID. * @param array $item { * The updated application password details. * * @type string $uuid The unique identifier for the application password. * @type string $app_id A UUID provided by the application to uniquely identify it. * @type string $name The name of the application password. * @type string $password A one-way hash of the password. * @type int $created Unix timestamp of when the password was created. * @type int|null $last_used The Unix timestamp of the GMT date the application password was last used. * @type string|null $last_ip The IP address the application password was last used by. * } * @param array $update The information to update. */ do_action( 'wp_update_application_password', $user_id, $item, $update ); return true; } return new WP_Error( 'application_password_not_found', __( 'Could not find an application password with that id.' ) ); } /** * Records that an application password has been used. * * @since 5.6.0 * * @param int $user_id User ID. * @param string $uuid The password's UUID. * @return true|WP_Error True if the usage was recorded, a WP_Error if an error occurs. */ public static function record_application_password_usage( $user_id, $uuid ) { $passwords = static::get_user_application_passwords( $user_id ); foreach ( $passwords as &$password ) { if ( $password['uuid'] !== $uuid ) { continue; } // Only record activity once a day. if ( $password['last_used'] + DAY_IN_SECONDS > time() ) { return true; } $password['last_used'] = time(); $password['last_ip'] = $_SERVER['REMOTE_ADDR']; $saved = static::set_user_application_passwords( $user_id, $passwords ); if ( ! $saved ) { return new WP_Error( 'db_error', __( 'Could not save application password.' ) ); } return true; } // Specified application password not found! return new WP_Error( 'application_password_not_found', __( 'Could not find an application password with that id.' ) ); } /** * Deletes an application password. * * @since 5.6.0 * * @param int $user_id User ID. * @param string $uuid The password's UUID. * @return true|WP_Error Whether the password was successfully found and deleted, a WP_Error otherwise. */ public static function delete_application_password( $user_id, $uuid ) { $passwords = static::get_user_application_passwords( $user_id ); foreach ( $passwords as $key => $item ) { if ( $item['uuid'] === $uuid ) { unset( $passwords[ $key ] ); $saved = static::set_user_application_passwords( $user_id, $passwords ); if ( ! $saved ) { return new WP_Error( 'db_error', __( 'Could not delete application password.' ) ); } /** * Fires when an application password is deleted. * * @since 5.6.0 * * @param int $user_id The user ID. * @param array $item The data about the application password. */ do_action( 'wp_delete_application_password', $user_id, $item ); return true; } } return new WP_Error( 'application_password_not_found', __( 'Could not find an application password with that id.' ) ); } /** * Deletes all application passwords for the given user. * * @since 5.6.0 * * @param int $user_id User ID. * @return int|WP_Error The number of passwords that were deleted or a WP_Error on failure. */ public static function delete_all_application_passwords( $user_id ) { $passwords = static::get_user_application_passwords( $user_id ); if ( $passwords ) { $saved = static::set_user_application_passwords( $user_id, array() ); if ( ! $saved ) { return new WP_Error( 'db_error', __( 'Could not delete application passwords.' ) ); } foreach ( $passwords as $item ) { /** This action is documented in wp-includes/class-wp-application-passwords.php */ do_action( 'wp_delete_application_password', $user_id, $item ); } return count( $passwords ); } return 0; } /** * Sets a user's application passwords. * * @since 5.6.0 * * @param int $user_id User ID. * @param array $passwords { * The list of application passwords. * * @type array ...$0 { * @type string $uuid The unique identifier for the application password. * @type string $app_id A UUID provided by the application to uniquely identify it. * @type string $name The name of the application password. * @type string $password A one-way hash of the password. * @type int $created Unix timestamp of when the password was created. * @type int|null $last_used The Unix timestamp of the GMT date the application password was last used. * @type string|null $last_ip The IP address the application password was last used by. * } * } * @return int|bool User meta ID if the key didn't exist (ie. this is the first time that an application password * has been saved for the user), true on successful update, false on failure or if the value passed * is the same as the one that is already in the database. */ protected static function set_user_application_passwords( $user_id, $passwords ) { return update_user_meta( $user_id, static::USERMETA_KEY_APPLICATION_PASSWORDS, $passwords ); } /** * Sanitizes and then splits a password into smaller chunks. * * @since 5.6.0 * * @param string $raw_password The raw application password. * @return string The chunked password. */ public static function chunk_password( #[\SensitiveParameter] $raw_password ) { $raw_password = preg_replace( '/[^a-z\d]/i', '', $raw_password ); return trim( chunk_split( $raw_password, 4, ' ' ) ); } /** * Hashes a plaintext application password. * * @since 6.8.0 * * @param string $password Plaintext password. * @return string Hashed password. */ public static function hash_password( #[\SensitiveParameter] string $password ): string { return wp_fast_hash( $password ); } /** * Checks a plaintext application password against a hashed password. * * @since 6.8.0 * * @param string $password Plaintext password. * @param string $hash Hash of the password to check against. * @return bool Whether the password matches the hashed password. */ public static function check_password( #[\SensitiveParameter] string $password, string $hash ): bool { if ( ! str_starts_with( $hash, '$generic$' ) ) { /* * If the hash doesn't start with `$generic$`, it is a hash created with `wp_hash_password()`. * This is the case for application passwords created before 6.8.0. */ return wp_check_password( $password, $hash ); } return wp_verify_fast_hash( $password, $hash ); } } VARIOUS - FREIGHT TRAIN, LAST TRAINS AND ROCK ISLAND LINES - ROCKHISTORY DOUBLE CD - No Hit Records

VARIOUS – FREIGHT TRAIN, LAST TRAINS AND ROCK ISLAND LINES – ROCKHISTORY DOUBLE CD

Absolutely rightly subtitled History of Skiffle this 60 track 2 CD set brings you the mega hits and super obscurities that make up the earliest form of British Rock.

1-1 –Lonnie Donegan’s Skiffle Group Rock Island Line
1-2 –The Chas McDevitt Skiffle Group Johnny O
1-3 –The Vipers Skiffle Group It Takes A Worried Man
1-4 –Beryl Bryden’s Backroom Skiffle* Rock Me
1-5 –The Chris Barber Skiffle Group Doin’ My Time
1-6 –The Delta Skiffle Group Pick A Bale Of Cotton
1-7 –Ken Colyer’s Skiffle Group Midnight Special
1-8 –Dickie Bishop* With Lonnie Donegan’s Skiffle Group Precious Memories
1-9 –The 2.19 Skiffle Group Railroad Bill
1-10 –The Worried Men This Little Light Of Mine
1-11 –Lorrae Desmond And Her Rebels You Won’t Be Around
1-12 –Bob Wallis’ Washboard Beaters Crawdad Hole
1-13 –Lonnie Donegan’s Skiffle Group Lost John
1-14 –Johnny Parker’s Washboard Band Up There
1-15 –The Station Skiffle Group* Steamboat Bill
1-16 –The Don Lang Skiffle Group* Whiskey
1-17 –The Brian Newey Skiffle Group* Toll The Bell Easy
1-18 –The Eden Street Skiffle Group Raise A Ruckus Tonight
1-19 –Alexis Korner’s Skiffle Group Kid Man
1-20 –Ray Bush And The Avon Cities’ Skiffle Green Corn
1-21 –Jimmy Jackson’s Rock ‘N’ Skiffle California Zephyr
1-22 –The Chris Barber Skiffle Group Can’ You Line ‘Em
1-23 –The Chas McDevitt Skiffle Group New Orleans
1-24 –City Ramblers Skiffle Group Boodle-Am-Shake
1-25 –Les Hobeaux Skiffle Group* Mama Don’t Allow
1-26 –Alexis Korner’s Breakdown Group Roundhouse Stomp
1-27 –The Bob Cort Skiffle Six-Five Special
1-28 –Lonnie Donegan’s Skiffle Group Wabash Cannonball
1-29 –The Vipers Skiffle Group Don’t You Rock Me Daddy-O
1-30 –Johnny Duncan & His Blue Grass Boys Last Train To San Fernando

2-1 –The Chas McDevitt Skiffle Group Freight Train
2-2 –Lonnie Donegan’s Skiffle Group Diggin’ My Potatoes
2-3 –Johnny Duncan & His Blue Grass Boys Blue Blue Heartache
2-4 –Johnny Christmas & The Sunspots (I’m Gonna) Sing, Sing, Sing
2-5 –Lorrae Desmond And Her Rebels Preacher, Preacher
2-6 –Beryl Bryden’s Backroom Skiffle* Casey Jones
2-7 –Ken Colyer’s Skiffle Group Sportin’Lite
2-8 –The Vipers Skiffle Group Streamline Train
2-9 –Les Hobeaux Skiffle Group* Oh Mary Don’t You Weep
2-10 –Dickie Bishop & His Sidekicks* No Other Baby
2-11 –The Delta Skiffle Group K.C.Moan
2-12 –The Westcott Skiffle Group Good Mornin’ Blues
2-13 –The Chas McDevitt Skiffle Group Badman Stackolee
2-14 –Johnny Parker’s Washboard Band Canine Stomp
2-15 –Alexis Korner’s Breakdown Group Skip To My Lou
2-16 –City Ramblers Skiffle Group 2.19 Blues
2-17 –Bob Wallis’ Washboard Beaters It’s Tight Like That
2-18 –Ken Colyer’s Skiffle Group Down By The Riverside
2-19 –The 2.19 Skiffle Group Union Maid
2-20 –Johnny Christmas & The Sunspots Mr & Mrs Mississippi
2-21 –The Worried Men Fraulein
2-22 –The Lea Valley Skiffle Group I’m Gonna Walk & Talk With Jesus
2-23 –The Station Skiffle Group* Hugged My Honey
2-24 –The Don Lang Skiffle Group* By And By
2-25 –Beryl Bryden’s Backroom Skiffle* This Train
2-26 –Jimmy Miller & The Barbecues Sizzlin’ Hot
2-27 –Johnny Duncan & His Blue Grass Boys Footsprints In The Snow
2-28 –The Original Barnstormers Spasm Band* Stormin’ The Band
2-29 –Lonnie Donegan’s Skiffle Group Puttin’ On The Style
2-30 –The Vipers Skiffle Group Cumberland Gap

Share this:

£ 10.00

Add to Basket

Release Date:

Format: CD Album

All music: Rockabilly / Rock N Roll

Secret Link