How to get current login username from onebox?

AI-generated summary

The discussion revolves around embedding Jupyter Notebooks into Discourse posts using a Onebox plugin. suanfazu is developing this plugin and faces three challenges:

  1. Getting the current login username from Onebox. suanfazu proposes using the request_store gem to save the user in the Onebox controller.
  2. Preventing Onebox from removing script tags from the notebook HTML. suanfazu suggests overriding the discourse_onebox_sanitize_config.rb source on rebuild.
  3. Understanding the caching mechanism in Onebox. suanfazu notes that modifying and saving a post does not trigger additional requests.

joebuhlig advises against pulling Discourse objects into the Onebox gem, considering it a separate entity. saulshanabrook expresses interest in the plugin’s development, inquiring about its current status.

I’m developing a plugin to embed jupyter notebooks into discourse posts. It’s a private jupyter server and the user can only share his notebooks. So i need to verify the user.

  1. how to get the current user (and maybe the author of the post or reply) in discourse onebox plugin? i need to get the username (the login name)

  2. another question is, there are script tags in notebook html? seems the onebox removes all the script tags. how to make it keep the script tags?

  3. one more question, is there any cache in one box? seems there are no more requests when i modify and save the post

below is my test code

Onebox = Onebox

module Onebox
  module Engine
    class XXXXXXNotebookOnebox
      include Engine
      include JSON
      # include CurrentUser : NameError: uninitialized constant Onebox::Engine::BigQuantNotebookOnebox::CurrentUser
      # include CurrentUser

      matches_regexp(/^https?:\/\/i\.XXXXXXX\.com\/.+\.ipynb$/)

      def placeholder_html
        'hello place holder'
      end

      def to_html
        a = 'no user '
        if current_user
          a = 'has user'
        end
        "test hello html <iframe src='https://XXXXXX.com/'></iframe>  <script>alert('test me');</script> end " + Time.new.inspect + a
      end
    end
  end
end

I may be wrong but I don’t think it’s possible to pull Discourse objects into the Onebox gem without requiring them as a dependency in some way. And even then, I’m not sure it’s a wise move. I think of Onebox as a separate entity that doesn’t require Discourse.

thanks for the reply.

  1. use request_store, save user to request_store in onebox controller
  2. not found a solution, have to override the source (lib/onebox/discourse_onebox_sanitize_config.rb) on rebuild
  3. seems so, but it’s ok for me

Did you ever develop this plugin? I am also interested in embedding Jupyter Notebooks into Discourse posts.