class Akismet_REST_API { /** * Register the REST API routes. */ public static function init() { if ( ! function_exists( 'register_rest_route' ) ) { // The REST API wasn't integrated into core until 4.4, and we support 4.0+ (for now). return false; } register_rest_route( 'akismet/v1', '/key', array( array( 'methods' => WP_REST_Server::READABLE, 'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ), 'callback' => array( 'Akismet_REST_API', 'get_key' ), ), array( 'methods' => WP_REST_Server::EDITABLE, 'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ), 'callback' => array( 'Akismet_REST_API', 'set_key' ), 'args' => array( 'key' => array( 'required' => true, 'type' => 'string', 'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ), 'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ), ), ), ), array( 'methods' => WP_REST_Server::DELETABLE, 'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ), 'callback' => array( 'Akismet_REST_API', 'delete_key' ), ) ) ); register_rest_route( 'akismet/v1', '/settings/', array( array( 'methods' => WP_REST_Server::READABLE, 'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ), 'callback' => array( 'Akismet_REST_API', 'get_settings' ), ), array( 'methods' => WP_REST_Server::EDITABLE, 'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ), 'callback' => array( 'Akismet_REST_API', 'set_boolean_settings' ), 'args' => array( 'akismet_strictness' => array( 'required' => false, 'type' => 'boolean', 'description' => __( 'If true, Akismet will automatically discard the worst spam automatically rather than putting it in the spam folder.', 'akismet' ), ), 'akismet_show_user_comments_approved' => array( 'required' => false, 'type' => 'boolean', 'description' => __( 'If true, show the number of approved comments beside each comment author in the comments list page.', 'akismet' ), ), ), ) ) ); register_rest_route( 'akismet/v1', '/stats', array( 'methods' => WP_REST_Server::READABLE, 'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ), 'callback' => array( 'Akismet_REST_API', 'get_stats' ), 'args' => array( 'interval' => array( 'required' => false, 'type' => 'string', 'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_interval' ), 'description' => __( 'The time period for which to retrieve stats. Options: 60-days, 6-months, all', 'akismet' ), 'default' => 'all', ), ), ) ); register_rest_route( 'akismet/v1', '/stats/(?P[\w+])', array( 'args' => array( 'interval' => array( 'description' => __( 'The time period for which to retrieve stats. Options: 60-days, 6-months, all', 'akismet' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'permission_callback' => array( 'Akismet_REST_API', 'privileged_permission_callback' ), 'callback' => array( 'Akismet_REST_API', 'get_stats' ), ) ) ); register_rest_route( 'akismet/v1', '/alert', array( array( 'methods' => WP_REST_Server::READABLE, 'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ), 'callback' => array( 'Akismet_REST_API', 'get_alert' ), 'args' => array( 'key' => array( 'required' => false, 'type' => 'string', 'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ), 'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ), ), ), ), array( 'methods' => WP_REST_Server::EDITABLE, 'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ), 'callback' => array( 'Akismet_REST_API', 'set_alert' ), 'args' => array( 'key' => array( 'required' => false, 'type' => 'string', 'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ), 'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ), ), ), ), array( 'methods' => WP_REST_Server::DELETABLE, 'permission_callback' => array( 'Akismet_REST_API', 'remote_call_permission_callback' ), 'callback' => array( 'Akismet_REST_API', 'delete_alert' ), 'args' => array( 'key' => array( 'required' => false, 'type' => 'string', 'sanitize_callback' => array( 'Akismet_REST_API', 'sanitize_key' ), 'description' => __( 'A 12-character Akismet API key. Available at akismet.com/get/', 'akismet' ), ), ), ) ) ); } /** * Get the current Akismet API key. * * @param WP_REST_Request $request * @return WP_Error|WP_REST_Response */ public static function get_key( $request = null ) { return rest_ensure_response( Akismet::get_api_key() ); } /** * Set the API key, if possible. * * @param WP_REST_Request $request * @return WP_Error|WP_REST_Response */ public static function set_key( $request ) { if ( defined( 'WPCOM_API_KEY' ) ) { return rest_ensure_response( new WP_Error( 'hardcoded_key', __( 'This site\'s API key is hardcoded and cannot be changed via the API.', 'akismet' ), array( 'status'=> 409 ) ) ); } $new_api_key = $request->get_param( 'key' ); if ( ! self::key_is_valid( $new_api_key ) ) { return rest_ensure_response( new WP_Error( 'invalid_key', __( 'The value provided is not a valid and registered API key.', 'akismet' ), array( 'status' => 400 ) ) ); } update_option( 'wordpress_api_key', $new_api_key ); return self::get_key(); } /** * Unset the API key, if possible. * * @param WP_REST_Request $request * @return WP_Error|WP_REST_Response */ public static function delete_key( $request ) { if ( defined( 'WPCOM_API_KEY' ) ) { return rest_ensure_response( new WP_Error( 'hardcoded_key', __( 'This site\'s API key is hardcoded and cannot be deleted.', 'akismet' ), array( 'status'=> 409 ) ) ); } delete_option( 'wordpress_api_key' ); return rest_ensure_response( true ); } /** * Get the Akismet settings. * * @param WP_REST_Request $request * @return WP_Error|WP_REST_Response */ public static function get_settings( $request = null ) { return rest_ensure_response( array( 'akismet_strictness' => ( get_option( 'akismet_strictness', '1' ) === '1' ), 'akismet_show_user_comments_approved' => ( get_option( 'akismet_show_user_comments_approved', '1' ) === '1' ), ) ); } /** * Update the Akismet settings. * * @param WP_REST_Request $request * @return WP_Error|WP_REST_Response */ public static function set_boolean_settings( $request ) { foreach ( array( 'akismet_strictness', 'akismet_show_user_comments_approved', ) as $setting_key ) { $setting_value = $request->get_param( $setting_key ); if ( is_null( $setting_value ) ) { // This setting was not specified. continue; } // From 4.7+, WP core will ensure that these are always boolean // values because they are registered with 'type' => 'boolean', // but we need to do this ourselves for prior versions. $setting_value = Akismet_REST_API::parse_boolean( $setting_value ); update_option( $setting_key, $setting_value ? '1' : '0' ); } return self::get_settings(); } /** * Parse a numeric or string boolean value into a boolean. * * @param mixed $value The value to convert into a boolean. * @return bool The converted value. */ public static function parse_boolean( $value ) { switch ( $value ) { case true: case 'true': case '1': case 1: return true; case false: case 'false': case '0': case 0: return false; default: return (bool) $value; } } /** * Get the Akismet stats for a given time period. * * Possible `interval` values: * - all * - 60-days * - 6-months * * @param WP_REST_Request $request * @return WP_Error|WP_REST_Response */ public static function get_stats( $request ) { $api_key = Akismet::get_api_key(); $interval = $request->get_param( 'interval' ); $stat_totals = array(); $response = Akismet::http_post( Akismet::build_query( array( 'blog' => get_option( 'home' ), 'key' => $api_key, 'from' => $interval ) ), 'get-stats' ); if ( ! empty( $response[1] ) ) { $stat_totals[$interval] = json_decode( $response[1] ); } return rest_ensure_response( $stat_totals ); } /** * Get the current alert code and message. Alert codes are used to notify the site owner * if there's a problem, like a connection issue between their site and the Akismet API, * invalid requests being sent, etc. * * @param WP_REST_Request $request * @return WP_Error|WP_REST_Response */ public static function get_alert( $request ) { return rest_ensure_response( array( 'code' => get_option( 'akismet_alert_code' ), 'message' => get_option( 'akismet_alert_msg' ), ) ); } /** * Update the current alert code and message by triggering a call to the Akismet server. * * @param WP_REST_Request $request * @return WP_Error|WP_REST_Response */ public static function set_alert( $request ) { delete_option( 'akismet_alert_code' ); delete_option( 'akismet_alert_msg' ); // Make a request so the most recent alert code and message are retrieved. Akismet::verify_key( Akismet::get_api_key() ); return self::get_alert( $request ); } /** * Clear the current alert code and message. * * @param WP_REST_Request $request * @return WP_Error|WP_REST_Response */ public static function delete_alert( $request ) { delete_option( 'akismet_alert_code' ); delete_option( 'akismet_alert_msg' ); return self::get_alert( $request ); } private static function key_is_valid( $key ) { $response = Akismet::http_post( Akismet::build_query( array( 'key' => $key, 'blog' => get_option( 'home' ) ) ), 'verify-key' ); if ( $response[1] == 'valid' ) { return true; } return false; } public static function privileged_permission_callback() { return current_user_can( 'manage_options' ); } /** * For calls that Akismet.com makes to the site to clear outdated alert codes, use the API key for authorization. */ public static function remote_call_permission_callback( $request ) { $local_key = Akismet::get_api_key(); return $local_key && ( strtolower( $request->get_param( 'key' ) ) === strtolower( $local_key ) ); } public static function sanitize_interval( $interval, $request, $param ) { $interval = trim( $interval ); $valid_intervals = array( '60-days', '6-months', 'all', ); if ( ! in_array( $interval, $valid_intervals ) ) { $interval = 'all'; } return $interval; } public static function sanitize_key( $key, $request, $param ) { return trim( $key ); } } As Azerbaijan Consolidates Control, Armenians Flee Nagorno-Karabakh - Novichok (Moscow) Times
Saturday, December 13, 2025
  • Login
No Result
View All Result
NEWSLETTER
Novichok (Moscow) Times
Social icon element need JNews Essential plugin to be activated.
  • Home
  • CARTOONS
  • UKRAINE
    • KYIV POST
    • Pravda
  • BELLINGCAT
  • THE INSIDER
  • NAVALNY
  • Home
  • CARTOONS
  • UKRAINE
    • KYIV POST
    • Pravda
  • BELLINGCAT
  • THE INSIDER
  • NAVALNY
No Result
View All Result
Novichok (Moscow) Times

As Azerbaijan Consolidates Control, Armenians Flee Nagorno-Karabakh

by novichoktimes
September 28, 2023
in News
0
As Azerbaijan Consolidates Control, Armenians Flee Nagorno-Karabakh

[ad_1]

Newly obtained satellite images show the mass exodus of people from the Nagorno-Karabakh region, where fears of the ethnic cleansing of Armenians have escalated since Azerbaijani forces launched an offensive there last week.

Other open source data collected by Bellingcat confirms ongoing Azerbaijani military presence in communities ethnic Armenians have fled from.

Azerbaijan’s attack last week exacerbated an ongoing humanitarian crisis in Nagorno-Karabakh set in motion by a nine-month blockade of the self-governing territory. Fears of ethnic cleansing have prompted thousands of civilians to seek safety in neighbouring Armenia. Over 70,000 ethnic Armenians have fled since Baku launched the offensive last week according to Nazeli Baghdasaryan, the press secretary of Armenia’s Prime Minister Nikol Pashinyan.

Armenian civilians entering Armenian territory have told journalists of cases of Azerbaijani soldiers committing human rights violations. For example, Armenian investigative website Hetq published the testimonies of a family from the village of Vaghuhas, who say that Azerbaijani soldiers fired weapons and demanded that all Armenians leave. Bellingcat has not been able to independently verify these claims. Azerbaijan’s Ministry of Health said on Wednesday that 192 members of its armed forces have been killed and 511 injured.

Human rights groups and intergovernmental organisations, including the UN, continue to push for access to Nagorno-Karabakh.

Since the latest escalation of this long-running conflict, Bellingcat has monitored open source information in an attempt to understand the scale of this crisis and is consistently archiving footage from the area.

Satellite Imagery from Martakert

Bellingcat obtained Planet satellite imagery from Martakert on September 24. It showed a large queue of vehicles leaving the city towards the west. The vehicles all halted (40.221, 46.791), possibly due to a roadblock. No queues could be observed at any other road out of the city which is visible in the satellite imagery.

Interestingly, these vehicles are heading along a northern road to the Sarsang Reservoir, which appears to have come under Azerbaijani control by September 22. A video posted on TikTok one day earlier shows Azeri-speaking people in military uniform near the reservoir (40.213, 46.800). 

A video posted on TikTok by Meydan TV on September 21 2023

We don’t know exactly why these vehicles took the more northerly road, which goes via the Sarsang Reservoir. The southern road would normally be another route into Stepanakert and the Lachin corridor.

‘Martakert is Ours’

Open source evidence buttresses claims that Martakert is now under the control of Azerbaijani forces.

Bellingcat found multiple mentions of civilians fleeing the city of Martakert – known as Ağdərə in Azerbaijani- and surrounding villages in the east of Nagorno-Karabakh. Several gave interviews in Karabakh’s de-facto capital of Stepanakert, where Russian peacekeepers remain. Martakert came under the control of the self-declared Armenian government of Karabakh in 1992. Sections of the neighbouring Agdam Region were transferred to Azerbaijani control after the 2020 war, leaving Martakert one of the last cities in Karabakh near the line of contact (the front line separating Karabakh Armenian and Azerbaijani troops).

Mass movement from Martakert is one case study that demonstrates the scale of displacement currently occurring within Karabakh.

The below image, posted to TikTok on Sunday, September 24, shows an Azerbaijani soldier standing at the entrance to the city. The sign gives Martakert’s name in Armenian (40.191459, 46.818861).

A still image from a TikTok video posted on September 24 2023

A group of Azerbaijani soldiers also posed for a photo in front of Martakert’s regional administration building (40.215012, 46.826210) posted to TikTok on September 26, suggesting control of the city centre. The text reads  ‘Agdere you are free!’ in Azerbaijani.

A still image from a TikTok video posted on September 26 2023

Flags of the de-facto Republic of Artsakh could be seen on the ground in front of the same building in a video filmed by an Azerbaijani-speaking individual and posted to X on September 26.

Footage emerges of Azeri troops inside Nagorno Karabakh’s town of Martakert, now completely empty of it’s Armenian residents. This is the first time the town has come under de facto Azeri control. pic.twitter.com/0iPIwQRI9r

— Nagorno Karabakh Observer (@NKobserver) September 26, 2023

Videos have also surfaced that show Azerbaijani soldiers inside abandoned homes. This video states that it is of an ‘Armenian house in Ağdərə’ although its precise location cannot be determined due to landscape features not being visible.

A video posted on TikTok on 24 September 2023

Four days earlier, a TikTok user posted a video of civilians waiting near Martakert’s administration building with the words ‘Artsakh, Martakert’ (40.215243, 46.826023).  

A video posted on TikTok on 21 September 2023

On September 24, one Armenian resident filmed cars leaving the city on Azamartikneri Street (40.2150665644, 46.8161031938).

“People are stunned, packed, in a motorcade, all of them crying…one’s heart breaks, my heart breaks… it’s simply shattered. What is this? running around aimlessly, going insane. Goodbye my homeland, my Martakert. My heart doesn’t function anymore…” says the woman.

A video posted on YouTube on September 24 2023

The term ‘Ağdərə’ has also been used by Azerbaijanis online to refer to other towns in the Martakert region of Karabakh, such as in this video, originally posted on Telegram, of an Azerbaijani military ambulance filmed in the town of Getavan, known in Azerbaijani as Qozlukörpü (40.130363, 46.456043) and this video, originally posted on TikTok, which the user captioned as having taken place in Charekdar, known in Azerbaijani as Çanyataq (40.135976, 46.775129).

An additional video from Charekdar shows Azerbaijani soldiers and an armoured vehicle firing in the direction of a group of houses (40.137779, 46.344075), with the 13th-century Charektar Monastery visible on a hilltop above. The landscape matched that seen in the below Mapillary street view; a silhouette of the monastery on the hilltop can also be seen in this Flickr image from 2014.

Another video of an Azerbaijani armoured personnel carrier and troops captioned ‘Agdere’ was uploaded to TikTok on September 21.

A video posted on TikTok on 21 September 2023

It was also geolocated to the river valley north of Charektar (40.144572, 46.339772), also with the help of a Mapillary street view.

A further video from Charektar (40.141879, 46.343237), geolocated by Jake Godin of Scripps News, shows the cameraman firing a gun into what appears to be a civilian building.

A video posted to an Azerbaijani Telegram channel on 21 September 2023

This is a selection of open source information from one area of Nagorno-Karabakh and may not necessarily be representative of all other districts. Nevertheless, this provides some hints as to the situation unfolding in the area.

The Road to Armenia

Bellingcat also obtained three Maxar satellite images from September 26 which show congestion along the Lachin Corridor towards Armenia.

Maxar Technologies/Handout via Reuters
Maxar Technologies/Handout via Reuters
Maxar Technologies/Handout via Reuters

On September 28 CivilNet reported that the leaders of the Republic of Artsakh had signed a decree on the dissolution of all de-facto state institutions by the start of 2024.


Jake Godin and Maxim Edwards contributed research alongside members of Bellingcat’s Global Authentication Project (GAP.)

Bellingcat is a non-profit and the ability to carry out our work is dependent on the kind support of individual donors. If you would like to support our work, you can do so here. You can also subscribe to our Patreon channel here. Subscribe to our Newsletter and follow us on X here and Mastodon here.



[ad_2]

Source link

novichoktimes

novichoktimes

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Usefull Links

  • Home
  • CARTOONS
  • UKRAINE
    • KYIV POST
    • Pravda
  • BELLINGCAT
  • THE INSIDER
  • NAVALNY

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
  • UKRAINE
  • CARTOONS
  • News

© 2021-2023 Novichok (Moscow) Times

No Result
View All Result
  • Home
  • CARTOONS
  • UKRAINE
    • KYIV POST
    • Pravda
  • BELLINGCAT
  • THE INSIDER
  • NAVALNY

© 2021-2023 Novichok (Moscow) Times

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In