All posts by chen

WP- REST-API with Java

API endpoint

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://wp-api.pw/wp-json/");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Posts

Get

The Posts endpoint returns a Post Collection containing a subset of the site’s posts.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://wp-api.pw/wp-json/posts");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Post

Create a Post Requires authentication

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            String content = '{"title": "This is a post","content_raw": "This is some content"}';
            URL url = new URL("http://wp-api.pw/wp-json/posts");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("test:password".getBytes(StandardCharsets.UTF_8)));
            conn.setRequestProperty("Content-Length", String.valueOf(content.getBytes("UTF-8").length));
            conn.setDoOutput(true);
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
            wr.writeBytes(content);
            wr.flush();
            wr.close();
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Delete

Delete a Post Requires authentication

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://wp-api.pw/wp-json/posts/229");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("DELETE");
            conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("test:password".getBytes(StandardCharsets.UTF_8)));
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Media

Post

To create the raw data for an attachment. This is a binary object (blob), such as image data or a video.

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            char[] buffer = new char[1024];
            StringWriter writer = new StringWriter();
            FileReader fileReader = new FileReader("/home/chen/IMG_1551.jpg");
            for (int n = 0; -1 != (n = fileReader.read(buffer));) {
                writer.write(buffer, 0, n);
            }
            fileReader.close();
            String content = writer.toString();
            URL url = new URL("http://wp-api.pw/wp-json/media");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "image/jpeg");
            conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("test:password".getBytes(StandardCharsets.UTF_8)));
            conn.setRequestProperty("Content-Length", String.valueOf(content.getBytes("UTF-8").length));
            conn.setDoOutput(true);
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
            wr.writeBytes(content);
            wr.flush();
            wr.close();
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Users

Get

This endpoint offers a permalink to get the current user, without needing to know the user’s ID.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
 
 
public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://wp-api.pw/wp-json/users/me");
 
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("test:password".getBytes(StandardCharsets.UTF_8)));
 
            System.out.printf("Response: %d %sn", conn.getResponseCode(), conn.getResponseMessage());
            BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String input;
 
            while ((input = br.readLine()) != null) {
                System.out.println(input);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

[自分用メモ] Amazon EC2で、あるアカウントのInstansをイメージ保存し、それを別アカウントにコピーする | Ultraひみちゅぶろぐ

仕事でAmazon EC2を使っている。その中で、あるアカウントAが所有するInstanceのイメージを作成し、それをアカウントBで使用するという場面が出てきた。要するに、あるアカウントが作成したクラウド内の仮想マシンをコピーして別アカウントで使用したいということだ。

Source: [自分用メモ] Amazon EC2で、あるアカウントのInstansをイメージ保存し、それを別アカウントにコピーする | Ultraひみちゅぶろぐ

今年も「AWS Summit」参加!!年々参加者が確実に増えている。国内の企業の採用が増えたことに要因があるのでは?立ち見が出る盛況ぶり。 | 単刀直入に申しますと

しかし、AWSを2年程度ではありますが利用し実際の稼働環境として動かして改めてAWSに対する不安はなくなった。数回EC2が停止することがあった。障害はどんなに小さい物でも心臓が痛い 障害対応をして思ったのは「こんなにも簡単に復旧できるのか?」マネージメントコンソールとターミナルでサーバにコマンドを叩くだけで それだけ それだけでいい

Source: 今年も「AWS Summit」参加!!年々参加者が確実に増えている。国内の企業の採用が増えたことに要因があるのでは?立ち見が出る盛況ぶり。 | 単刀直入に申しますと

BuddyPress 1.8 Release

BuddyPressは初級リリースから世話になったが、いまでも遺跡のサイトが沢山存在している。

BuddyPress のバージョン1.65まで、専用テーマ、もしくはBuddyPress Template Pack pluginを利用するなど、特別な対応が必要がである。

BuddyPress のバージョン1.7から、特製テーマ不要になり。時間がないためその件放置していた , BuddyPress 1.8へupgradeするきっかけに、BuddyPress Template Pack pluginを外して見た。

それを外した途端、画面にBuddyPressスタイルが消えた、どうしたらいいか、途方に暮れる!

BuddyPress のバージョン1.7から新規設置したサイトと比べると、設定など特に違いないし、なぜupgradeしてきたサイトが、BuddyPressスタイルが消えているかわからない。

Googleしたら、BuddyPress Template Pack pluginが、テーマファルタにいろいろ子フォルダを追加したとわかった。関連子フォルダ消すなど対策をしてた。それなら、一層テーマを完全に消して(つまりテーマフォルダを消す)、再度新規インストールしたら、依存BuddyPressスタイルが再度入れ直すになるので、問題解消になると思う。

早速管理画面からテーマを停止、テーマファイル削除、テーマ新規インストールをしてみたら、BuddyPressスタイルが効いて来た。

WordPress Brute Force Attacksにリソース使われない対策

4月頃から、WordPressを標的とする Brute Force Attacks が激しい!

自分のサーバも度々リソース使い果たされ、数度サービス停止に追い込まれました。

対策がとっても、更に大規模なアタックが押し寄せる。

WordPress公式サイトには、一応対策が書いてある。

http://codex.wordpress.org/Brute_Force_Attacks

しかしそれらの対策は、ハッキングされる危険が減るもので、サーバのリソースがたくさん使われることが変わりがない、リソース使い果たされる危険がまたある。

ネットでいろいろ調べるところ、ログイン自体を制限する方法が有効と考えられる。

早速.htaccess に下記のようにIP制限してみる。

RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^118\.9\.70\.195$
RewriteRule ^(.*)$ – [R=403,L]

なぜか効かない!そこでApacheの設定で、ログイン自体を制限する試みる。

<Files ~ “^wp-login.php”>
Order allow,deny
Deny from all
Satisfy All
</Files>
ErrorDocument 403 “Not acceptable”

確かアタックに効く!リソースも使われない。けど、使いたいときは、外さないとログインできない!

一層Basic認証と、IP制限を組み合わせしてみた。最終の形はこうでした。

<Files ~ “^wp-login.php”>
Order deny,allow
Allow from 118.9.70.195
Allow from 192.168.1
Deny from all

AuthUserFile /var/www/.htpasswd
AuthGroupFile /dev/null
AuthName MembersOnly
AuthType Basic
require valid-user

Satisfy Any
</Files>
ErrorDocument 403 “Not acceptable”

これて、許容IPなら制限なし、その他IPからの場合Basic認証の画面がポップアップ。リソースも使われない対策できた。