How to get current login username from onebox?

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.

4 Likes

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.