• Hi Guest!

    We are extremely excited to announce the release of our first Beta1.1 and the first release of our Public AddonKit!
    To participate in the Beta, a subscription to the Entertainer or Creator Tier is required. For access to the Public AddonKit you must be a Creator tier member. Once subscribed, download instructions can be found here.

    Click here for information and guides regarding the VaM2 beta. Join our Discord server for more announcements and community discussion about VaM2.
  • Hi Guest!

    VaM2 Resource Categories have now been added to the Hub! For information on posting VaM2 resources and details about VaM2 related changes to our Community Forums, please see our official announcement here.

Plugin template, GitHub Actions and Virtamate forum automation

Acid Bubbles

Invaluable member
Developer
Featured Contributor
Joined
May 11, 2020
Messages
1,404
Solutions
10
Reactions
5,861
I don't like doing the same thing twice. I'll spend days avoiding repeating a 5 minutes task.

I already have a plugin template where everything is automated using GitHub Actions: https://github.com/acidbubbles/vam-plugin-template

Except posting to this new otherwise-amazing resouces site.

So, until this becomes official, here's a few notes on how I'll automate this from GitHub... eventually.

Code:
$url = "https://hub.virtamate.com/dev/index.php?login/login"
$username = "you@example.org"
$password = "please-dont-use-1234"
curl -c cookies.txt "$url" -w "%{http_code}"
curl -c cookies.txt -b cookies.txt -d "login=$username&password=$password&cookie_check=1&redirect=https://hub.virtamate.com/dev&register=0&remember=0" -w "%{http_code}" $url

Now to actually create a new version for an existing post... the content type here being
Code:
multipart/form-data; boundary=---------------------------272578178724936978892724889818

Code:
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="new_version"

1
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="version_string"

v0.0.0-test
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="version_type"

external
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="external_download_url"

https://github.com/acidbubbles/vam-timeline/releases
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="new_update"

1
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="update_title"

Timeline v0.0.0-test
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="update_message_html"

<p>Please hold for release notes...</p>
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="attachment_hash"

2add47801e153f4a80e79fcc46648129
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="attachment_hash_combined"

{"type":"resource_update","context":{"resource_id":94},"hash":"2add47801e153f4a80e79fcc46648129"}
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="_xfToken"

1589251266,971e77ec81ffd3a633129e24a551a346
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="_xfRequestUri"

/dev/index.php?resources/timeline.94/post-update
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="_xfWithData"

1
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="_xfToken"

1589251266,971e77ec81ffd3a633129e24a551a346
-----------------------------272578178724936978892724889818
Content-Disposition: form-data; name="_xfResponseType"

json
-----------------------------272578178724936978892724889818--

So that means to actually make this last request, I need to:

1. Determine how to create this hash, which should be found in the javascript code
2. Show the form and extract the csrf token before building this
3. Create a template of the form data to push and POST it

So... a pain, but feasible.

The response can then be verified:

Code:
{
    "status": "ok"
}
 
Back
Top Bottom